Arduino afficheur

a marqué ce sujet comme résolu.

D’accord je vois, pourtant, lorsque je le fais, cela ne marche pas… ainsi, j’aimerai, après que le 2eme menu soit affiché, faire 4 IF pour le choix 1, le choix 2, le choix 3 et le choix 4 dans chaque IF déjà faits, et ensuite démarrer le décompte, mais cela ne fonctionne pas… pour Switch, je ne pourrai pas l’utiliser visiblement avec mon Arduino…

+0 -0

Merci beaucoup pour votre illustration! En effet, cette idée est mieux et pourrait permettre de réduire à 3 boutons! Mais il faudrait que je sache comment m’y prendre, notamment pour indiquer lequel a été choisi (peut être avec : 1-> 3k, 2-> 3k+1, 3-> 3k+2) mais je ne saurais pas le traduire en Arduino. Également, mais je crois savoir faire, pour faire apparaître une sorte de curseur flèche sélécteur.

D’accord je vois, pourtant, lorsque je le fais, cela ne marche pas… ainsi, j’aimerai, après que le 2eme menu soit affiché, faire 4 IF pour le choix 1, le choix 2, le choix 3 et le choix 4 dans chaque IF déjà faits, et ensuite démarrer le décompte, mais cela ne fonctionne pas… pour Switch, je ne pourrai pas l’utiliser visiblement avec mon Arduino…

Baenji

C’est très très très probablement que tu n’écris pas correctement ton "switch". On ne voit pas pourquoi tu aurais une version du compilateur qui ne reconnait pas les bases du langage C++.

Puisqu’on en parle, le code que tu montres plus haut est très loin de faire ce qui est prévu. Faut pas rêver, ça va demander pas mal de boulot encore. D’autant plus que tu es en train de découvrir complètement la programmation (preuve:les point virgules pour séparer les paramètres dans un appel de fonction), tu n’es pas sorti de l’auberge. Si on t’a donné ce projet à faire, tu as certainement eu des cours….

+0 -0

Y aurait que moi, le pilotage du menu prendrait la forme d’un automate, mais bon, ça utilise des structures, des switch, des enumérations…. Méfiance, si tu recopies, on va peut-être se douter que c’est pas de toi :-)

enum NodeIndex {            // structure des menus
  MENU, 
  TEMPERATURE, 
     TEMP40, 
     TEMP60,  
  RUN, 
     RUN_YES, 
     RUN_NO
};

enum Action {
  NONE, SET_T40, SET_T60, START
};

enum UserAction {  NEXT, SELECT };

int temperature = 40;

void executeAction(enum Action a) {
  switch (a) {
    case NONE:                                break;
    case SET_T40: temperature = 40;           break;
    case SET_T60: temperature = 80;           break;
    case START  : /* action pour démarrer */  break;
  };
}

struct Node {
  const char* label;
  enum NodeIndex next, selection;
  enum Action action;
};

// Elements des menus, dans l ordre des index
Node nodes [] = {                          
  // label            next          selection   action
  { "Welcome",        TEMPERATURE,  MENU,      NONE },
  { "Temp Menu",      RUN,          TEMP40,    NONE },
     { "TEMP=40 ?"  , TEMP60,       RUN,       SET_T40 },
     { "TEMP=60 ?"  , TEMP40,       RUN,       SET_T60 },
  { "Run Menu"   ,    MENU,         RUN_YES,   NONE },
     { "Start!"     , RUN_NO,       MENU,      START },
     { "exit"       , RUN_YES,      MENU,      NONE }
};

// Automate

enum NodeIndex current = MENU;

void execute(UserAction u) {
  switch (u) {
    case NEXT :
      current = nodes[current].next;
      break;
    case SELECT :
      executeAction(nodes[current].action);
      current = nodes[current].next;
      break;
  }
  // afficher  node[current].label
}
+0 -0

Merci beaucoup, et c’est possible pour le switch, sauf que l’on m’annonce "problème de téléversement" et non problème dans l’algorithme… c’est pour cela que je ne comprends pas… Oui c’est exact, je découvre, et on a eu trèèèèès peu de cours dessus (seulement 1 pour afficher "J’aime mon lycée" de toutes les couleurs) car cette partie n’est pas très importante dans le projet : elle est limite facultative. En réalité, je dois présenter pour le bac, un tas de mesure que j’ai réalisé en cours sur une bouilloire (d’où température et volume) et cette partie est la cerise sur le gâteau : l’afficheur qui montrera le temps de chauffe, car c’est l’objectif. Perfectionniste comme je suis, je me suis dit que j’allais le faire, et comme j’ai commencé, j’aimerais aller jusqu’au bout et le comprendre, car j’apprécie beaucoup Arduino ! J’espère pouvoir le finir pour vendredi, sinon pour avant Mai. En effet, je n’y suis pas encore mais je suis déjà fier de ce que j’ai fait, et je pense avoir fait un bon quart. J’espère pouvoir y arriver petit à petit! Pour l’algorithme que vous me proposez : tout d’abord merci! et ensuite, qu’affichera-t-il? Car je ne comprends pas tout ^^' Sinon, en effet, pour la structure switch, je pense l’avoir mal utilisée… Ah ! je n’avais pas lu votre commentaire ! En effet je comprends :) Mais affiche-t-il les 4 différentes températures (60, 70, 80, 95) et les 3 différents volumes (0,5;0,8;1) ? Je ne pense pas le recopier, car je ne le comprends pas moi-même et je ne pense pas être en mesure de faire cela ! je souhaiterais vraiment essayer de m’en sortir avec celui que j’ai commencé. Ce que je peux faire, c’est proposer et montrer ces 2 algorithmes différents, en indiquant avoir été aidé pour celui-là! Mais je suis sûr de pouvoir faire quelque chose avec le mien (qui sera beaucoup plus long) ! Qu’en pensez-vous?

