animation led , while et telecommande à distance

Bonjour j'aurai une question et ca fait 2 semaines que je bloque et que je cherche et essaie ,ayant aussi déjà demandé à des amis qui programme ,mais pas de soluce efficace. Mon problème est le suivant ,j'ai voulus faire un programme que quant j'appuie sur le bouton(exemple bouton 1) d'une telecommande , alors un "jeu de led" s'active (comme c pour noel)et dès que j'appuie sur un autre bouton (exemple bouton 0) il s'arrête , sauf que là quand j'appuie au début, les leds s'anime mais alors lorsque je veux les éteindres plus rien ne se passe et j'ai une boucle infinie. En effet j'utilise un while qui vérifie la condition de départ et dans le while j'ai mis un if pour que la conditions si elle n'est pas vérifier sort de la boucle avec un break .Ah oui et je suis un débutant , ca fait 1 mois seulement . :slight_smile:

je ne vous met pas la fonction jeuled() pour vous épargner de longue ligne qui sont juste des animations suivant les leds avec des LOW et HIGH.

PROGRAMME:

#include <IRremote.h>
int RECV_PIN = 3;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
irrecv.enableIRIn();
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {

if (results.value == 0xFF30CF) {
while (results.value == 0xFF30CF) {
jeuled();
if (results.value == 0xFF6897) {
break;

}
}
}
else {
off();
}
irrecv.resume();
}
}

void jeuled() {
[...]
}

Merci beaucoup déjà d'avance à ceux qui me lirons :wink:

Bonjour Manuarii

Il est nécessaire de communiquer le code EN ENTIER.

En admettant que vous ne fassiez pas de lecture du code IR dans la fonction jeuled() ou off():

Dans loop() vous lisez le code IR.
Si ce code vaut 0xFF30CF vous rentrez dans une boucle infinie [ while (results.value == 0xFF30CF) ] car vous ne relisez plus le code IR.

Cordialement,
bidouilleelec

Salut
Tu devrais indenter ton code correctement (ctrl-t). Tu y verrais plus clair.
Tu ne sortiras jamais de la boucle while :

if (results.value == 0xFF30CF) {
  while (results.value == 0xFF30CF) {
    jeuled();
    if (results.value == 0xFF6897) {
      break;

    }
  }
}
else {
  off();
}

STP : le code entre balises ça aide aussi

@+

Hello
Comme demandé par hbachetti, édite tes messages pour mettre tes codes entre balises CODE (la touche </> dans la fenêtre d'écriture des messages. C'est plus facile à lire.... Merci

Ah désolé , je savais pas comment faire merci :wink:

programme :

#include <IRremote.h>
int RECV_PIN = 3;

IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {

  irrecv.enableIRIn();
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
}
void loop() {

  if (irrecv.decode(&results)) {

    if (results.value != 0xFF6897) {
      while (results.value != 0xFF6897) {
        jeuled();
        if (results.value == 0xFF6897) {
          break;

        }

      }
    }

    else {
      off();
    }
    irrecv.resume();
  }
}
void jeuled() {

  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, HIGH);


  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(200);
  digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(7, HIGH);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, HIGH);
  delay(300);
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(7, HIGH);
  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(7, LOW);
  delay(300);
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(7, HIGH);
  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(7, LOW);
  delay(300);
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(7, HIGH);
  delay(300);
  digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(7, HIGH);
  delay(500);
}
void off() {
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);
}

Tes conditions sont un peu tordues... Je pense que ceci

