Comment retourner au début de la boucle loop?

Bonjour , je dois rendre un projet qui est un coffre fort avec plusieurs niveaux d'authentification seulement problème quand un des système d'authentification est faux j'aimerai que le programme revient au début de la boucle seulement il continue la liste d'instruction comment faire?

void setup() {
 Serial.begin(9600);
}


void loop() {
  float tension;
bool veriftension = false;
int h = 0;

  Serial.println("calcul de la tension d'entrée");
  while(veriftension == false){
    delay(10000);
    tension = Serial.parseFloat();
    Serial.print("La tension est de ");
    Serial.println(tension);
    veriftension=true;
 }
if(0.86<=tension && tension<=0.88){
  Serial.println("LANCEMENT DE MA2");
  MA2();
  Serial.println("LANCEMENT DE MA5");
  MA5F();
 }else{
  if(1.51<=tension && tension<=1.53){
  Serial.println("LANCEMENT DE MA2");
  MA2();
  Serial.println("LANCEMENT DE MA3");
  MA3();
  Serial.println("LANCEMENT DE MA4");
  MA4F();
  }else{
    if(1.90<=tension && tension<=1.92){
  Serial.println("LANCEMENT DE MA1");
  MA1();
  Serial.println("LANCEMENT DE MA3");
  MA3F();
   }else{
     if(2.34<=tension && tension<=2.36){
  Serial.println("LANCEMENT DE MA1");
  MA1();
  Serial.println("LANCEMENT DE MA4");
  MA4F();
    }else{
       if(2.54<=tension && tension<=2.56){
  Serial.println("LANCEMENT DE MA1");
  MA1();
  Serial.println("LANCEMENT DE MA2");
  MA2();
  Serial.println("LANCEMENT DE MA3");
  MA3();
  Serial.println("LANCEMENT DE MA5");
  MA5F();
     }else{
      if(2.72<=tension && tension<=2.74){
  Serial.println("LANCEMENT DE MA1");
  MA1();
  Serial.println("LANCEMENT DE MA4");
  MA4F();
      }else{
        if(3.08<=tension && tension<=3.1){
  Serial.println("LANCEMENT DE MA2");
  MA2();
  Serial.println("LANCEMENT DE MA5");
  MA5F();
       }else{
         if(3.39<=tension && tension<=3.41){
  Serial.println("LANCEMENT DE MA1");
  MA1();
  Serial.println("LANCEMENT DE MA2");
  MA2();
  Serial.println("LANCEMENT DE MA3");
  MA3();
  Serial.println("LANCEMENT DE MA5");
  MA5F();
        }else{
  Serial.println("Erreur");
        }
       }
      }
     }
    }
   }
  }
 }
 delay(10000);
}

/*------------------------------------------------------------------------------------------INITIALISATION DES DIFFERENT MECANISME D'AUTHENTIFICATION----------------------------------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------------------------MA1----------------------------------------------------------------------------------------------------------------------------------------------------*/
void MA1(){
  char reponseA;
  char reponseB;
  char reponseC;
  char reponseD;

  Serial.println("Répondre que par la lettre de la réponse ?");
  Serial.println("Qui est le directeur du MI7 ?");
  Serial.println("A. Thierry");
  Serial.println("B. Sylvain");
  Serial.println("C. Patricia");
  Serial.println("D. Karim");
delay(10000);
 reponseA = Serial.read();
  if(reponseA=='B'){
  Serial.println("Bonne réponse");
  Serial.println("Quelle est l'utilité de l'étage 3 du bâtiment du MI7 ?");
  Serial.println("A. Recherche et Développement");
  Serial.println("B. Cuisine");
  Serial.println("C. Stand de tir");
  Serial.println("D. Coffre fort");
delay(10000);
 reponseB = Serial.read();
    if(reponseB=='A'){
  Serial.println("Bonne réponse");
  Serial.println("Quelle estle pourcentge de réussite au test d'entrée de l'agence MI7 ?");
  Serial.println("A. 17%");
  Serial.println("B. 24%");
  Serial.println("C. 32%");
  Serial.println("D. 8%");
delay(10000);
 reponseC = Serial.read();
     if(reponseC=='A'){
  Serial.println("Bonne réponse");
  Serial.println("Combien de centre MI7 y a t-il dans le monde ?");
  Serial.println("A. 1");
  Serial.println("B. 2");
  Serial.println("C. 3");
  Serial.println("D. 4");
delay(10000);
 reponseD = Serial.read();
   if(reponseD=='D'){
    Serial.println("Authentification réussie");  
        }
     else{Serial.println("Erreur");
     return ;
     }
      }
        else{Serial.println("Erreur");
        return ;
     }
    }
      else{Serial.println("Erreur");
      return ;
     }
  }
    else{Serial.println("Erreur");
    return ;

     }
}

