Pages: 1 2 [3] 4 5 ... 14   Go Down
Author Topic: MENWIZ: una libreria per creare menu su LCD  (Read 18198 times)
0 Members and 1 Guest are viewing this topic.
rome
Offline Offline
Sr. Member
****
Karma: 15
Posts: 474
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bene!
ma prima di stressare me  smiley guarda anche

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

attebdo feedback
Logged

0
Offline Offline
Faraday Member
**
Karma: 39
Posts: 5608
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai mica fatto, tu o altri, un video di esempio ?

Per il discorso i2c quale chip supporta la lib ?
Ad esempio del chip in firma e' stato necessario fare una libreria apposita

P.s mi farebbe piacere un tuo parere su questo mio topic, grazie
http://arduino.cc/forum/index.php/topic,122904.msg924268.html#msg924268
« Last Edit: September 21, 2012, 04:29:56 pm by Testato » Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

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

ciao brunialti

sono appena venuto a conoscenza del lavoro che hai fatto, io ho appena ultimato la libreria per:
monitor LCD I2C: Robot-Electronics dove ho pure collegato il tastierino annesso,

volevo chiederti se potevamo collaborare per inserire questa libreria nella tua in modo da renderla conpatibile anche con il monitor in mio possesso.

fammi sapere
Logged

rome
Offline Offline
Sr. Member
****
Karma: 15
Posts: 474
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho inserito su github l'ultima versione di MENWIZ

https://github.com/brunialti/MENWIZ

Potete scaricare il tutto come file zip.

