Bonsoir,
Je possède une arduino uno. Je souhaite utiliser le timer 2 pour générer des interruptions toutes les 100ms et exécuter une fonction lors de ces interruptions, ce que je suis parvenu à faire. Au travers de cette fonction je voudrais générer des temporisations de la durée de mon choix par exemple 500ms dans le but de réaliser un chenillard (pour l’instant)
Voici mon code, il sera peut-être plus clair que mes mauvaises explications…
//Bibliothèques à inclure
#include <MsTimer2.h>
//Indentification des éléments à leurs PIN
int D0=2;
int D1=3;
int D2=4;
int D3=5;
int D4=6;
//Définition des variables globales
int i,j=0;
boolean flag=LOW;
void setup() {
//Initialisation de la liaison série pour utiliser le moniteur
Serial.begin(9600);
//Définition des E/S
pinMode(D0,OUTPUT);
pinMode(D1,OUTPUT);
pinMode(D2,OUTPUT);
pinMode(D3,OUTPUT);
pinMode(D4,OUTPUT);
//Toutes les LED sont eteintes au démarrage
digitalWrite(D0,LOW);
digitalWrite(D1,LOW);
digitalWrite(D2,LOW);
digitalWrite(D3,LOW);
digitalWrite(D4,LOW);
//Définition de l'horloge temps réel
MsTimer2::set(100, htr); // une interruption toutes les 100ms
MsTimer2::start();
}
//tache de fond
void loop() {
digitalWrite(D0+i,HIGH);
i++;
while(!flag){}
digitalWrite(D0+i-1,LOW);
if(i==D4) i=0;
}
//horoge temps réel
void htr()
{
if(j==5)
{
flag=!flag;
j=0;
}
else
{
j++;
}
}
Ce que j’attends de ce code c’est qu’il incrémente la variable j toutes les 100ms et au bout de 5 appels de la fonction htr la variable logique flag soit inversée ce qui génère ma tempo de 500ms dans ma boucle loop via le while(!flag).
Mon problème est que la variable j est remise à zéro chaque fois que la fonction htr se termine et je ne comprends pas pourquoi. Cela a pour effet de me faire entrer dans une boucle infinie dans ma fonction loop. Est ce que cela est normal ? (Je parle du fait que la variable j soit reset à chaque fois) Je pense que la valeur de j devrait être conservée mais ce n’est pas le cas et je ne comprends pas pourquoi.
Je remercie d’avance la personne qui pourra éclairer ma lanterne.