MENWIZ: una libreria per creare menu su LCD

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

s2->addVar(MW_ACTION,Step);

quindi scrivi qualcosa di simile
int Step(){
//....
}

Quando sei nel menu definito da:

    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:

 _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.

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:

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.

Allora, mi è arrivato il display LCD da 20x4 WOW ! bellisimo ! ... e ho potuto progredire nel progetto.
Ecco cosa ho combinato:

  //------ Sega Squadratrice ---------
s1=menu.addMenu(MW_SUBMENU,r,F("SAW"));                    //add a submenu node 2 to the root menu (control the heigh of my Planner)
  s2=menu.addMenu(MW_SUBMENU,s1,F("Altezza Sega"));                         //add a terminal node in the menu tree (that is "variable"); (should move at a certain mm height)
    s3=menu.addMenu(MW_VAR,s2,F("Altezza Assoluta"));
      s3->addVar(MW_AUTO_INT,&Height2,0,100,1);     //int type, fd binded variable, rage 0-100, step 1
        s3=menu.addMenu(MW_VAR,s2,F("moveMOTOR2"));
        s3->addVar(MW_ACTION,moveMOTOR2);
  s2=menu.addMenu(MW_SUBMENU,s1,F("Spostamento Sega"));                         //add a terminal node in the menu tree (that is "variable"); (should move at a certain mm height)
    s3=menu.addMenu(MW_VAR,s2,F("Movimento Relativo"));
     s3->addVar(MW_AUTO_INT,&Height1,-100,100,1);                   //int type, fd binded variable, rage 0-100, step 1
        s3=menu.addMenu(MW_VAR,s2,F("moveMOTOR"));
        s3->addVar(MW_ACTION,moveMOTOR);
  s2=menu.addMenu(MW_VAR,s1,F("Zero"));                         //add a terminal node in the menu tree (that is "variable"); (should set the zero)
  s2=menu.addMenu(MW_VAR,s1,F("Setup"));                        //add a terminal node in the menu tree (that is "variable");  (set the parameters)
 
  
  //------- Pialla --------
s1=menu.addMenu(MW_SUBMENU,r,F("PLANNER"));                    //add a submenu node 2 to the root menu (control the heigh of my Planner)
  //------- Toupie --------
  s1=menu.addMenu(MW_SUBMENU,r,F("Toupie"));                    //add a submenu node 2 to the root menu (control the heigh of my Planner)

E queste sono le funzioni (provvisorie) chiamate:

void moveMOTOR(){
stepper1.moveTo(Height1 * 50); // move Height1 mm's
lcd.print ("Sposto di ");
lcd.print (Height1);
lcd.print (" mm");
delay (5000);
}

void moveMOTOR2(){
stepper1.moveTo(Height2 * 50); // move Height1 mm's
lcd.print ("Altezza Segaa: mm ");
lcd.print (Height2);
delay (5000);
}

In pratica ora il menu fa esattamente quello che volevo (bhè è da finire un poco e da mettere in ordine)
Però ora le funzioni vengono chiamate internamente al ramo scelto, ovvero:
Menu Principale.
SAW > Altezza Sega > Altezza Assoluta > Variabile 0 (X) 100

Esecuzione
Spostamento sega > Movimento Relativo > Variabile -100 (X) +100
Esecuzione
E oltretutto riesco anche a far vedere ciò che succede dul display:

lcd.print ("Sposto di ");
lcd.print (Height1);
lcd.print (" mm");

ovvero mi appare sul LCD "Sposto di X mm""
Fantastico !
Grazie !
Penso che con il menù ho quasi fatto ... ora devo lavorare sul motore passo passo e le relative funzioni.
Ciao
P.S. allego lo sketch completo.

Automazione_Falegnameria_02.ino (10.3 KB)

Ciao,
ho provato la libreria per i menù di un controller di un acquario che sto realizzando.
Grazie per il magnifico lavoro che hai fatto.
Molto semplice da usare anche per me che conosco solo le basi del linguaggio C (e neanche bene).
A me sono state molto utili anche le opzioni di salvataggio in eprom e la possibilità di usare un altra "funzione" per la gestione dei pulsanti.
Ciao
Marco

Ciao Brunialti bel lavoro, senti per caso mi potresti aiutare ad adattare questa libreria per l' IDE 23, poiche ho scritto già un pde in quella versione e mi verrebbe più semplice adattare la tua alla 23 che il mio pde con tutte le librerie incluse alla 1.0

grazie al lavoro di Alessandro Raffaele che ha tradotto il manuale della libreria chi è interessato lo può prendere dall'allegato.
Purtroppo non sono riuscito a verificarlo, ma sono convinto che è perfetto :slight_smile:
Grazie Alessandro

MENWIZ_Quick_Tour_italian.doc (217 KB)

Grazie del manuale, credo sia meglio un PDF, questo DOC non si apre sul mio tablet

Aprendolo su Linux da LibreOffice mi trovo un documento di più di 400 pagine di caratteri senza senso e pagine vuote.

@Leo : L'ho convertito in pdf ma ... NON riesco ad allegarlo ... il forum mi corrompe l'Attach sia se lo metto come pdf, sia se lo racchiudo in uno zip ... :frowning: :frowning: :frowning:

Guglielmo

Il forum ha dei problemi con gli allegati da diversi giorni, pare proprio nel gestire ZIP e PDF, che vengono allegati ma poi salvati in remoto in forma corrotta.

Prova a comprimere il file in un formato tipo RAR oppure TAR.GZ, per vedere se cambia qualcosa.

... eccolo in RAR ... vediamo ...

Guglielmo

Edit : Sembra che in RAR vada bene :wink:

MENWIZ_Quick_Tour_italian.rar (321 KB)

Io ho scaricato con Chrome ma il rar mi risulta corrotto

Aprendo l'archivio mi viene detto che il file è corrotto però me lo estrae e poi il PDF è giusto :astonished:
Uso Linux con Chromium.

... a questo ho aggiunto anche una parte di "recovery record" (opzione -rr di RAR) ... vediamo se riusciamo ad avere una cosa non corrotta ... =(

Guglielmo

Edit: Mi sembra vada ... scaricato con Chrome ed estratto senza errori ... :roll_eyes:

MENWIZ_Quick_Tour_italian.rar (324 KB)

A me winrar dice fine imprevista nel file. Però estraggo il pdf e sembra corretto. L'ultima pagina è la 19 ?

L'ultimo RAR a me non ha dato nessun errore.

nid69ita:
A me winrar dice fine imprevista nel file. Però estraggo il pdf e sembra corretto. L'ultima pagina è la 19 ?

Si, è la 19 ! ... comunque stà diventando sempre più problematico allegare files ... :frowning:

@Leo : .... moderatore, due domandine ...

  1. come mai viene usato ancora la versione 1.1.18 di SMF e non una nuova (versione 2.x) ?
  2. come mai viene usato SMF invece di qualche cosa di più robusto, sicuro ed affidabile come IPS o vB ?

Guglielmo

gpb01:
@Leo : .... moderatore, due domandine ...

  1. come mai viene usato ancora la versione 1.1.18 di SMF e non una nuova (versione 2.x) ?
  2. come mai viene usato SMF invece di qualche cosa di più robusto, sicuro ed affidabile come IPS o vB ?

Nell'aria c'era un riaggiornamento globale del forum, così era stato preventivato tempo fa. Il "quando" questo verrà messo in pratica, non lo so.
Sulla scelta di SMF penso perché sia dettato da mere questioni economiche.

Ma prendi ciò che dico con le pinze, non essendo addentro alle faccende di Arduino (ci vorrebbe un membro del team per sapere esattamente le risposte alle tue domande)

leo72:
Nell'aria c'era un riaggiornamento globale del forum, così era stato preventivato tempo fa. Il "quando" questo verrà messo in pratica, non lo so.
Sulla scelta di SMF penso perché sia dettato da mere questioni economiche.
Ma prendi ciò che dico con le pinze, non essendo addentro alle faccende di Arduino (ci vorrebbe un membro del team per sapere esattamente le risposte alle tue domande)

Grazie Leo ...
... le "questioni economiche" mi sembrano strane :astonished: ... a parte il primo acquisto dove IPS costa magari qualche cosina di più (ma parliamo sempre di meno di 200 US$), poi il canone annuale è veramente misero ... :wink:

Va bé ... speriamo che almeno sistemino questa XD XD XD

Guglielmo

Magari è il mio winrar. Vecchia versione 4.20 su windows xp.