if (results.value != 0xFF6897) {
      while (results.value != 0xFF6897) {
        jeuled();
        if (results.value == 0xFF6897) {
          break;

        }

     }

est tout simplement équivalent à

      while (results.value != 0xFF6897) jeuled();

D'accord du coup il ne lis qu'une condition et comment faire pour qu'il revérifie si la condition est toujours bonne ?

Tant qu'elle est vérifiée, le while est appliqué, et la fonction jeuled est exécutée. Si cette fonction ne modifie pas la valeur testée, ce sera une boucle infinie.

comment je fais pour modifier avec un digitalread() ? , je sais pas trop comment . En tout j'ai fais des essais pour comprendre et si je mes dans le if contenu dans le while la même conditions du while , mes leds s'allume et du coup s'arrête car vérifie la même conditions .Mais ouai dès que je veux vérifier une condition différente de la 1er il ne fais plus attention car de ce que j'ai compris il ne revérifie pas l'état du code de la telecommande .

voici mon essai pour comprendre le problème :frowning: tous la même conditions)

if (results.value != 0xFF6897) {
      while (results.value != 0xFF6897) {
        jeuled();
        if (results.value != 0xFF6897) {
          break;

        }

     }

Si dans ton while tu n'as pas

     irrecv.resume(); // Receive the next value

puis ensuite

 if (irrecv.decode(&results)) {
....
}

la valeur de results.value ne changera jamais et tu seras coincé dans ton while.

Bonjour Manuarii

Manuarii:
comment je fais pour modifier avec un digitalread() ?

Mais pourquoi un digitalread()? Et de quoi?

Il faut faire un irrecv.resume(); et un irrecv.decode(&results) dans le while.

Cordialement,
bidouillelec

Bon, ton programme a 2 problèmes :

  • le premier, tu l'as identifié, c'est de lancer la fonction jeuled à l’appui sur une touche,
  • mais le second, c'est la durée de cette même fonction : tu as des delay (qui sont des instructions bloquantes : le processeur ne fait rien pendant ce temps, il attend juste la fin du délai) dans cette fonction, pour une durée cumulée de près de 6 secondes. Donc si tu appuies sur le bouton stop pendant ce temps, la commande ne sera pas reçue et donc pas exécutée.

Pour le premier problème, je pense que remplacer le while par un if suffira à le résoudre :

if (results.value != 0xFF6897) jeuled();

Mais pour le second, c'est l'architecture de ton programme qu'il faut adapter pour le résoudre. Je crois comprendre que le code 0xFF6897 correspond à la touche 'stop'. Donc, il ne faut pas tester si le code reçu est différent de 0xFF6897 mais s'il est égal, et exécuter la fonction 'off' dans ce cas.

Donc, si je comprends bien ton besoin : si le code reçu est différent de 0xFF6897 tu joues l'animation 'jeuled', mais si le code reçu vaut 0xFF6897 tu exécutes 'off' pour éteindre toutes les leds.

Question : que se passe-t-il après avoir tout éteint ? C'est important de savoir ça pour écrire le programme correctement.
Si rien ne se passe, alors c'est plus simple : tu ajoutes une boucle infinie dans la fonction 'off' est c'est tout :

void off() {
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);
  while (1);  //  <-- boucle infinie
}

Si tu veux continuer sur autre chose, il faut garder en mémoire l'état des leds : soit animation, soit off.

Dans les deux cas, il faut réorganiser ton code autour de l'animation : le code principal joue l'animation et teste régulièrement (si possible sans bloquer) l'arrivée d'un code et sa valeur : si le code vaut 0xFF6897 il exécute off, sinon il continue.

Une façon simple mais "sale" de faire ça est de remplacer les delay par des boucles de lecture de la télécommande de mêmes durées :

bool lectureTelec (int duree) {
  unsigned long chrono = millis();
  while (millis()-chrono < tempo) {
      if (irrecv.decode(&results)) {
          if (results.value == 0xFF6897) return true;
      }
  }
  return false;
}

Cette fonction renvoie un booléen qui vaut true si la touche off est reçue sinon false.
Tu l'appelles en remplaçant par exemple

delay(300);

par

toucheOff = lectureTelec (300);

en ayant déclaré toucheOff en bool auparavant.

La loop joue alors l'animation et attend la réception d'un code pour lancer la fonction off si le code reçu est le bon :

