Bonjour,
Je souhaite créer un menu ergonomique avec le port série. Pour cela j’aimerai créer des parties et des sous parties auxquels on peut accéder grâce à un caractère entré dans le port série (ici "0", "1", "2" , "3"). Dans l’idéal, j’aimerai que lorsqu’on se trouve dans une partie (par exemple « Options » ici), on ne puisse pas entrer dans une partie d’un étage différent du nôtre (une fois dans « Options », on ne peut pas accéder à « Commande » sans ressortir de « Options »)
Voici un exemple de code :
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available()) {
char data = Serial.read();
switch (data) {
case 48: //Commande
Serial.println("Options");
switch (data) {
case 49://Paramètre
Serial.println("Paramètre");
break;
case 50://Calibrage
Serial.println("Calibrage");
break;
}
break;
case 51://Commande
Serial.println("Commande");
break;
}
}
}
il faut que tu relises ce qui vient de la console, sinon ton second switch(data) conserve la valeur précédente, qui vaut 48 ici. Donc, tu ne trouveras pas 49 ni 50.
J'ai rajouté :"data = Serial.read();" juste après "Serial.println("Options");", malheureusement je n'ai toujours pas le résultat escompté, le programme ne rentre pas dans la partie " Paramètre" ou "Calibrage". Je tiens a préciser qu'une fois le programme téléversé, je note "0" dans le port série ( le programme m'affiche bien Options) et à ce moment là, j'écris "1" ( et là le programme ne m'affiche pas Paramètre).
Je travailles sur l'asservissement d'un drone. Ayant programmé plusieurs fonctionnalités, j'aimerai les rendre plus facilement accessible avec un menu ergonomique.
Il est fort probable que tu verras ******, c'est à dire que data n'est pas lu. Pourquoi? Parce que tu n'as pas le temps de l'entrer. Il te faut faire attendre le programme que tu écrives quelque chose dans la console. Genre un
while (!Serial.available()) ...
Mais, ton code va devenir une usine à gaz si tu dois encore faire des sous-menus.
Tu dois l'organiser autrement : si un caractère se présente, tu le lis et tu agis en conséquence. Si tu es dans le menu principal, tu vas dans le menu secondaire et tu traites les caractères 48 & 49. En gros, tu lis le caractère et tu fais une grosse liste de if qui font ce qu'il faut en fonction du contexte. Le contexte c'est une ou plusieurs variables qui te disent à quel endroit tu es de ton menu
Si vous voulez je dois avoir un vieux bout de code qui fait un truc du genre - faudrait que je fouille
en attendant Si vous voulez comprendre comment bien écouter le port série (ou gérer un flux asynchrone) vous pouvez jeter un oeil à mon petit tuto sur le sujet
Effectivement lesept, vous avez raison, le data n'est pas lu. Toutefois je penses qu'une grosse liste de "if" rendra le programme encore plus chaotique et moins bien structuré. La solution de mettre une boucle while infinie me parait ainsi être la plus accessible et répondant à mes critères, bien qu'elle ne soit sans doute pas optimale.
J'ai regardé votre topic J-M-L, il est très bien fait, beau travail.