MENWIZ: una libreria per creare menu su LCD

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?

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

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

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

Salve a tutti,

volevo chiedere se è possibile creare le label dei menu in modo dimanico. Sto cercando di fare una cosa del genere:

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:

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ì :

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

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

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

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

#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

@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 ?

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

mmmmmmmm..... e strano?

dai ragazzi qualcuno puo' darmi una mano? :cry:

Non posso che quotare quanto già suggeritoti da nid69

buongiorno ragazzi non riesco a superare questo scoglio

Documents\Arduino\libraries\MENWIZ\MENWIZ.cpp:720:12: warning: case label value exceeds maximum value for type [enabled by default]

case 900: Serial.println(F("E900-Out of memory"));break;

^
AppData\Local\Temp\arduino_modified_sketch_246494\Test_all_var_types.ino:7:0:
Documents\Arduino\libraries\MENWIZ/MENWIZ.h:32:17: fatal error: LCD.h: No such file or directory

#include <LCD.h>

exit status 1
Errore durante la compilazione per la scheda Arduino/Genuino Mega or Mega 2560.

@nid69 utilizzo un keypad con 6 tasti collegati in analogico display 16x2

Quale LCD, questo

si esatto... collegato ai pin 46, 48, 56, 60, 61, 62 della ramp 1.4 i tasti al pin 13 che corrisponde ad un pin analogico

ti rispondo nel tuo topic, non inquiniamo questo

http://forum.arduino.cc/index.php?topic=403080.0

Ciao a tutti, vorrei realizzare un menù sul LCD che controlla una centralina per un miscelatore che sto realizzando.
Ho trovato questa libreria ma non riesco a far funzionare nemmeno un esempio...

Il problema è proprio alla base il collegamento con LCD.
Ho aggiunto le librerie extra che richiede, quelle che si trovano nello zip REQUIRED_LIBRARIES.zip ma anche con quelle nulla da fare.

Prima avevo un errore sul file I2CIO.cpp che cercava #include <../Wire/Wire.h> corretto in wire.h compila correttamente ma se carico su Arduino LCD inizia a flashare e non scrive nulla.

LCD che vorrei usare è questo LCD 20x4 con controller PCF8574AT

Questo il codice che riesco a compilare ma che manda in crisi l'LCD....

#include <FastIO.h>
#include <I2CIO.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal_SR.h>
#include <LiquidCrystal_SR2W.h>
#include <LiquidCrystal_SR3W.h>

#define BACKLIGHT_PIN     13

LiquidCrystal_I2C lcd(0x3F);  // Set the LCD I2C address

//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE);  // Set the LCD I2C address


// Creat a set of new characters
const uint8_t charBitmap[][8] = {
   { 0xc, 0x12, 0x12, 0xc, 0, 0, 0, 0 },
   { 0x6, 0x9, 0x9, 0x6, 0, 0, 0, 0 },
   { 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0, 0x0 },
   { 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0, 0x0 },
   { 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0x0 },
   { 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0x0 },
   { 0x0, 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0x0 },
   { 0x0, 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0x0 }
   
};

void setup()
{
   int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0]));

  // Switch on the backlight
  pinMode ( BACKLIGHT_PIN, OUTPUT );
  digitalWrite ( BACKLIGHT_PIN, HIGH );
  
  lcd.begin(20,4);               // initialize the lcd 

   for ( int i = 0; i < charBitmapSize; i++ )
   {
      lcd.createChar ( i, (uint8_t *)charBitmap[i] );
   }

  lcd.home ();                   // go home
  lcd.print("Hello, ARDUINO ");  
  lcd.setCursor ( 0, 1 );        // go to the next line
  lcd.print (" FORUM - fm   ");
  delay ( 1000 );
}

void loop()
{
   lcd.home ();
   // Do a little animation by writing to the same location
   for ( int i = 0; i < 2; i++ )
   {
      for ( int j = 0; j < 16; j++ )
      {
         lcd.print (char(random(7)));
      }
      lcd.setCursor ( 0, 1 );
   }
   delay (200);
}

Qualcuno ha qualche idee su come posso risolvere???

Grazieeeeee

Salve a tutti,
lavorando ad un progetto alquanto complesso, sto cercando di usare MENWIZ per gestire i menù di un LCD I²C. Scaricata l'ultima versione, nella guida PDF contenuta nello ZIP ho letto:

The following libraries have to be included in the sketch:
· “new” LiquidCrystal Library by Francisco Malpartida. This library supports I2c, 4, 8 wires and other
lcd devices. the library is a drop replacement for the standard lib LiquidCrystal e LiquidCrystal_I2C.
The latest version can be found at https://bitbucket.org/fmalpartida/newliquidcrystal/
wiki/Home.
· Buttons compact library by Franky (see also “1.4 How to save memory space.” chapter)
· EEPROM library (one of Arduino the builtin libraries); (see also “1.4 How to save memory space”
chapter )
The first two libraries are provided inside the MENWIZ zip file and must be installed before the use of
MENWIZ.

