bonjour,
j'ai un petit problème pour quitter la condition while,
ce que je voudrais faire :
faire une condition
une fois que la condition faites, faire une deuxième condition (celle du while)
quand celle du while est faites, quitter cette boucle et recommencer la première
voici le bout code avec la première condition et celle du while
merci d'avance
void loop() {
if ( ! mfrc522.PICC_IsNewCardPresent()){ //appel de la fonction de la bibliothèque MFRC522
return; //si pas de badge ne rien faire
}
if ( ! mfrc522.PICC_ReadCardSerial()){ //appel de la fonction de la bibliothèque MFRC522
return; //si problème de lecture ne rien faire
}
String tag= ""; //stocker l'UID dans la variable tag
for (byte i = 0; i < mfrc522.uid.size; i++) { // boucle pour lire chaque octet et la retranscrire dans un format hexa
tag.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
tag.concat(String(mfrc522.uid.uidByte[i], HEX));
}
tag.toUpperCase(); //permet de mettre en majuscule voir test avec et sans cette ligne de code
Serial.println(tag); //pour vérifier : affichage du contenu de tag
delay(1000); //délais de 1 s pour éviter les rebond
while (tag !=0) {
etatCapteurDepart = digitalRead(capteurDepart); //lecture du capteur depart et affecte sa valeur a etat capteur depart
etatCapteurArrive = digitalRead(capteurArrive); //lecture du capteur arrive et affecte sa valeur a etat capteur arrive
if (etatCapteurDepart == LOW && etatChrono == false) //Si capteur de depart coupé et chrono arrêté --> demarrer le chrono
{
tempsON = millis(); //la variable tempsON prend la valeur millis
//Serial.println("Chrono ON"); //affiche : chrono on
etatChrono = true; //etat du chrono prend la valeur vrai --> chrono lancé
delay(100); //délais de 100 ms pour contrer les rebonts
}
if (etatCapteurArrive == LOW && etatChrono == true) //Si etat du capteur d'arrive est coupé et chrono en marche --> arreter le chrono
{
tempsOFF = (millis() - tempsON); //la variable tempsOFF est égal à la valeur de millis - celle de tempsON --> millis n'est pas rellement un chrono, il est excuté au lancement, il faut un temps 1 - temps 0 pour avoir le temps
minutes = ((tempsOFF / 1000) / 60); // pour avoir le temps en minute : (1 min = 60 000 ms) donc exemple : tempsOFF = 60 000 ms / 1000 = 60 / 60 = 1 min
//Serial.println(minutes);
secondes = ((tempsOFF / 1000) % 60); // pour avoir le temps en secondes faut utiliser le modulo, exemple tempsOFF = 50 000 / 1000 = 50 %60 = 50 s
//Serial.println(secondes);
millisecondes = (tempsOFF % 1000); // pour avoir le temps en millisecondes, même principe faut utiliser le modulo, exemple tempsOFF = 1235 % 1000 = 235 --> 1235 ms contient 235 ms
//Serial.println(millisecondes);
tempsAEnvoyer [0] = minutes; //les minutes sont attribuées à tempsAEnvoyer à la ligne 1
tempsAEnvoyer [1] = secondes; //les secondes sont attribuées à tempsAEnvoyer à la ligne 2
tempsAEnvoyer [2] = millisecondes; //et les millisecondes sont attribuées à tempsAEnvoyer à la ligne 3
for (int tableau=0; tableau <=2; tableau +=1) { //pour afficher le contenu du tableau
Serial.print(tempsAEnvoyer[tableau]); // le temps contenu dans tempsAEnvoyer sera affiché
Serial.print (":"); //caractère " : " pour séparer les minutes : secondes : milisecondes
}
etatChrono = false; //etat du chrono prend la valeur false --> chrono arrêté
delay(1000);
}
}
}