/*---------------------------------------------------------------------------------------------------------------------MA2----------------------------------------------------------------------------------------------------------------------------------------------------*/
void MA2(){
  int publicKey, randomNumber, code, codeInput;
  randomNumber = random(1,2881);
  Serial.println("Identifiez-vous");
   while(Serial.available() <= 0) {
  } 
  char x=Serial.read();
  publicKey = cleAgent(x);
  code = chiffrer(randomNumber, publicKey);
  Serial.print("Code : ");
  Serial.println(code);
  while(Serial.available() <= 0) {
  }
  codeInput = Serial.parseInt();
  if(randomNumber == codeInput){
    Serial.println("Authentification réussi");
    return true;
  } else {
   Serial.println("Erreur");
    return false;
  }
}

int cleAgent(char x){
  int i;
  int clePublic[16] = {601, 619, 631, 641, 647, 653, 661, 673, 691, 701, 733, 739, 751, 797, 809, 811};
  char lettre[16] = {'A', 'B', 'C', 'D', 'E', 'F', 'H','I','J','K','L','N','M','O','P','Q'};
  
   if (x == lettre[0]) {
        i = 0;
    } else {
        if (x == lettre[1]) {
            i = 1;
        } else {
            if (x == lettre[2]) {
                i = 2;
            } else {
                if (x == lettre[3]) {
                    i = 3;
                } else {
                    if (x == lettre[4]) {
                        i = 4;
                    } else {
                        if (x == lettre[5]) {
                            i = 5;
                        }
                    }
                }
            }
        }
    }
    if (x == lettre[6]) {
        i = 6;
    } else {
        if (x == lettre[7]) {
            i = 7;
        } else {
            if (x == lettre[8]) {
                i = 8;
            } else {
                if (x == lettre[9]) {
                    i = 9;
                } else {
                    if (x == lettre[10]) {
                        i = 10;
                    }
                }
            }
        }
    }
    if (x == lettre[11]) {
        i = 11;
    } else {
        if (x == lettre[12]) {
            i = 12;
        } else {
            if (x == lettre[13]) {
                i = 13;
            } else {
                if (x == lettre[14]) {
                    i = 14;
                } else {
                    if (x == lettre[15]) {
                        i = 15;
                    }
                }
            }
        }
    }
    int u;
    
    u = clePublic[i];
    
    return u;
}
 
int chiffrer(int randomNumber, int publicKey){
  int n = 43*67;
  return Modexp(randomNumber, publicKey, n);
}

int Modexp(int randomNumber,int publicKey,int n){
  int r;
  if(publicKey < 0){
    Serial.println("error case");
    return -1;
  }

  if(randomNumber == 0 || n == 1){
    r = 0;
  } else {
    r =1;
    while(publicKey >0 ){
      long modulo1 = randomNumber % n;
      long modulo2 = r * modulo1;
      r = modulo2 % n;
      publicKey = publicKey-1;
    }
  }
  return r;
}
/*---------------------------------------------------------------------------------------------------------------------MA3----------------------------------------------------------------------------------------------------------------------------------------------------*/