+0 -0

J’en pense qu’il y a encore du boulot, et que pour vendredi il va falloir se remuer grave.

Dans ce que je montre, il n’y a que deux températures et la mise en marche. Pas de volume. Et bien sur ça ne comporte pas la détection des actions de l’utilisateur (quand l’utilisateur appuie, ça doit appeler la fonction avec un SELECT ou un NEXT), ni les actions sur chauffage et je sais pas quoi.

+0 -0

Disons que je peux le terminer après les vacances, si j’ai la certitude qu’il fonctionne ! Ah d’accord! Pour vendredi, j’ai juste demandé à mon professeur de me laisser venir 3h pour travailler dessus!

Baenji

Je crois que tu sous-estimes largement le temps de réalisation, et le temps d’apprentissage nécessaire. Multiplie par 10 au moins.

+0 -0

Bonjour, je vous envoie ce message pour vous dire que j’ai réussi (alors on m’a bien entendu aidé) à terminer cet Arduino, et ce, en 2h ! Alors, nous avons juste un problème… Tout fonctionne, absolument tout, sauf l’étape du décompte… Ce n’est pas très important, mais j’aimerai comprendre ce qui cloche, car nous avons eu beaucoup de mal… De plus, j’ai pu parlé avec mon professeur, qui m’a dit que je n’aurais pas pu le faire tout seul. Un ami m’a donc aidé, puisqu’il bosse sur Arduino depuis maintenant 2 ans. Pourriez-vous m’éclairer quant au problème du menu 3, à savoir, le décompte? Merci.

 #include <Wire.h>
#include "rgb_lcd.h"

int decompte=0;
int sec=0;
rgb_lcd lcd;
int secu=0;
int T=0;
int temperature[4]={0,1,2,3};
int volume[3]={0,1,2};
int V=0;
int temps[4][3]=
{
  {80, 90, 100},
  {110, 120, 130},
  {140, 150, 160},
  {170, 180, 190},
};

const int colorR = 0;
const int colorG = 0;
const int colorB = 255;
const int BOUTON_1 = 8;
const int BOUTON_2 = 7;
const int BOUTON_3 = 6;
const int BOUTON_4 = 5;
const int LED = 4;
int etat1;
int etat2;
int etat3;
int etat4;

void setup() {
  // put your setup code here, to run once:
lcd.begin(16, 2);
lcd.setRGB(colorR, colorG, colorB);
pinMode(LED, OUTPUT);
pinMode(BOUTON_1, INPUT);
pinMode(BOUTON_2, INPUT);
pinMode(BOUTON_3, INPUT);
pinMode(BOUTON_4, INPUT);
lcd.clear();
Serial.begin(9600);
}
 void bouton() {
etat1 = digitalRead(BOUTON_1);
etat2 = digitalRead(BOUTON_2);
etat3 = digitalRead(BOUTON_3);
etat4 = digitalRead(BOUTON_4);
if (secu==0) 
{
  if (etat1 == HIGH)
  {
    T=0; delay(2000); lcd.clear(); etat1=LOW; secu=1;
  }
  if (etat2 == HIGH) 
  {
    T=1;  delay(2000); lcd.clear(); etat2=LOW; secu=1;
  }
  if (etat3 == HIGH)
  {
    T=2;  delay(2000); lcd.clear();etat3=LOW; secu=1;
  }
  if (etat4 == HIGH) 
  {
    T=3; delay(2000); lcd.clear();etat4=LOW; secu=1;
  }
}
if(secu==1)
{
  if(etat1 == HIGH)
  {
    V=0; secu=2;  delay(2000);lcd.clear(); sec=temps[T][V]; etat1=LOW;
  }
  if(etat2 == HIGH)
  {
    V=1; secu=2;  delay(2000);lcd.clear();sec=temps[T][V];etat2=LOW;
  }
  if(etat3 == HIGH)
  {
    V=2; secu=2;  delay(2000);lcd.clear();sec=temps[T][V];etat3=LOW;
  }
  if(etat4 == HIGH) 
  {
    secu=0;  delay(2000);lcd.clear();etat4=LOW;
  }

}
}
void menu1() {
lcd.setCursor(0, 0);
  lcd.print("TEMPERATURE?"); 
lcd.setCursor(1, 1);
  lcd.print("60"); 
lcd.setCursor(5, 1);
  lcd.print("70"); 
lcd.setCursor(9, 1);
  lcd.print("80"); 
lcd.setCursor(13, 1);
  lcd.print("95");
}
void menu2() {
lcd.setCursor(0, 0);
lcd.print("VOLUME?");
lcd.setCursor(0, 1);
lcd.print("0,5");
lcd.setCursor(4,1);
lcd.print("0,8");
lcd.setCursor(9, 1);
lcd.print("1");
lcd.setCursor(12, 1);
lcd.print("BACK");
 }
void menu3() {
  if (sec=!0){
   decompte=millis()%1000;
   if(decompte==0)
  {sec--;};
 lcd.setCursor(7, 0);
 lcd.print(sec);
 }
  else 
  {
   digitalWrite(LED, HIGH);
   delay(5000);
   digitalWrite(LED, LOW);
   lcd.clear();
   secu=0;
}
 }

 void loop() {
    if (secu==0) {
    menu1();
    bouton();
  }
  if (secu==1) {
     menu2();
    bouton();
 }
  if (secu==2) {
    menu3();
 }
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte