Go Down

Topic: MENWIZ: una libreria per creare menu su LCD (Read 135313 times) previous topic - next topic

MarioMario

Grazie PaoloP, ma ho semplicemente provato a compilare l'esempio fornito conla libreria, non ho modificato il codice.
Cosa può essere?

Grazie,
Mario

brunialti

#211
Jul 23, 2014, 03:30 pm Last Edit: Aug 04, 2014, 08:18 am by leo72 Reason: 1
verifica in MENWIZ.h la seguente riga

Code: [Select]
//#define BUTTON_SUPPORT   //comment itif you do'nt want to use the Button methods!

in alcuni esempi c'è del codice inserito per la gestione di una keyboard in questi casi per risparmiare memoria si commenta la riga di cui sopra per non compilare le funzioni che non si usano.. Nel caso devi togliere il commento.
Spero  di essere stato utile

MarioMario

#212
Jul 23, 2014, 10:38 pm Last Edit: Aug 04, 2014, 08:18 am by leo72 Reason: 1
Grazie brunialti,
ho controllato la libreria e in MENWIZ.h era commenta la riga che mi hai detto.

Ho tolto il commento, chiuso, riaperto l'IDE ma il problema persiste, questo è quello che viene fuori quando compilo:

Code: [Select]
Test_all_var_types:77: error: 'class menwiz' has no member named 'navButtons'
Test_all_var_types:84: error: expected unqualified-id before '(' token
Test_all_var_types:84: error: expected primary-expression before 'char'


Sto usando il file di esempio "Test_all_var_type con IDE 1.0.4

Cosa può essere?

Grazie,
Mario

niki77

Buongiorno a tutti,

Ho scoperto che purtroppo questa bella libreria non ha supporto nativo per i dati di tipo unsigned int.
Non funziona nemmeno il tipo di dati list associato ad una variabile di tipo byte, ma questo è un problema minore per il mio uso.
Ad occhio mi sembra di aver visto che implementare la gestione del tipo unsigned int su addvar non è poi così banale, qualcuno saprebbe indicarmi un possibile workaround ?
Grazie
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Guidus93

Sto riscontrando difficoltà ad aggiungere alla UsrScreen la data e l'ora.

Facendo così funziona ma quando le ore, o i minuti sono <10 non ho modo di stampare lo 0.
Code: [Select]
void msc(){
  DateTime now= RTC.now();
  int hm,tm;
    static  char buf[7];
  strcpy(menu.sbuf,"GrowRoom Controller"); //1st lcd line
  strcat(menu.sbuf,"\n Temperatura: ");strcat(menu.sbuf,itoa((int)(tm),buf,10));strcat(menu.sbuf,"C");//2nd lcd line
  strcat(menu.sbuf,"\n   Umidita' : ");strcat(menu.sbuf,itoa((int)(hm),buf,10));strcat(menu.sbuf,"%");//3rd lcd line
  strcat(menu.sbuf,"\n ");strcat(menu.sbuf,itoa((int)(now.hour()),buf,10));strcat(menu.sbuf,":");strcat(menu.sbuf,itoa((int)(now.minute()),buf,10));strcat(menu.sbuf,"  ");
  strcat(menu.sbuf,itoa((int)(now.day()),buf,10));strcat(menu.sbuf,"/");  strcat(menu.sbuf,itoa((int)(now.month()),buf,10));strcat(menu.sbuf,"/"); strcat(menu.sbuf,itoa((int)(now.year()),buf,10));//4th lcd line
  menu.drawUsrScreen(menu.sbuf);}


Altri metodi?

vitoos

Salve a tutti, da come ho capito la libreria liquidcristal i2c permette di gestire anche gli lcd seriali a 4 bit ma non capisco come devo fare per dirgli che non è un i2c, come devo fare?

leo72

Non capisco se la domanda è pertinente con la discussione o meno... Hai problemi con la libreria Menwiz oppure non riesci a usare il display?

Massimog

è possibile usare questa libreria con display 40x4 che ha 2 enable pin?

fiodavid

scusate la domanda?
questa libreria la posso utilizzare anche con lo shield Keypad? nel senso, siccome i tasti sono collegati tutti a A0 con partitori, come gestisce la cosa la libreria?

grazie

ciao
fiodavid

linvswin

Salve a tutti,

volevo chiedere se è possibile creare le label dei menu in modo dimanico. Sto cercando di fare una cosa del genere:
Quote
r = tree.addMenu(MW_ROOT, NULL, F("Menu"));
s1 = tree.addMenu(MW_SUBMENU, r, F("Input"));

for (int i = 1; i < 10; i++)
{
     s2 = tree.addMenu(MW_VAR, s1, F("Input "+i));
     ........
}
e cioè 10 voci di menu con le stesse impostazione. Mi da questo errore di compilazione:
Quote
quick_tour.ino: In function 'void setup()':
/home/peppe/Scaricati/Arduino/arduino-1.6.4/hardware/arduino/avr/cores/arduino/WString.h:38:74: error: initializer fails to determine size of '__c'
 #define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))
                                                                          ^
quick_tour.ino:69:32: note: in expansion of macro 'F'
/home/peppe/Scaricati/Arduino/arduino-1.6.4/hardware/arduino/avr/cores/arduino/WString.h:38:74: error: array must be initialized with a brace-enclosed initializer
 #define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))
                                                                          ^
quick_tour.ino:69:32: note: in expansion of macro 'F'
se provo così :

Quote
s2 = tree.addMenu(MW_VAR, s1, F(i));
stesso errore. Compila solo se aggiungo il cast (MW_LABEL) al posto della F(). però poi sul display compaiono caratteri a caso.

Premetto che l'esempio funziona con i valori statici, ( se metto s2 = tree.addMenu(MW_VAR, s1, F("Input"));

C'è qualche soluzione?

Peppe

marco3020

Buongiorno a  tutti esiste un modo di usare la libreria PCF con questa libreria?

davide220

Ho provato a caricare il file su Arduino ma da questo errore:

menu:15: error: 'menuChangeEvent' was not declared in this scope

 MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent);

                                             ^

exit status 1
'menuUseEvent' was not declared in this scope

Trovata libreria non valida in C:\Program Files (x86)\Arduino\libraries\MenuBackend_1-0: C:\Program Files (x86)\Arduino\libraries\MenuBackend_1-0
Trovata libreria non valida in C:\Program Files (x86)\Arduino\libraries\MenuBackend_1-0: C:\Program Files (x86)\Arduino\libraries\MenuBackend_1-0

Premetto che ho installato la libreria nella cartella come ho fatto per tante altre librerie aggiuntive.

Come risolvo? Grazie

carlottavalente

salve ragazzi sono due giorni che cerco di integrare questo menu' al mio scketc senza ottenere risultati solo tantissimi errori mi aiutate?

Code: [Select]
#include <LiquidCrystal.h>



#define STEP_PIN   54
#define DIR_PIN    55
#define ENABLE_PIN  38
#define X_MIN 3 // finecorsa giu D3
#define X_MAX 2 // finecorsa su D2
#define pulsante_azzeramento 14 // pin Y_MIN
#define pulsante_start 15 // pin Y_MAX
#define pulsante_reset 18 // pin Z_MIN
#define led 13 // pin LED
#define Relay 24

int ritardo_veloce = 360 ;
int velocita = 0 ;
unsigned int distanza = 0;



LiquidCrystal lcd(46, 48, 56, 60, 61, 62);

void setup() {
 

lcd.begin(16,2);

 lcd.setCursor(0,0); // vai alla posizione 0,0 dell'LCD...
lcd.print("  Carlotta ");
lcd.setCursor(0,1); // vai alla posizione 0,1 dell'LCD...
lcd.print("  Valente");
delay(2000);
lcd.clear();

lcd.setCursor(0,0); // vai alla posizione 0,0 dell'LCD...
lcd.print("   ATTENZIONE");
lcd.setCursor(0,1); // vai alla posizione 0,0 dell'LCD...
lcd.print(" AZZERARE ASSE");
delay(4000);
lcd.clear();

 
 
 
  pinMode(STEP_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(ENABLE_PIN, OUTPUT);
  pinMode(X_MIN, INPUT_PULLUP);
  pinMode(X_MAX, INPUT);
  pinMode(pulsante_azzeramento, INPUT_PULLUP);
  pinMode(pulsante_start , INPUT_PULLUP);
  pinMode(pulsante_reset, INPUT_PULLUP);
 pinMode(Relay, OUTPUT);
  digitalWrite(ENABLE_PIN, HIGH );
// attachInterrupt(digitalPinToInterrupt(X_MIN), err_finecorsa, LOW); // Interrupt per finecorsa basso
  pinMode(led, OUTPUT);
  digitalWrite(Relay, LOW );
}

void loop()
{
lcd.setCursor(0,1); // vai alla posizione 0,1 dell'LCD...
lcd.print("ASSE X 0,");
  if (digitalRead (pulsante_reset) == 0 ) {

//AZZERAMENTO
   
    pos_iniziale() ; // esegue procedura di posizionamento iniziale al fine corsa
   
     digitalWrite(Relay, LOW );
    delay(1000);
    step(STEP_PIN, 7166, DIR_PIN, true, velocita); //esegue 7166 passi in avanti veloce
 
  attachInterrupt(digitalPinToInterrupt(X_MIN), err_finecorsa, LOW); // riabilita interrupt basso
   digitalWrite(ENABLE_PIN, HIGH ); //disabilita ENABLE_PIN

lcd.setCursor(0,0); // vai alla posizione 0,0 dell'LCD... casomai cambia riga e colonna se serve
lcd.print("ASSE AZZERATO");


}
  if (digitalRead (X_MAX ) == 0 ) {
    // azzera l'asse sul display
 
  step(STEP_PIN, 7168, DIR_PIN, false, velocita); //esegue 10000 INDIETRO
  attachInterrupt(digitalPinToInterrupt(X_MIN), err_finecorsa, LOW); // riabilita interrupt basso
  lcd.setCursor(0,0); // vai alla posizione 0,0 dell'LCD... casomai cambia riga e colonna se serve
lcd.print("ERRORE ASSE");
 
  }

//LAVORO
 
  if (digitalRead (pulsante_start ) == 0 ) {
   delay (1000);
    // esegue ciclo
  digitalWrite(Relay, LOW );
delay(2000);
    step(STEP_PIN, 1133, DIR_PIN, true, 360); //esegue 1133 passi in avanti veloce
    step(STEP_PIN, 303, DIR_PIN, true, 1250); //esegue 303 passi in avanti lento
    step(STEP_PIN, 1436, DIR_PIN, false, velocita); //esegue 1436 passi in avanti
    delayMicroseconds(5);
   
    digitalWrite(ENABLE_PIN, HIGH ); //abilita ENABLE_PIN

digitalWrite(Relay, HIGH );
 delay(500);
 
   lcd.setCursor(0,0); // vai alla posizione 0,0 dell'LCD...
lcd.print("CICLO ESEGUITO");
delay(600);
  }
}

void step(int stepperPin, int steps, int dirPin, boolean dir, int velocita) {
  digitalWrite(dirPin, dir);
  delay(10);
  for (int i = 0; i < steps; i++) {
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(velocita);
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(velocita);
     digitalWrite(ENABLE_PIN, LOW );  //abilita ENABLE_PIN

 distanza = i / 4 * 1.5 ; // calcoli la distanza in mm
lcd.setCursor(9,1); // vai alla posizione 9,1 dell'LCD...
lcd.print(distanza);
}
}

void pos_iniziale() {
  detachInterrupt(digitalPinToInterrupt(X_MIN)); // disabilita Interrupt basso
  digitalWrite(DIR_PIN, 0 );
  delay(10);
  while (digitalRead (X_MIN) == HIGH ) { // gira indietro fino al fine corsa
    digitalWrite(STEP_PIN, HIGH);

 delayMicroseconds(ritardo_veloce);
    digitalWrite(STEP_PIN, LOW);
   
 delayMicroseconds(ritardo_veloce);
     digitalWrite(ENABLE_PIN, LOW ); //abilita ENABLE_PIN
  }
}
void err_finecorsa() {
 



}   




io dovrei cambiare i valori di numero di step e velocita' a queste tre righe


[code step(STEP_PIN, 1133, DIR_PIN, true, 360); //esegue 1133 passi in avanti veloce
    step(STEP_PIN, 303, DIR_PIN, true, 1250); //esegue 303 passi in avanti lento
    step(STEP_PIN, 1436, DIR_PIN, false, velocita); //esegue 1436 passi in avanti
][/code]


nid69ita

#223
May 31, 2016, 06:33 pm Last Edit: May 31, 2016, 07:41 pm by nid69ita
@carlotta, purtroppo non conosco la libreria.
Mi pare tu hai nel codice di adesso una serie di pulsanti che dovrebbero fare quello invece vorresti fare con il menu ?
Io ti consiglio di NON partire a spron battuto cercando di mettere il tuo programma con il menu tutto in uno sketch.
Prova a fare un altro sketch con LCD e un menu base preso dai demo della libreria.
Secondo me vedendo un esempio semplice con dei menu dei demo riesci poi a capire dove mettere i pezzi di codice che ti servono per variare velocità e step

P.S. i menu devono essere pilotati da almeno 4 bottoni, mi pare (su,giu,dx,sx). Li hai previsti ?
my name is IGOR, not AIGOR

testato

una donna sul forum ?
scusa l'OT ma e' una rarita'.
Benvenuta  :D

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Go Up