Creazione Menu

Sto' sempre cercando di portare avanti ( con molta fatica nonostante gli aiuti ricevuti ) la realizzazione di una macchina per la risaldatura dei circuiti stampati . Adesso avrei la necessità di creare un menu per gestire le varie fasi. Ho provato a scaricare la libreria Menu, ma non ci ho capito poi molto....Dunque dovrei gestire il tutto con 6 tasti, MENU - SET - ENTER - EXIT - UP - DOWN e in pratica accedere ad un menu con diversi sottomenu

All'incirca così

MENU PRINCIPALE

submenu PREHEAT

dove si possa impostare temperatura e tempo

submenu HEAT

dove si possa impostare temperatura e tempo

submenu SOLDER

dove si possa impostare temperatura e tempo

submenu KEEP

dove si possa impostare temperatura e tempo

submenu COOL DOWN

dove si possa impostare temperatura e tempo

Dovrei poter utilizzare sia la tastiera locale che la tastiera del PC

Avete qualche spunto da darmi ?

Inoltre dovrei misurare e controllare la temperatura sia della parte superiore che di quella inferiore, ma vorrei, se possibile, utilizzare due termocoppie ed un solo MAX6675.....pensate sia possibile ?

Grazie !!!

http://arduino.cc/forum/index.php/topic,68535.0.html

qando inizierò la scuola e quindi finito con tutta sta mole di roba da studiare (cambio scuola) ed avrò qualche ora da dedicare all'esclusivo arduino proverò a scrivere una libreria anche se sarebbe la prima e attualmente non ho idea di come farla (tipo creare l'elemento menu con le funzioni menu.create(id) menu.goto(id) menu.principal() menu.select() ecc ecc..)

A proposito del link di superlol, io che avevo aperto quella discussione il menù sono riuscito a farlo!
Se ti può essere utile di esempio posto il codice, tieni però presente che ho usato solo 4 pulsanti, MENU che fa anche da conferma (SET/ENTER), EXIT, UP e DOWN.

PS superlol, avevo letto qualcosa della scuola, dove vai a parare?

Grazie superlol e forno !!

@ superlol - grazie per gli esempi, vedo di capirci qualche cosa piano piano........ti volevo segnalare che una libreria per i menu' credo che esista già ( l'ho scaricata ma non ricordo dove....) soltanto che per me è quasi arabo... XD

@ forno - se posti il codice ti sarei molto grato, vanno benissimo anche 4 tasti .

Superlol, ho guardato il tuo sketch, ma ho capito ben poco....hai mica la sola parte relativa al menu ?

Forno, quando puoi se posti il tuo codice ci do' un'occhiata.,,,

Grazie ad entrambi, ma la storia del menu' per me è veramente ostica....

superlol:

forno:
Ok, ora faccio una ricerca :wink:
Si, ci vorrebbe una bella libreria semplice semplice per gestire i menù :wink:

il problema è che sarebbe pesantissima, io dichiaro una funzione per ogni menu/sottomenu. poi metto un loop fino alla pressione di enter o reset e avendo salvato l'ultimo valore sel pulsante so quale è stato schiacciato, salvo poi la "posizione del cursore" come fosse un id ed in base all'id chiamo un'altro menu.

del tipo:

int posizione = 1;

int ultimopulsante = 0;

void menu_uno() {
  while(ultimopulsante != 5) { //mettiamo che il 5 sia l'ok
    //mostri il menu
    if(ultimopulsante == 3) posizione++; // mettiamo prema su
    if(ultimopulsante == 2) posizione++; // mettiamo prema giù (da implementare un debounce è solo un esempio
  }
  passamenu(posizione);
}

void menu_due() {
  while(ultimopulsante != 5) { //mettiamo che il 5 sia l'ok
    //mostri il menu
    if(ultimopulsante == 3) posizione++; // mettiamo prema su
    if(ultimopulsante == 2) posizione++; // mettiamo prema giù (da implementare un debounce è solo un esempio
  }
  passamenu(posizione);
}

passamenu(int quale) {
  switch(quale) {
    case 1: // assegni ad ogni id una funzione del menu
    menu_uno();
    break;
    case 2:
    menu_due();
    break;
    //ecc...
  }
}



e li fai tutti così

io almeno è come faccio

mi cito da solo.

come ho già spiegato assegni un id univoco ad ogni menu e sottomenu del tipo
principale 1
preheat 2
heat 3
solder 4.. ecc..

crei poi un void per ogni id.
avrai quindi

void principale() { }
void preheat() { }
void heat() { }

dentro le parentesi graffe di ogni menu crei una condizione di uscita, in pratica setti dei parametri iniziali quindi metti tutto in while(pulsante == HIGH) (qui leggiti i debounce) dove pulsante può essere il return od invio o quello che è in base alla tastiera che usi.
dentro il while metti il codice che identifica il menu, intendo se devi impostare la temperatura faì un qualcosa tipo

void heat() {
while(condizione di uscita vedi sopra) {
lcd.setCursor(0,1);
lcd.print("temp. ");
lcd.print(valoretemperatura);
// sopra in pratica mostra il valore poi puoi fare del tipo
if(destra == HIGH) valoretemperatura++; // se preme destra il valore della temperatura aumenta
if(sinistra == HIGH) valoretemperatura--; // il contrario di sopra
}
}

se poi devi impostare 2 valori devi fare un contatore di posizione che diventa 1 se premi su o 2 se premi giù, poi quando guardi se viene premuto destra o sinistra metti un if che se questo contatore è 1 allora agisce sulla temperatura, se è 2 agisce sul tempo.

per terminare avrai bisogno di una condizione di cambio:
necessiti come ho detto sopra per navigare tra i menu di un contatore che ti indichi quale hai selezionato, quando poi esci dal while tecnicamente torneresti al loop, ma noi non vogliamo che accada, quindi alla fine mettiamo una funzione del tipo passamenu (come sopra) a cui passiamo come argomento l'id del menu che vogliamo, poi con una serie di switch chiami il menu che ti interessa.

non è in effetti il modo più ottimizzato per fare menu lo ammetto, esistono modi migliori ma come primi menu credo sia un buon metodo

Grazie Superlol, adesso mi è più chiaro il meccanismo. Il vantaggio del tuo metodo è che non ti leghi ad una libreria in particolare ed è sicuramente più utile per imparare come gestire e personalizzare un menu.

il vantaggio del mio metodo è che lo vedo più personalizzabile, il fatto di legarsi ad una libreria in realtà è utile perchè con meno comandi hai lo stesso risultato, magari ci lavorerò quando ho finito i 5 progetti esistenti e mi dedicherò ai 20 che ho in mente :sweat_smile:

comunuqe è il sistema più comodo che abbia trovato, dovendoli mettere in un progetto creerò dei diagrammi, sempre quando avrò tempo XD