[RESOLU] Mon programme ne s'arrête pas !!

Bonjour,
J'ai fais ce programme (qui n'est pas fini) qui devrait s'arretter grâce à la variable stopPG quand L1 et L2 ont pour valeur 127. Je vous laisse regarder :

#include <SD.h>
#include <Deuligne.h>
#include <Wire.h>

File Dico;
Deuligne lcd;

int SDPIN = 53;
int L1 = 33;
int L2 = 33;
int L3 = 33;
int L4 = 33;
int L5 = 33;
int L6 = 33;
int L7 = 33;
int L8 = 33;
int stopPG = 0;

String word1;

void setup()
{
  lcd.init();
  
  Serial.begin(9600);
  Serial.println ("Initialisation de la carte SD...");
  lcd.backLight(true);
  lcd.print ("Initialisation");
  lcd.setCursor(0,1);
  lcd.print ("Carte SD...");
  delay(2500);
  lcd.clear();
  lcd.backLight(false);
  
  pinMode(SDPIN, OUTPUT);
   
  if (!SD.begin(SDPIN)) {
    Serial.println("SD invalide ou absente");
    lcd.backLight(true);
    lcd.print ("SD invalide ou");
    lcd.setCursor (0,1);
    lcd.print ("Absente");
    delay(2500);
    lcd.clear();
    lcd.backLight(false);
    
  }else{
    
  Serial.println("SD OK");
  lcd.backLight(true);
  lcd.print ("SD OK");
  delay(2500);
  lcd.clear();
  lcd.backLight(false);
  Dico = SD.open("test.txt", FILE_WRITE);
  
  if (Dico) {
    Serial.println("Début de la création du dictionaire");

  }else{
    
    Serial.println("Le fichier dico.txt ne c'est pas ouvert");}}}

void loop(){

if (stopPG == 0){  
  for (L1 = 33; L1 <= 127; L1++){

Serial.write(L8);
Serial.write(L7);
Serial.write(L6);
Serial.write(L5);
Serial.write(L4);
Serial.write(L3);
Serial.write(L2);
Serial.write(L1);
Serial.println();

if (L1 == 127){
  L1 = 33;
  L2++;

if (L2 ==127){
  L2 = 33;
  stopPG = 1;}}}}}

Pouvriez-vous m'aider ?

void loop() est une boucle permanente, sans condition d'arrêt.

Merci mais en fait il ne se passe rien si dans le void loop si la condition if (stopPG == 0)n'est pas vérifiée. Mais ça marche pas. Quelqu'un peut m'aider ?

EBanou:
Merci mais en fait il ne se passe rien si dans le void loop si la condition if (stopPG == 0)n'est pas vérifiée. Mais ça marche pas. Quelqu'un peut m'aider ?

bonjour,
oui pas vérifié, car à quoi ca correspond?
aucune lecture du résultat pour cette variable, donc ca tourne en boucle, sutout que l'int est à 0 au début.
ca reveint au même que de marcher sur un cercle et dire que tant que la route continue on marche encore.
tu vas en faire des tours pour rien :slight_smile:

ca me rappelle un sketch avec une ambulance qui tournait autour d'un rond point car toutes les sorties étaient en sens interdit :wink:

Bonjour,

infobarquee:
ca me rappelle un sketch avec une ambulance qui tournait autour d'un rond point car toutes les sorties étaient en sens interdit :wink:

Heureusement qu'il y avait un corbillard dans le rond point :grin:

Merci de vos réponses,
Au final cette solution sera retenue :

#include <SD.h>
#include <Deuligne.h>
#include <Wire.h>

File Dico;
Deuligne lcd;

int SDPIN = 53;
int L1 = 33;
int L2 = 33;
int L3 = 33;
int L4 = 33;
int L5 = 33;
int L6 = 33;
int L7 = 33;
int L8 = 33;
int stopPG = 0;

void setup()
{
  lcd.init();
  
  Serial.begin(9600);
  Serial.println ("Initialisation de la carte SD...");
  lcd.backLight(true);
  lcd.print ("Initialisation");
  lcd.setCursor(0,1);
  lcd.print ("Carte SD...");
  delay(2500);
  lcd.clear();
  lcd.backLight(false);
  
  pinMode(SDPIN, OUTPUT);
   
  if (!SD.begin(SDPIN)) {
    Serial.println("SD invalide ou absente");
    lcd.backLight(true);
    lcd.print ("SD invalide ou");
    lcd.setCursor (0,1);
    lcd.print ("Absente");
    delay(2500);
    lcd.clear();
    lcd.backLight(false);
    
  }else{
    
  Serial.println("SD OK");
  lcd.backLight(true);
  lcd.print ("SD OK");
  delay(2500);
  lcd.clear();
  lcd.backLight(false);
  Dico = SD.open("test.txt", FILE_WRITE);
  
  if (Dico) {
    Serial.println("Début de la création du dictionaire");

  }else{
    
    Serial.println("Le fichier dico.txt ne c'est pas ouvert");}}}

void loop(){

if (stopPG == 0){
  L1++;
  
  if (L1 == 127){
    L1 = 33;
    L2++;

    if (L2 == 127){
      L2 = 33;
      L3++;
      
      if (L3 == 127){
        L3 = 33;
        L4++;
        
        if (L4 == 127){
          L4 = 33;
          L5++;
          
          if (L5 == 127){
            L5 = 33;
            L6++;
            
            if (L6 == 127){
              L6 = 33;
              L7++;
              
              if (L8 == 127){
                stopPG = 1;
              }
            }
          }
        }
      }
    }
  }
  
  Serial.write (L3);
  Serial.write (L2);
  Serial.write (L1);
  Serial.println();
}
}

Solution incompréhensible, mais si tu sais ce que tu veux faire tant mieux.
La kyrielle de if imbriqués est une fantastique source de problèmes difficiles à solutionner.

Autrement le problème était là:

if (L1 == 127){
L1 = 33; /* <------ le problème
L2++;

cette ligne empêche de sortir du for.
C'est, à mon sens, une mauvaise manière de coder 2 boucles imbriquées.
Il est préférable soit:

  • faire deux boucles for imbriqués proprement
  • utiliser des while avec les bonnes conditions de sortie

Même si j'ait trouvé une autre solution qui marche à merveille je vous remerci de vos réponses
@+

Et quelle est la solution ? Merci d'en faire profiter la communauté.

C'est du bidouillage mais bon...
J'ai remplacé le for par une incrémentation limitée par un if

Une structure qui est souvent utile pour éviter d'empiler des IF, c'est le SwitchCase
http://arduino.cc/en/Reference/SwitchCase

Je vais regrder ça. Merci à tous, je passe ce topic en résolu
@+