void MA3(){
  String scan;
  String scansaisie;

  scan = "oeil";
  Serial.println("Veuillez approcher votre oeil droit à 10cm du capteur");
  delay(10000);
  scansaisie = Serial.readString();

  if(scan==scansaisie){
   Serial.println("Scan valide");
   Serial.println("Authentification réussie");

  }
  else{
    Serial.println("Scan refusé");
    Serial.println("Authentification refusé");
    return;
  }
}
/*--------------------------------------------------------------------------------------------------------------------MA3F----------------------------------------------------------------------------------------------------------------------------------------------------*/
void MA3F(){
  String scan;
  String scansaisie;

  scan = "oeil";
  Serial.println("Veuillez approcher votre oeil droit à 10cm du capteur");
  delay(10000);
  scansaisie = Serial.readString();

  if(scan==scansaisie){
   Serial.println("Scan valide");
   Serial.println("Authentification réussie");
   Serial.println("Ouverture du coffre");
   while(1);

  }
  else{
    Serial.println("Scan refusé");
    Serial.println("Authentification refusé");
    return;
  }
}
/*---------------------------------------------------------------------------------------------------------------------MA4----------------------------------------------------------------------------------------------------------------------------------------------------*/

void MA4(){
int code1;
int code2;
int code3;
int code4;
int chiffre1;
int chiffre2;
int chiffre3;
int chiffre4;

code1=random(0,9);
code2=random(0,9);
code3=random(0,9);
code4=random(0,9);

Serial.print("code: ");
Serial.print(code1);
Serial.print(code2);
Serial.print(code3);
Serial.println(code4);
Serial.println("Saisir le premier chiffre");
  delay(10000);
chiffre1 = Serial.parseInt();
 if(code1==chiffre1){
  Serial.println("Saisir le deuxieme chiffre");
  delay(10000);
  chiffre2 = Serial.parseInt();
   if(code2==chiffre2){
      Serial.println("Saisir le troisième chiffre");
      delay(10000);
      chiffre3 = Serial.parseInt();
    if(code3==chiffre3){
       Serial.println("Saisir le quatrième chiffre");
       delay(10000);
       chiffre4 = Serial.parseInt();
     if(code4==chiffre4){
        Serial.println("Authentification réussi");
    }
    else{
     Serial.println("Erreur"); 
     return;
    }
    
   }
       else{
     Serial.println("Erreur"); 
     return;
    }
  }
      else{
     Serial.println("Erreur");
     return; 
    }
 }
    else{
     Serial.println("Erreur"); 
     return;
    }

}
/*---------------------------------------------------------------------------------------------------------------------MA4F---------------------------------------------------------------------------------------------------------------------------------------------------*/
void MA4F(){
int code1;
int code2;
int code3;
int code4;
int chiffre1;
int chiffre2;
int chiffre3;
int chiffre4;

code1=random(0,9);
code2=random(0,9);
code3=random(0,9);
code4=random(0,9);

Serial.print("code: ");
Serial.print(code1);
Serial.print(code2);
Serial.print(code3);
Serial.println(code4);
Serial.println("Saisir le premier chiffre");
  delay(10000);
chiffre1 = Serial.parseInt();
 if(code1==chiffre1){
  Serial.println("Saisir le deuxieme chiffre");
  delay(10000);
  chiffre2 = Serial.parseInt();
   if(code2==chiffre2){
      Serial.println("Saisir le troisième chiffre");
      delay(10000);
      chiffre3 = Serial.parseInt();
    if(code3==chiffre3){
       Serial.println("Saisir le quatrième chiffre");
       delay(10000);
       chiffre4 = Serial.parseInt();
     if(code4==chiffre4){
        Serial.println("Authentification réussi");
        Serial.println("Ouverture du coffre");
        while(1);
    }
    else{
     Serial.println("Erreur"); 
     return;
    }
    
   }
       else{
     Serial.println("Erreur"); 
     return;
    }
  }
      else{
     Serial.println("Erreur");
     return; 
    }
 }
    else{
     Serial.println("Erreur"); 
     return;
    }

}
/*---------------------------------------------------------------------------------------------------------------------MA5F----------------------------------------------------------------------------------------------------------------------------------------------------*/

