Bonjour après une longue pause je reviens XD . J'aurai une question par rapport au tempo comment je doit l'initialiser car il est pas déclarer . Merci d'avance ![]()
while (millis() - chrono < tempo) {
if (irrecv.decode(&results)) {
if (results.value == 0xFF6897) return true;
jeuled();
}
Visiblement 'tempo' est durée de jeuled. Tu peux la définir dans l'entête de ton code comme ceci (en millisecondes) :
#define tempo 5000ul // ms
Je mets cette valeur au hasard, tu peux la modifier selon tes besoins. Le #define demande au compilateur de mettre cette valeur à la place de tempo à chaque fois qu'il le rencontre dans le code. du coup, tempo n'est plus une variable mais un chiffre. 'ul' sert à lui dire que c'est un 'unsigned long', pour coller mieux avec les variables utilisées avec millis(), donc 'chrono' dans le cas présent.
Merci beaucoup pourriez vous me redire ligne par ligne à quoi correspond ce que vous m'aviez demandé de faire pour pouvoir éteindre quand je veux mes leds
void loop() {
unsigned long chrono = millis();
while (millis() - chrono < tempo) {
if (irrecv.decode(&results)) {
if (results.value == 0xFF6897) {
return true;
jeuled();
}
}
}
return false;
}
void jeuled() {
bool toucheOff;
bool lectureTelec(int duree);
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
toucheOff = lectureTelec (300);
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
toucheOff = lectureTelec (300);
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
toucheOff = lectureTelec (300);
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
toucheOff = lectureTelec (300);
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
toucheOff = lectureTelec (300);
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
digitalWrite(7, LOW);
toucheOff = lectureTelec (300);
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
toucheOff = lectureTelec (300);
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
toucheOff = lectureTelec (200); // <-- 200 ???
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(7, HIGH);
toucheOff = lectureTelec (300);
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
toucheOff = lectureTelec (300);
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
toucheOff = lectureTelec (300);
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
digitalWrite(7, LOW);
toucheOff = lectureTelec (300);
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
toucheOff = lectureTelec (300);
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
toucheOff = lectureTelec (300);
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
digitalWrite(7, LOW);
toucheOff = lectureTelec (300);
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
toucheOff = lectureTelec (300);
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
digitalWrite(7, LOW);
toucheOff = lectureTelec (300);
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
toucheOff = lectureTelec (300);
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(7, HIGH);
toucheOff = lectureTelec (500);
}
Ton code ne marchera pas comme il est (en tout cas celui que tu montres dans le message précédent), car il n'y a pas de setup. Mais c'est peut-être juste un extrait ?
Ces lignes font ceci :
void loop() { // Ceci est fait à chaque lancement de la loop (en boucle)
unsigned long chrono = millis(); // initialise un chrono à la valeur de millis ()
// millis() renvoie le nombre de millisecondes écoulées depuis le lancement du programme
while (millis() - chrono < tempo) { // vérifie qu'il ne s'est pas écoulé plus de 'tempo' millisecondes
// depuis l'initialisation du chrono (dans ce cas, le début de l'exécution de la loop)
// tant que le temps écoulé est inférieur à 'tempo' on fait ce qui suit :
if (irrecv.decode(&results)) { // vérifie qu'un code est lu sur le récepteur IR
if (results.value == 0xFF6897) { // compare ce code avec la valeur recherchée
return true; // si le code est celui qu'on cherche, arrêt de la fonction (la loop !)
// et on renvoie 'true' (un booléen)
jeuled(); // ne sera jamais exécuté puisque le return sort de la fonction (la loop)
} // fin du test 'if' de la comparaison
} // fin du 'if' de la vérification de réception de code
} // fin du 'while'
return false; // <-- Attention, ça arrête la loop : pas bon du tout ! A enlever sauf si tu sais vraiment ce que tu fais
}
Ce code va scruter le récepteur pendant la durée 'tempo' (en millisecondes) : s'il reçoit ne reçoit rien, il renvoie 'false'. S'il reçoit un code : si code vaut 0xFF6897 il renvoie 'true', sinon il renvoie 'false'. Dans tous les cas, l'animation ne sera pas jouée. Si tu veux qu'elle soit jouée lors de la réception du code 0xFF6897, il faut mettre la ligne jeuled(); avant la ligne return true;
Enfin, il vaut mieux mettre ces instructions dans une fonction plutôt que dans la loop, parce que les 'return' vont arrêter l'exécution, alors que tu veux peut-être que ça soit exécuté en boucle.
bool verifyCode() { // <-- type 'bool' puisque tu renvoie un booléen
unsigned long chrono = millis();
while (millis() - chrono < tempo) {
if (irrecv.decode(&results)) {
if (results.value == 0xFF6897) {
return true;
jeuled();
}
}
}
return false;
}
void loop() {
verifyCode();
}