Ho quindi decompresso REQUIRED_LIBRARIES.zip, prendendone le librerie e salvandole nella directory delle librerie assieme a MENWIZ. Siccome la “new” LiquidCrystal Library di Francisco Malpartida richiede (vedi sito libreria e guida PDF) che sia rimossa la libreria LiquidCrystal preinstallata (conflitto con i nomi dei file), ho fatto ciò. Non volendo cambiare il metodo di input (6 pulsanti con INPUT_PULLUP di default), ho aperto direttamente l'esempio quick_tour.ino; nella compilazione di quest'ultimo ho ricevuto un certo errore, descritto con precisione alla presente pagina: #include<..wire/wire.h> error using i2c lcd display. Sistemato l'errore come descitto da PaulS

Look at the I2CIO.cpp file. If it really says

#include <../Wire/Wire.h>

change it to

#include <Wire.h>

ho riavviato l'Arduino IDE 1.6.12 e ricompilato l'esempio. Questa volta l'errore non si è più presentato, anche se ne è giunto un altro, questa volta interno a MENWIZ, che purtroppo mi vedo costretto a non scrivere per non superare il limite di caratteri posto dal Forum. Se poi avete il coraggio e la voglia di leggere i logs, potete trovare 21 pagine di errori a catena QUI (documento Google). L'errore rende quindi la libreria inutilizzabile su nessuna board.

Codice:

//The full code is in library example file Quick_tour.ino
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <buttons.h>
#include <MENWIZ.h>
#include <EEPROM.h>

// DEFINE ARDUINO PINS FOR THE NAVIGATION BUTTONS
#define UP_BOTTON_PIN       9
#define DOWN_BOTTON_PIN     10
#define LEFT_BOTTON_PIN     7 
#define RIGHT_BOTTON_PIN    8
#define CONFIRM_BOTTON_PIN  12
#define ESCAPE_BOTTON_PIN   11

menwiz tree;
// create lcd obj using LiquidCrystal lib
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int  list,sp=110;

void setup(){
  _menu *r,*s1,*s2;

  Serial.begin(19200);    
  tree.begin(&lcd,20,4); //declare lcd object and screen size to menwiz lib

  r=tree.addMenu(MW_ROOT,NULL,F("Root"));
    s1=tree.addMenu(MW_SUBMENU,r, F("Node1"));
      s2=tree.addMenu(MW_VAR,s1, F("Node3"));
        s2->addVar(MW_LIST,&list);
        s2->addItem(MW_LIST, F("Option1"));
        s2->addItem(MW_LIST, F("Option2"));
        s2->addItem(MW_LIST, F("Option3"));
      s2=tree.addMenu(MW_VAR,s1, F("Node4"));
        s2->addVar(MW_AUTO_INT,&sp,0,120,10);  
    s1=tree.addMenu(MW_VAR,r, F("Node2"));
      s1->addVar(MW_ACTION,myfunc);
       tree.navButtons(UP_BOTTON_PIN,DOWN_BOTTON_PIN,LEFT_BOTTON_PIN,RIGHT_BOTTON_PIN,ESCAPE_BOTTON_PIN,CONFIRM_BOTTON_PIN);
  }

void loop(){
  tree.draw(); 
  }

void myfunc(){
  Serial.println("ACTION FIRED");
  }

Detto questo, ho aggirato il problema usando la versione 1.3.2 beta di MENWIZ.
Ho cancellato le vecchie REQUIRED_LIBRARIES per sostituirle con quelle della beta, ho aggiornato MENWIZ alla versione 1.3.2, sistemato nuovamente l'errore della libreria LCD (Wire.h) e aperto l'IDE. Ho copiato ed incollato l'esempio dal PDF della guida (guida per la beta), compilato e...

Uso la libreria Wire alla versione 1.0 nella cartella: C:\Users\Marco\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.14\libraries\Wire 
Uso la libreria LiquidCrystal nella cartella: C:\Users\Marco\Desktop\Arduino\Arduino IDE\libraries\LiquidCrystal (legacy)
Uso la libreria Buttons nella cartella: C:\Users\Marco\Desktop\Arduino\Arduino IDE\libraries\Buttons (legacy)
Uso la libreria MENWIZ nella cartella: C:\Users\Marco\Desktop\Arduino\Arduino IDE\libraries\MENWIZ (legacy)
Uso la libreria EEPROM alla versione 2.0 nella cartella: C:\Users\Marco\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.14\libraries\EEPROM 
exit status 1
'class menwiz' has no member named 'navButtons'

Errore alla riga dell'esempio

tree.navButtons(UP_BOTTON_PIN, DOWN_BOTTON_PIN, LEFT_BOTTON_PIN, RIGHT_BOTTON_PIN, ESCAPE_BOTTON_PIN, CONFIRM_BOTTON_PIN);

Come è possibile? In MENWIZ.cpp (v. 1.3.2) esiste veramente navButtons! Perfino nella guida (non quella vecchia, ovviamente) si fa riferimento a questa funzione!
Ringrazio in anticipo, nella speranza che qualcuno sia in grado di aiutarmi nella compilazione dell'esempio (beta o meno).
SquareBoot

Se guardi dentro il file .h, vedrai che quel comando è opzionale:
#ifdef BUTTON_SUPPORT

infatti all'inizio del file .h si legge:
//#define BUTTON_SUPPORT //comment if you do'nt want to use the Button methods!