#include <IRremote.h>
int RECV_PIN = 3;

IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {

  irrecv.enableIRIn();
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
}
void loop() {
  bool toucheOff ;
 
  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);
}

void off() {
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);
  while (1);
}

A tester, je n'ai même pas vérifié que ça compile...

C'est cool merci beaucoup pour vos réponses je vais m'attarder tout à l'heure sur ce que vous m'avez conseillez :wink:

Bonjour alors depuis j'ai eux des examens et je viens d'essayer les 2 premiers conseilles d'abord pour voir si c'était possible, en effet sa éteint quand je maintiens à la fin de l'animation mais je ne peux réactiver le jeu de leds ,donc j'aimerai savoir où est ce que ca pose problème (ayant pas eu beaucoup de temps , c'est vrai mon programme peux être horrible XD)

#include <IRremote.h>
int RECV_PIN = 3;

IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {

  irrecv.enableIRIn();
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
}
void loop() {

  if (irrecv.decode(&results)) {

    if (results.value != 0xFF6897) {
      while (results.value != 0xFF6897) {
        jeuled();
        
        if (irrecv.decode(&results)) {
          if (results.value == 0xFF6897) {
            off();
            break;
            
          }
          irrecv.resume();
        }
        
      }
      
    }

    irrecv.resume();
  }
}
void jeuled() {

  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, HIGH);


  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(200);
  digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(7, HIGH);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(7, LOW);

  delay(300);
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, HIGH);
  delay(300);
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(7, HIGH);
  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(7, LOW);
  delay(300);
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(7, HIGH);
  delay(300);
  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(7, LOW);
  delay(300);
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(7, HIGH);
  delay(300);
  digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(7, HIGH);
  delay(500);
}
void off() {
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);
  while(1);
}

Bonjour Manuarii

Mais qu'est ce que cet horrible

while(1);

dans off()????????????
Une étude , un début de thèse sur les diverses possibilités de boucle infinie?

Par ailleurs jeuled() fait 19 fois la m^me chose : pourquoi pas une boucle for?

Cordialement,
bidouilleelec

C'est moi qui lui ai conseillé au cas où 'off' correspondait à la fin du programme (il n'avait pas précisé)

Bonjour lesept

lesept:
C'est moi qui lui ai conseillé au cas où 'off' correspondait à la fin du programme (il n'avait pas précisé)

Ah! J'avais vu mais cela ne correspond pas au message #13.

Cordialement,
bidouillelec

C'était dans la réponse numéro #11.
Pour la fonction jeuled, ce n'est pas toujours le même motif, mais c'est vrai qu'il est possible de faire un code plus simple, avec un tableau de masques sur 7 bits (puisqu'il y a 7 leds)

Bonjour merci , j'ai pratiquement résolus le problème et je comprend de mieux en mieux le problème de mon programme . Effectivement le while(1) n'à rien avoir ici . Cependant je dois attendre la fin du jeu de led pour espérer l'éteindre
et comme je l'ai vu avec " lesept " il faut effectivement vérifié l'état de la télécommande dans mes jeu de led pour espèrer l'éteindre quand je veux . Donc là je fais mes essai . Ah oui quand je mes :

 void loop() {

    bool lectureTelec (int duree) {
      unsigned long chrono = millis();
      while (millis() - chrono < tempo) {
        if (irrecv.decode(&results)) {
          if (results.value == 0xFF6897) return true;
          jeuled();
        }
      }
      return false;

    }
  }

Il y à un problème avec le booleen , arduino me dis que :

exit status 1
a function-definition is not allowed here before '{' token

à quoi correpond chrono et tempo ?

Ce que dit le compilateur c'est que tu déclares une fonction 'lectureTelec' dans la loop. C'est pas très propre, en tout cas il n'aime pas...

Chrono est une variable que tu initialises pour mesurer une durée. Tempo, pour temporisation, c'est la durée en question.