Pages: 1 [2]   Go Down
Author Topic: Afficher un menu sur LCD sans intérrompre le reste du code ?  (Read 1679 times)
0 Members and 1 Guest are viewing this topic.
Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Utilise une machine d'état, comme expliqué par Barbudor dans la section tuto.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Les deux topics de Barbudor dans la section tuto ne font pas références à ça... A moins qu'il les ai posté dans la section anglais.
Je vais faire une recherche au sujet de "machine d'état".

Merci.
Logged

Orleans
Offline Offline
Jr. Member
**
Karma: 1
Posts: 88
Macbidouilleur
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

MDR ca va faire beaucoup de claques en effet !

Donc avec un GOTO, je ne peux pas remonter au dessus de void loop(); ? Ou c'est simplement mal vu par les devs ?
quand la fonction loop() est terminée, elle reprends automatiquement au début.
Au pire tu peut coller un break ou un return (a tester) pour forcer la fin d'une boucle, mais normalement tu n'en a pas besoin.

Dans tous les cas, ça revient au même si je met mon menu au tout début de void loop; donc question con ^^ Mais jvoudrais quand même savoir smiley

Si dans mon code j'ai uniquement void setup(); et void loop(); comme fonction qui portent un nom,

Rien ne t’empêche de créer d'autres fonctions pour faire différents trucs. En fait les fonctions c'est un des principes du C. Tout est fonction.
 
il me suffit d'écrire "GOTO setup" dans le code pour arriver à void setup(); ou il me manque quelque chose ?
 
PAS DE GOTO ! (je me repete on dirais ^^)

qd ta fonction setup() est terminée, l'arduino va tout seul dans la fonction loop(). Tu n'a pas a te prendre la tete avec ca.

ta fonction setup() ne doit être exécutée qu'une seule fois !

Si le GOTO c'est tant le mal que ça, comment je peux créer un menu "momentané" avec plusieurs pages sans GOTO ?

en combinant machine a état et fonction personnalisées.

J'ai bien peur que ça dépasse mes compétences pour le moment...

Je te conseille d'aller faire un tour sur "le site du zero" et d'apprendre les bases du C.
Certes sr un ordinateur c'est un peu différent de sur l'arduino, mais les principes sont les mêmes.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai du mal à trouver des infos précises pour débutant concernant cette fameuse machine à état smiley

Il s'agit en fait d'un switch case amélioré ?
Logged

Bretagne
Offline Offline
Full Member
***
Karma: 2
Posts: 196
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,

les goto c'est bon pour les marchands d'aspirine, (sauf si ton code est très court)


Code:
void setup()
    {......
     menu();
     ......
    }
void loop()
    {......
     if (bouton....)
         {menu();
         }
      .......
     }
void menu()
    {......
     ......
     }

Résultat du sondage: pas beaucoup de partisans du GOTO, doit y avoir une raison,
Quant à moi,  j'ai plus de raison de faire plaisir à mes profs....pourtant jamais de GOTO 
Logged

...ils embarquèrent la logique, coupèrent les cordons, alors, libérés de leurs chaînes, une immensité s'ouvrait devant eux...

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai du mal à trouver des infos précises pour débutant concernant cette fameuse machine à état smiley

Il s'agit en fait d'un switch case amélioré ?

J'ai retrouvé le message de Barbudor :

Appelé aussi "Machine d'état"

Code:
enum { WAIT_CONNECT, WAIT_LOGIN, WAIT_PASSWORD, RUNNING } Etat;

void loop()
{
  switch( Etat )
  {
  case WAIT_CONNECT:
    //... ici le code pour se connecter au serveur telnet
    // et quand connecté :
    Etat = WAIT_LOGIN;
    break;
  case WAIT_LOGIN:
    // ... ici le code pour attendre "login:"
    // et quand reçu "login:"
    // envoyer le login puis
    Etat = WAIT_PASSWORD;
    break
... etc , je suis trop fainéant pour continuer
}

Sans oublier la gestion des cas d'erreurs tels que timeout, deconnection, etc ....

Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour les infos.

Donc si j'ai bien compris dans un premier temps je dois énumérer chaque page de mon menu :
Code:
enum { Settings_1, Settings_2, Settings_3 } Etat;

Chaque page sera en fait un "Etat"

Et ensuite je fais un switch case avec la variable "Etat", et chaque case m'affichera une nouvelle page de LCD ?
Dans le cas d'un menu multi-choix il faudra que je mette quelque chose de ce style ?

Code:
case Settings_1:
lcd.print("MENU REGLAGES")
lcd.print("> Réglage 1")
lcd.print("  Réglage 2")
if (bouton_OK == HIGH){
  Etat = Settings_2;
  }

if (bouton_DOWN == HIGH){
  Etat = Settings_3;
  }

Break;

Logged

Orleans
Offline Offline
Jr. Member
**
Karma: 1
Posts: 88
Macbidouilleur
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ca peut ressembler a ca.

Commence par faire des p'tits dessins (ordinogrames ou trucs du genre) de comment doit se comporter ton programme, ca te facilitera la tache.
Logged


Pages: 1 [2]   Go Up
Jump to: