Bonjour à tous,
c'est mon premier post sur le forum, j'aimerais que vous m'aidiez a faire marcher le code pour controler une led à partir du terminal serie
int octetReception=0;
char caractereReception=0;
String chaineReception=" ";
const int LED=2;
void setup(){
Serial.begin(9600);
pinMode(LED, OUTPUT);
}
void loop(){
while (Serial.available()>0) {
octetReception=Serial.read();
if (octetReception==10){
Serial.print("saut de ligne : ");
Serial.println ("chaine recue = "+chaineReception);
if (chaineReception=="LED=ON"){
digitalWrite(LED, HIGH);
Serial.println("Allume led !");
}
if (chaineReception=="LED=OFF"){
digitalWrite(LED, LOW);
Serial.println("Eteint led ");
chaineReception=" ";
delay(1000);
break;
}
else{
caractereReception=char(octetReception);
chaineReception=chaineReception+caractereReception;
delay(1);
}
}
}
}
Mon but est de controler la led à partir du terminal serie.
j'ai testé le programme, il bloque a ce niveau la je pense
Merci pour vos codes.
Cependant je n'arrive pas a le faire fonctionner lorsque j'inscris ON ou OFF dans le terminal série cela n'a aucune action sur la led. Dans le terminal serie il indique commande: ON mai rien ne se passe au niveau de l'état de la led.
Je ne doute pas que votre code fonctionne mais je dois faire quelque chose qu'il ne faut pas pour pas que ça marche.
Salut,
voici un code qui marche chez moi (arduino uno), essaye :
int octetReception=0;
char caractereReception=0;
String chaineReception=" ";
//const int LED=2;
void setup(){
Serial.begin(9600);
//pinMode(LED, OUTPUT);
}
void loop(){
while (Serial.available()>0) {
octetReception=Serial.read();
if (octetReception==10) {
Serial.print('\n');
Serial.print("message : ");
Serial.println(chaineReception);
if (chaineReception=="LED=ON"){
//digitalWrite(LED, HIGH);
Serial.println("La led s'allume !");}
if (chaineReception=="LED=OFF"){
//digitalWrite(LED, LOW);
Serial.println("La led s'eteint !");}
chaineReception="";
break;}
else {
caractereReception=char(octetReception);
chaineReception=chaineReception+String(caractereReception);}
}
}
Par contre lorsque tu lui envoie "LED=ON" ou "LED=OFF", le tout premier message au lancement du programme ne marche pas...bizarre . Mais après tout fonctionne.
Dans ton code de départ t'as des "{" et "}" qui sont mal placés je crois.
salut merci pour ton code mais je n'arrive pas à le faire fonctionner
Lorsque je demande LED=ON plusieurs fois dans le terminal serie il inscrit bien mesage = led+on mais il ne l'allume pas???
Si tu as recopié la code sans essayer de le comprendre c'est pas trop étonnant qu'il ne fonctionne pas. Toutes les lignes concernant la LED sont en commentaire.
Et il attend la commande en majuscule.
Tu comprendrais peut être ce qui ne va pas.
Tu verrais que tu ne reçois jamais le caractère nouvelle ligne (10) qui est attendu pour marquer la fin de ligne par ce que le terminal et configuré par défaut pour envoyer le retour chariot (13).
Ce qui amène à la correction suivante
if ((octetReception==10)||(octetReception==13)) {
Maintenant on interprète le message qu'il se termine par 10 ou par 13.
Ensuite pour le premier message qui n'est pas reconnu c'est par ce qu'il à un espace en trop au début. Conséquence de la création de la variable chaineReception avec un espace dedans.
Le programme corrigé
int octetReception=0;
char caractereReception=0;
String chaineReception="";
const int LED=13;
void setup(){
Serial.begin(9600);
pinMode(LED, OUTPUT);
}
void loop(){
while (Serial.available()>0) {
octetReception=Serial.read();
if ((octetReception==10)||(octetReception==13)) {
Serial.print('\n');
Serial.print("message : ");
Serial.println(chaineReception);
if (chaineReception=="LED=ON"){
digitalWrite(LED, HIGH);
Serial.println("La led s'allume !");
}
if (chaineReception=="LED=OFF"){
digitalWrite(LED, LOW);
Serial.println("La led s'eteint !");
}
chaineReception="";
break;
}
else {
caractereReception=char(octetReception);
//Serial.println(caractereReception,HEX);
chaineReception=chaineReception+String(caractereReception);
//Serial.println(chaineReception);
}
}
}