Cela fait 2,3 jours que j'ai commencé arduino (carte Uno) et j'aurai besoin un peu d'aide, J'aimerai pouvoir commander mon programme arduino de manière a ce que
sur mon moniteur il y ai marqué quelque chose du type "taper 'facile' pour commencer le niveau 1 ou 'difficile' pour commencer le niveau 2" et qu'en fonction de ce que je tape, cela m'envoie vers tel ou tel partie de mon programme
en m'inspirant de codes existants, j'étais partie sur un truc du genre:
String lu = "";
void setup() {
Serial.begin(9600);
}
void level1(){
Serial.print("bonjour");}
void level2(){
Serial.print("Aurevoir");}
void loop() {
while (lu != "facile" || lu != "difficile") {
lu= "";
}
while (Serial.available()>0){
char ch= Serial.read();
delay(30);
lu += ch;
Serial.print(lu);
}
if (lu == "facile"){
level1();
}
if (lu =="difficile"){
level2();
}
}
Mais rien de très convaincant, est ce que l'un de vous pourrais m'aider svp
Merci d'avance, bonne fin de week end
note: j'ai encore du mal avec l'utilisation de chaque type de variable ainsi que la syntaxe etc
avant que l'on me tombe dessus, je sais qu'il doit exister des topics posant peut etre exactement la meme question que moi mais je ne suis pas tombé dessus ou je n'ai pas réussi à comprendre les explications données...merci aux plus indulgents
je demande un peu d'aide, J'aimerai pouvoir commander mon programme arduino de manière a ce que
sur mon moniteur il y ai marqué quelque chose du type "taper 'facile' pour commencer le niveau 1 ou 'difficile' pour commencer le niveau 2" et qu'en fonction de ce que je tape, en m'envoie vers tel ou tel partie de mon programme
en m'inspirant de codes existants, j'étais partie sur un truc du genre:
String lu = "";
void loop() {
while (lu != "facile" || lu != "difficile") {
lu = "";
while (Serial.available() > 0) { //tant qu'on a pas parcouru le mot tapé dans le moniteur??
char ch = Serial.read();
lu += ch;
delay (10); }
}
}
Mais rien de très convaincant, est ce que l'un de vous pourrais m'aider svp
Merci d'avance, bonne fin de week end
note: Je n'ai que 2,3 jours d'arduino j'ai encore du mal avec l'utilisation de chaque type de variable ainsi que la syntaxe etc avant que l'on me tombe dessus, je sais qu'il doit exister des topics posant peut etre exactement la meme question que moi mais je ne suis pas tombé dessus ou je n'ai pas réussi à comprendre les explications données...merci aux plus indulgents
bonjour
Comme je suppose que tu n’a même pas pris le temps de le faire !
Il est surement tres urgent pour toi de lire cela
tu présentes 2 codes différents, lequel tu aimerais qu'on regarde ?
Oui désolé, j'avais modifié mon premier car il n'était même pas compilé
Celui que j'ai actuellement c'est celui lié au post suivant:
melmelmel:
Bonjour à tous,
Cela fait 2,3 jours que j'ai commencé arduino (carte Uno) et j'aurai besoin un peu d'aide, J'aimerai pouvoir commander mon programme arduino de manière a ce que
sur mon moniteur il y ai marqué quelque chose du type "taper 'facile' pour commencer le niveau 1 ou 'difficile' pour commencer le niveau 2" et qu'en fonction de ce que je tape, cela m'envoie vers tel ou tel partie de mon programme
en m'inspirant de codes existants, j'étais partie sur un truc du genre:
Tu ne passes jamais ta première boucle car le test est et restera toujours vrai.
while (lu != "facile" || lu != "difficile") {
lu= "";
}
[/quode]
Je pense que tu voulais écrire :
[code]
if (lu != "facile" || lu != "difficile") {
lu= "";
}
[/quode]
supercc:
Tu ne passes jamais ta première boucle car le test est et restera toujours vrai.
En effet, Supercc, tu as raison le while n'est pas adapté ici merci à toi
Merci Lesept pour l'arrangement du code
lesept:
+1 avec supercc. Je pense qu'on peut simplifier comme suit :
void loop() {
while (Serial.available()>0){
char ch= Serial.read();
delay(30);
lu += ch;
Serial.print(lu);
}
if (lu == "facile"){
level1();
lu = "";
}
if (lu =="difficile"){
level2();
lu = "";
}
}
Je viens de le tester, mais je ne sais pas pourquoi je n'arrive toujours pas à appeler mon niveau 1 et 2.
Lorsque je tape un mot, par exemple "ok" cela me double les lettres et me renvoie "ook" ou bien plusieurs lignes de "oookkk"
De meme lorsque je tape "difficile" ou "facile" j'ai ce meme probleme de doublage delettre et non l'appel des fonctions void level1() et void level2()
A quoi est ce du, et comment y remédier?
En parallèle de la bonne manière de gérer la lecture sur le port série proposée par J-M-L, je vais continuer à corriger ton programme, ou du moins mettre le doigt là où il "coince" (aie !).
si tu rentres un mauvais mot, lu ne sera pas vidé ("") et tu ne feras qu'ajouter des caractères à lu. Pour corriger cela initialise lu à "" avant d'entrée dans la boucle de lecture
en fait, en fonction de comment tu as configuré la fin de ligne dans le moniteur série sous arduino 0, 1 ou plusieurs caractères sont ajoutés comme marque de fin de ligne (et donc dans le mot lu). Dans ton cas il suffit de configurer "Pas de fin de ligne" puisque tu ne les gères pas du coté arduino.
Ton programme va fonctionner mais il ne sera pas optimal.
melmelmel:
Lorsque je tape un mot, par exemple "ok" cela me double les lettres et me renvoie "ook" ou bien plusieurs lignes de "oookkk"
C’est tout à fait normal puisque vous affichez la variable lu à chaque fois que vous y ajoutez un caractère et vous avez rentré j’imagine votre mot d’un coup
Par exemple si vous tapez OK et que vous validez
La boucle voit un caractère au moins et lit le O et afffiche O
La boucle voit encore un caractère et lit le K et affiche OK
Mais comme vous n’avez Pas de passage à la ligne et que ça va super vite vous voyez dans la console OOK —> sans les couleurs bien sûr ça correspond au [b]OOK[/b] que vous voyez
J-M-L:
vous devriez séparer l'entrée de la commande de son traitement
Qu'entendez vous par là?
supercc:
si tu rentres un mauvais mot, lu ne sera pas vidé ("") et tu ne feras qu'ajouter des caractères à lu. Pour corriger cela initialise lu à "" avant d'entrée dans la boucle de lecture
Merci pour l'indication, il est vrai je n'avais pas réalisé qu'avec Serial.read() j'empilais les lettres une a une tout en affichant le tout a chaque tour de boucle.
J-M-L:
La boucle voit un caractère au moins et lit le O et afffiche O
La boucle voit encore un caractère et lit le K et affiche OK
Mais comme vous n’avez Pas de passage à la ligne et que ça va super vite vous voyez dans la console OOK —> sans les couleurs bien sûr ça correspond au [b]OOK[/b] que vous voyez
Ce que justement vous, J-M-L, m'avez parfaitement illustré