void MA5F(){
// déclaration des variables qu'il y aura dans cette fonction
char agent[] = {"ABCDEFHIJKLMNOPQ"};
int  cardID[] = {1111,2222,3333,4444,5555,6666,7777,8888,9999,1010,2020,3030,4040,5050,6060,7070};
bool verifagent = false;
bool verifcardID = false;
bool agentExiste = false;
bool numerocardentree = false ;
char nomagent;
int numerocardID;
int i = 0;
int k = 0;

i=0;
k=0;
verifagent = false;
verifcardID = false;
numerocardentree = false;

Serial.println("entrez votre code agent s'il vous plait. ");
while(verifagent == false){
  delay(10000);
  nomagent = Serial.read();
  Serial.print("Le nomagent que vous avez rentré est ");
  Serial.println(nomagent);
  verifagent = true;
}

while(i<16){
  if(nomagent == agent[i]){
    agentExiste = true;
    break;
  }
  i+=1;
}
if(agentExiste != true){
  Serial.println("agent n'éxiste pas ");
  return;
}

Serial.println("rentrez votre numéro de cardID ");
while(verifcardID == false){
  delay(10000);
  numerocardID = Serial.parseInt();
    Serial.print("Le numerodecardID que vous avez rentré est ");
  Serial.println(numerocardID);
  verifcardID = true;
}

while(k<16){
  if(numerocardID == cardID[k]){
    numerocardentree = true;
    break;
  }
  k+=1;
}
if(numerocardentree != true){
  Serial.println("code invalide ");
  return;
}

if(i==k){
  Serial.println("agent valide");
  Serial.println("authentification réussi");
  Serial.println("Ouverture du coffre"); 
  while(1);
}
else{
  Serial.println("agent non valide");
   Serial.println("authentification refusé");
}
return;

  }

si vous voulez arrêter la loop() et revenir à son début, faites juste return; à l'endroit où vous voulez vous arrêter

Justement dans le programme que j’ai mis au dessus on peut voir quand chaque fois qu’il y a une erreur j’ai mis un return mais ça continue quand même le programme

vous ne faites pas les return dans la loop() mais dans vos fonctions comme MA1() donc ça interrompt MA1() mais pas la loop.

changez

void MA1(){

en

bool MA1() { // retourne faux si erreur, vrai sinon

et partout où vous aviez return; pour une erreur mettez return false; et si tout se passe bien à la fin de la fonction mettez return true;

enfin dans la loop quand vous appelez la fonction au lieu de juste faire
MA1();
faites
if (! MA1()) return; // si l'appel de fonction signale une erreur on interrompt la loop

bien sûr il faut le faire partout


je croyais que vous aviez compris que attendre un temps aléatoire puis lire la réponse n'était pas une bonne idée..

une autre façon de gérer cela serait de faire une machine à états (cf mon tuto éventuellement)

enum {DEBUT, ETAPE1, ETAPE2, ETAPE3, ETAPE4, FIN} etat = DEBUT;

// ces fonctions changent la valeur de la varible etat en fonction d'une logique propre
// par exemple en cas de succès elles peuvent passer etat à la valeur suivante pour continuer
// sinon remettre etat à DEBUT en cas d'erreur

void debut() {
  /* à écrire */
}

void etape1() {
  /* à écrire */
}

void etape2() {
  /* à écrire */
}

void etape3() {
  /* à écrire */
}

void etape4() {
  /* à écrire */
}

void fin() {
  /* à écrire */
}

// le code principal

void setup() {
  Serial.begin(115200); // pas la peine d'aller lentement
}

void loop() {
  switch (etat) {
    case DEBUT:   debut();  break;
    case ETAPE1:  etape1(); break;
    case ETAPE2:  etape2(); break;
    case ETAPE3:  etape3(); break;
    case ETAPE4:  etape4(); break;
    case FIN:     fin();    break;
  }
}

ça évite d'emboiter des if / else à n'en plus finir

Merci pour votre réponse ça marche bien

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.