La libreria ha dimensioni minori e alcune nuove funzioni di visualizzazione dei menu (collapsed menu).
Ha avuto un certo numero di download (oltre 300), anche se ora dopo la modifica della interfaccia di githib (non c'è più la pagina downloads) non so bene come fare a sapere quante persone scaricano i file ...
Logged

Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Mechmate #70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho un dubbio, il mio menu funziona, benissimo, solo che non sono riuscito a metterlo in azione, ovvero
in s2->addVar definisco i limiti e lo step da effettuare, e fino a qui tutto ok, sul mio display appaiono i limiti e con i pulsanti setto il valore che voglio.  Dopodichè schiaccio il pulsante confirm e mi torna indietro ...  


Code:
r=menu.addMenu(MW_ROOT,NULL,F("MAIN MENU"));                      //create a root menu at first (required)

  //---------------  
  s1=menu.addMenu(MW_SUBMENU,r,F("SAW"));                       //add a submenu node 1 to the root menu (control the heigh of my Saw)
    s2=menu.addMenu(MW_VAR,s1,F("ABS Height"));                   //add a terminal node in the menu tree (that is "variable"); (move at a certain mm height)
       s2->addVar(MW_AUTO_INT,&sp,0,100,1);                   //int type, fd binded variable, rage 0-100, step 1

ora il mio dubbio è: come faccio a fargli eseguire il comando ? ovvero far compiere allo stepper i passi richiesti ? devo scrivere una funzione tipo questa?

Code:
void ABS Height()
{
Serial.println("Sto girando zzz 10giri zzzz "); // :-)
}
Grazie
« Last Edit: January 16, 2013, 06:23:09 pm by Silverdog63 » Logged

Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Mechmate #70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

.... direi di no ... ma non capisco come faccio a eseguire la variabile scitta
Logged

rome
Offline Offline
Sr. Member
****
Karma: 15
Posts: 474
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non so se capisco bene. Nel menu devi settare i valori di alcune variabili, quindi devi lanciare una azione con i valori impostati.
Se è così devi creare una funzione di tipo int, quindi un nuovo nodo del menu di tipo variabile MW_ACTION, nel quale dichiari la tua azione che verrà eseguita ogni volta che premi il tasto di conferma e userà i valori correnti delle variabili modificati tramite il menu.
Non capisco coesa imntendi per "eseguire la variabile"
Logged

Rovereto
Offline Offline
Full Member
***
Karma: 4
Posts: 172
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

qualcuno ha già gestito i pulsanti tramite Io expander i2c? magari postando il codice?  smiley-sweat
Logged

Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Mechmate #70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao Roberto,
Si è come dici, qundi dopo:
Code:
s1=menu.addMenu(MW_SUBMENU,r,F("SAW"));                       //add a submenu node 1 to the root menu (control the heigh of my Saw)
    s2=menu.addMenu(MW_VAR,s1,F("ABS Height"));                   //add a terminal node in the menu tree (that is "variable"); (move at a certain mm height)
       s2->addVar(MW_AUTO_INT,&sp,0,100,1);                   //int type, fd binded variable, rage 0-100, step 1
devo mettere
Code:
s2->addVar(MW_ACTION,step);
per step intendo il movimento di un motore di n giri che ho settato  nel menu comandato dalla riga sopra ? (non sono sicuro che sia step ... magari è dostep ... poi controllo)
e "ovviamente" devo definire:
Code:
int step
e poi
Code:
void step ()
//funzione matematica che mi farà fare tanti giri o eventualmente mm
per eseguire variabile intendo esattamente quello che hai detto "userà i valori correnti delle variabili modificati tramite il menu"
Scusa se faccio 'ste domande, ma da pricipiante a volte anche se ho le risposte sotto gli occhi ... non le vedo. Ho letto il tuo manuale e cercato di osservare codici di altri .... ma è ancora dura.
Grazie
P.S.
Se hai bisogno di fare qualche taglio con CNC ricambio volentieri
« Last Edit: January 17, 2013, 11:41:24 am by Silverdog63 » Logged

rome
Offline Offline
Sr. Member
****
Karma: 15
Posts: 474
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

devi mettere queste due righe (la prima crea un novo nodo nel menu, sotto il nodo puntato da s1, la seconda dice che quel nodo è una azione)

Code:
s2=menu.AddMenu(MW_VAR,s1,F("Step"));
s2->addVar(MW_ACTION,step);
In questo caso quando premi il tasto conferma sulla label "Step" entri in una schermata che ti chiede conferma.
Se non vuoi la conferma (cioè vuoi lanciare la funzione step appena premi il tasto di conferma) allora devi aggiungere
Code:
s2->setBehaviour(MW_ACTION_CONFIRM,false);
Non mi tentare con il CNC. Potresti non liberarti di me ...  smiley-cool
« Last Edit: January 17, 2013, 12:08:20 pm by brunialti » Logged

rome
Offline Offline
Sr. Member
****
Karma: 15
Posts: 474
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@dasty
scusami, ma non avevo visto la tua proposta. menwiz può essere anche fatto funzionare con altre librerie di gestione lcd oltre new liquidcrystal.
Alcuni utenti lo hanno fatto. E' relativamente semplice se la libreria alternativa ha una interfaccia con funzioni simili.
Ma io non riesco proprio a mantenere più versioni per più librerie. new liquidcrystal è quella che comprende più interfacce di tutte ed è la più performante e stabile.
Logged

Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Mechmate #70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Roberto,
Ora comincio a capire un pochino

Quote
Non mi tentare con il CNC. Potresti non liberarti di me ...  smiley-cool

Ho un bel giocattolino autocostruito .... bhè mica tanto giocattolo ... 2,60 metri x 1,80 circa ....
cercando su google Mechmate ti puoi rendere conto
fai un pò te ...  smiley
a me piace sdebitarmi
« Last Edit: January 18, 2013, 04:58:18 am by Silverdog63 » Logged

Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Mechmate #70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao Roberto,
Macchè evidentemente non ho capito, non mi funziona. Aggiungendo:
Code:
     s2=menu.addMenu(MW_VAR,s1,F("Step"));
come nel codice sotto, quello che accade è che mi viene aggiunto un altro menu "Step" alla root principale.
Ho provato ha cambiare s2 in s3 sopra e relativa aggiunta *s3 all'inizio sotto ma nisba

Code:
 _menu *r,*s1,*s2;

                                      // initialize the menu object ( 4 x rows x 20 colums LCD)
  menu.begin(&lcd,16,2);              //initialize the menwiz menu object passing the lcd object and the colums and rows params
  menu.addUsrNav(navMenu,4);
  MW_navbtn=4;                        // force 4 or 6 buttons mode for menu navigation -> MW_navbtn=4; or MW_navbtn=6;

  //create the menu tree
  r=menu.addMenu(MW_ROOT,NULL,F("MAIN MENU"));                      //create a root menu at first (required)

  //---------------  
  s1=menu.addMenu(MW_SUBMENU,r,F("SAW"));                       //add a submenu node 1 to the root menu (control the heigh of my Saw)
  s2=menu.addMenu(MW_VAR,s1,F("ABS Height"));                   //add a terminal node in the menu tree (that is "variable"); (move at a certain mm height)
     s2->addVar(MW_AUTO_INT,&sp,0,100,1);                   //int type, fd binded variable, rage 0-100, step 1
      s2=menu.addMenu(MW_VAR,s1,F("Step"));
        s2->addVar(MW_ACTION,Step);

invece
Code:
       s2->addVar(MW_ACTION,Step);
mi blocca il codice su Step perchè non dichiarato .... ma questo è un altro discorso legato alla mia incapacità .... ci devo studiare un po' (ho provato a smanettare ma peggioro la situazione)
Comunque quello che mi sembrava aver capito è che una volta impostata la mia variabile
Code:
    s2->addVar(MW_AUTO_INT,&sp,0,100,1);
ad esempio 10 ... premendo confirm passavo al livello successivo "Step" e confermando di nuovo eseguivo l'azione step con valore 10 impostato al livello precedente ... sbaglio ?
« Last Edit: January 18, 2013, 09:07:05 am by Silverdog63 » Logged

rome
Offline Offline
Sr. Member
****
Karma: 15
Posts: 474
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ehm, aggiungere una linea al menu, è quello che volevo (ma forse tu no   smiley-confuse)
Ovviamente devi creare una funzione Step dove metetreai il tuo codice per evitare l'errore in compilazione sulla linea 

Code:
s2->addVar(MW_ACTION,Step);

quindi scrivi qualcosa di simile

Code:
int Step(){
//....
}

Quando sei nel menu definito da:

Code:
   s2->addVar(MW_AUTO_INT,&sp,0,100,1);

puoi cambiare il valore della variabile sp, ma per lanciare l'azione (menu "Step") devi ritornare indietro di un livello perchè sia il menù con la tua variabile sia il menu "Step" sono 'figli dello stesso padre' (il menu root puntato da r1).
Però puoi anche provare a usare l'opzione collapsed menu, che forse fa quello che vuoi tu:

Code:
_menu *r,*s1,*s2;

                                      // initialize the menu object ( 4 x rows x 20 colums LCD)
  menu.begin(&lcd,16,2);              //initialize the menwiz menu object passing the lcd object and the colums and rows params
  menu.addUsrNav(navMenu,4);
  MW_navbtn=4;                        // force 4 or 6 buttons mode for menu navigation -> MW_navbtn=4; or MW_navbtn=6;

  //create the menu tree
  r=menu.addMenu(MW_ROOT,NULL,F("MAIN MENU"));   //create a root menu at first (required)

  //---------------  
  s1=menu.addMenu(MW_SUBMENU,r,F("SAW"));            //add a submenu node 1 to the root menu (control the heigh of my Saw)
     s1->setBehaviour(MW_MENU_COLLAPSED,true);        // fa vedere tutte le opzioni di submenu in una stessa schermata

     s2=menu.addMenu(MW_VAR,s1,F("ABS Height"));      //add a terminal node in the menu tree (that is "variable"); (move at a certain mm height)
     s2->addVar(MW_AUTO_INT,&sp,0,100,1);                /int type, fd binded variable, rage 0-100, step 1
    
     s2=menu.addMenu(MW_VAR,s1,F("Step"));
     s2->addVar(MW_ACTION,Step);
     s2->setBehaviour(MW_ACTION_CONFIRM,false);

L'opzione MW_MENU_COLLAPSED funziona però solo con 6 buttons (perchè altrimenti non saprei come gestire l'interazione con l'utente).
Il codice di cui sopra dovrebbe fare quello che vuoi (vedere nella stessa schermata la variabile  e l'azione, poter modificare con il tasto destro/sinistro il valore della variabile e lanciare direttamente l'azione dalla stessa schermata). Ovviamente il codice di cui sopra pur girando su un lcd 2x16 è indicato su un lcd 4x20.
« Last Edit: January 19, 2013, 11:05:07 am by brunialti » Logged

Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Mechmate #70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Roberto,
Devo Ragionarci un pò su e fare mente locale, mi ero entusiasmato quando il menù ha cominciato a funzionare con i pulsanti analogici dello shield, ora ho un momento di regressione, troppe cose insieme ! ed ho scoperto che il driver stepper che avevo ordinato non è adatto al motore che ho, quindi devo attendere quello nuovo per sperimentare (ho ordinato anche il 4x20)
I punti fermi sono 4 (massimo 5) pulsanti analogici, quelli dello shield.
In alternativa far fuzionare il menù e il progetto con un encoder rotativo mi attrae molto.
I 6 pulsanti digitali sono  esclusi (mi mangiano troppi pin) e con loro la funzione collapsed (anche se combinando encoder e pulsanti ...).
Comunque un passo alla volta altrimenti collasso io !
Quello che vorrei fare pensavo fosse semplice:
Code:
Menu:
  Sega>
        Altezza Assoluta>             //porta la lama a X mm
              Movimento mm (0) 20 (100)> //min,X,Max (X=20mm)
                          OK esegui spostamento
       Altezza Relativa>             //sposta la lama di X mm
              Movimento mm (0) 40 (100)> //min,X,Max (X=40mm)
                          OK esegui spostamento
  Pialla>    //concetto simile alla sega
        Altezza Assoluta>
              Movimento mm (0) 20 (100)>
                          OK esegui spostamento
ecc. ecc.
Tenere i "figli" separati è essenziale.
Ora con le ultime informazioni che mi hai dato vedo cosa riesco a fare per non incasinare tutto.
Secondo me , visto che devo tornare indietro dopo aver messo i mm di spostamento per poi far partire l'azione, potrei creare dei "nipoti", cioè: Sega è padre, Altezza Assoluta/Altezza Relativa Figli, e Movimento mm e OK esecuzione nipoti. Così rimarrei tornando indietro, nel menù Altezza Assoluta e non in mezzo al resto ... vediamo un pò cosa riesco a combinare.
Grazie e buona domenica.
Logged

Pages: 1 2 [3] 4 5 ... 14   Go Up
Jump to: