Bonjour à tous!
Voila, je fait appelle à vous car je rencontre un soucis pour gérer une sortie de tempo!
mon programme est basique mais je tourne en rond!
je veux modifier l'état d'une led en 3 états :
- État 1 : Allumée;
- État 2 : Éteinte;
- État 3 : clignote.
Ce choix d'état se fait pour l'instant via les commande du moniteur Série.
Je n'ai aucun soucis pour changer d'état sauf pour le 3ème (clignotement!).
J'ai essayé avec des Switch case, des If, et des While.
Actuellement je suis avec des whiles :
int b=13;
const unsigned long BLINK_INTERVAL1 = 500;
const unsigned long BLINK_INTERVAL2 = 1000;
void setup() {
pinMode(13,OUTPUT); // MOC3041 negatif
digitalWrite(b,LOW);
Serial.begin(9600); //débute la communication avec le moniteur série
Serial.println("*********\nListe des ordres\n*********");
}
void loop() {
if (Serial.available()) { //teste s'il y a une saisie en attente
String chaine = ""; // création d'un String vide
//lecture de la saisie
while (Serial.available()) { //tant que caractères en attente.
delay(10); //petit délai de lecture
char c = Serial.read(); //on lit le message
Serial.println (c);
if (c != 10 && c != 13) { //nettoyage de la chaine
chaine += c; //on ajoute le caractère
}
}
//test de la saisie
while (chaine == "1") {
Serial.println("Marche");
digitalWrite(b,HIGH);
return;
}
while (chaine == "2") {
Serial.println("Arrêt");
digitalWrite(b,LOW);
return;
}
while (chaine == "3") {
Serial.println("Clignote");
digitalWrite(b,LOW);
delay(200);
digitalWrite(b,HIGH);
delay(200);
return;
}
}
}
Ici, je peut basculer indéfiniment d'un état à l'autre, mais ma diofde ne clignote q'une seule fois!
Si je modifie comme ceci (suppression de return) :
while (chaine == "3") {
Serial.println("Clignote");
digitalWrite(b,LOW);
delay(200);
digitalWrite(b,HIGH);
delay(200);
//return;
}
Alors, ma diode clignote mais je ne peut plus changer d'état!
J'ai essayer avec break, pas mieux.
J'ai tenter de supprimer les delay() par des fonctions "Blink without delay" comme décrit ici :
http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ExempleBlinkWithoutDelay
ou là :
https://www.carnetdumaker.net/snippets/10/
Mais sans succès!
Un peu d'aide et/ou d'explication sont les bienvenues!