En principe y'a qu'un seul calcul, qui est juste une division d'ailleurs, vu que tu affiches les valeurs qu'à un endroit.
Faut absolument que t’apprenne à faire un vrai timer (non bloquant) si tu veux faire un truc sérieux (voir ci-après), tu peux pas te permettre de bloquer la régu juste pour pouvoir afficher un truc par ex, sans compter que tu peux pas faire plusieurs choses à différentes vitesses avec des delay().
T'oublie l'échauffement du régu lui-même, c'est pas juste l'environnement, mais comme je disais c'est toi qui vois, je te laisse tranquille
Donc, concernant le timer c'est vraiment pas compliqué; le concept c'est de de stocker le temps au début du timer et de calculer la différence entre le temps actuel et le départ: si la durée obtenue est inférieure au délai voulu on ne fait rien, si elle est supérieure on exécute ce qu'on voulait exécuter après le délai voulu :
Pour un peu plus de propreté et pouvoir faire plusieurs timers sans se mélanger les pinceaux je m'étais fait une classe https://pastebin.com/zr5AGtr2 t'as juste à inclure ce code avant le reste et pour l'utiliser c'est simple :
Comme tu peux voir il y a deux utilisations possibles: en général on utilise la première version (myTimer) quand on veut un timer qui s'exécute qu'une fois, et on utilisera la seconde version (myOtherTimer) qui prend le délai directement dans le test de fin quand on ne sait pas le délai à l'avance (dans setup()), ou quand on veut un timer qui boucle à l'infini ou encore quand on veut pouvoir changer le délai dynamiquement.
Si tu veux un timer qui s'exécute qu'une fois il suffit de retirer le ->reset(); qui est dans le if, comme dans l'exemple du premier timer.
N'oublies pas le ->update(); parce que sinon le délai sera infini et le code s'exécutera jamais...
Et même si le timer n'est pas bloquant n'oublies pas que ce que tu exécutes l'est. Par exemple dans le premier timer si tu prends 2 sec pour faire un truc alors ce que tu exécutes dans le second timer ne sera pas exécuté toutes les secondes comme voulu mais toutes les 2 secondes, l'arduino n'est pas multi-tâches...
Faut absolument que t’apprenne à faire un vrai timer (non bloquant) si tu veux faire un truc sérieux (voir ci-après), tu peux pas te permettre de bloquer la régu juste pour pouvoir afficher un truc par ex, sans compter que tu peux pas faire plusieurs choses à différentes vitesses avec des delay().
T'oublie l'échauffement du régu lui-même, c'est pas juste l'environnement, mais comme je disais c'est toi qui vois, je te laisse tranquille
Donc, concernant le timer c'est vraiment pas compliqué; le concept c'est de de stocker le temps au début du timer et de calculer la différence entre le temps actuel et le départ: si la durée obtenue est inférieure au délai voulu on ne fait rien, si elle est supérieure on exécute ce qu'on voulait exécuter après le délai voulu :
Code :
uint32_t start;
void setup()
{
start = millis();
}
void loop()
{
if ((millis() - start) > 5000) {
//
// fait ce que t'as à faire après 5 secondes
//
start = millis(); // supprime cette ligne si tu veux juste que le timer s'exécute une seule fois après le démarrage
}
}
Pour un peu plus de propreté et pouvoir faire plusieurs timers sans se mélanger les pinceaux je m'étais fait une classe https://pastebin.com/zr5AGtr2 t'as juste à inclure ce code avant le reste et pour l'utiliser c'est simple :
Code :
Timer *myTimer = new Timer();
Timer *myOtherTimer = new Timer();
void setup()
{
myTimer->reset(5000UL);
}
void loop()
{
myTimer->update();
if (myTimer->hasEnded()) {
// fait ce que tu veux ici après 5 secondes
}
myOtherTimer->update();
if (myOtherTimer->hasEnded(1000UL)) {
myOtherTimer->reset();
// fait ce que tu veux ici toutes les secondes
}
}
Comme tu peux voir il y a deux utilisations possibles: en général on utilise la première version (myTimer) quand on veut un timer qui s'exécute qu'une fois, et on utilisera la seconde version (myOtherTimer) qui prend le délai directement dans le test de fin quand on ne sait pas le délai à l'avance (dans setup()), ou quand on veut un timer qui boucle à l'infini ou encore quand on veut pouvoir changer le délai dynamiquement.
Si tu veux un timer qui s'exécute qu'une fois il suffit de retirer le ->reset(); qui est dans le if, comme dans l'exemple du premier timer.
N'oublies pas le ->update(); parce que sinon le délai sera infini et le code s'exécutera jamais...
Et même si le timer n'est pas bloquant n'oublies pas que ce que tu exécutes l'est. Par exemple dans le premier timer si tu prends 2 sec pour faire un truc alors ce que tu exécutes dans le second timer ne sera pas exécuté toutes les secondes comme voulu mais toutes les 2 secondes, l'arduino n'est pas multi-tâches...