creare menu semplice con arduino 2560

Buongiorno ho un arduino 2560 con lcd 20x4 vorrei creare un menu semplice per spegnere dei dispositivi appena clicco sulla voce su lcd e uno per darli un timeout, e altri bottoni per fare su e giu + e - lo sketch che sto faccendo è questo:

#include <MenuBackend.h>
#include <Time.h>
#include <DS3232RTC.h>
#include <PCF8574_HD44780_I2C.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <RTClib.h>
#include <SPI.h>
#include <Ethernet.h>
 
//menu 

int Menu=0; // VARIABILE CHE IDENTIFICA IL MENU' IN USO

const int buttonPingiu = 22; // pin Giu
const int buttonPinsu= 24; // pin Su
const int buttonPinok = 26; // pin OK
const int buttonPinPiu = 30; // pin modifica più
const int buttonPinMeno = 32; // pin modifica meno

int lastButtonokState = LOW;   // the previous reading from the Enter input pin
int lastButtongiuState = LOW;   // the previous reading from the Esc input pin
int lastButtonsuState = LOW;   // the previous reading from the Left input pin
int lastButtonPiuState = LOW;   // 
int lastButtonMenoState = LOW;   //

long lastEnterDebounceTime = 0;  // the last time the output pin was toggled
long lastEscDebounceTime = 0;  // the last time the output pin was toggled
long lastLeftDebounceTime = 0;  // the last time the output pin was toggled
long lastRightDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 500;    // the debounce time

voidsetup ()
//BUTTON
  pinMode(buttonPinMeno, INPUT);
  pinMode(buttonPinPiu, INPUT);
  pinMode(buttonPinok, INPUT);
  pinMode(buttonPinsu, INPUT);

ora come posso andare avanti da qui per farli fare ciò che voglio? non trovi nessun tutorial su come installare e usare libreria beckend grazie in anticipo

nessuno può aiutarmi?

Ciao, come prima cosa per iniziare con l'lcd ti suggerisco di guardare la libreria menwiz GitHub - brunialti/MENWIZ: ARDUINO LCD menu library: short user code to manage complex menu structures che magari può fare al caso tuo, inizi così a implementare un minimo il tuo programma, poi in caso di dubbi puopi tornare a chiedere, io personalmente ho lavorato pochissimo con l'lcd e non potrei esserti tanta d'aiuto ma altri con una base un po' più articolata di quanto tu abbia già implementato (in fondo hai solo buttato giù un impostazione del setup e nulla di più) potrebbero aiutarti meglio

ciao questa libreria che hai postato a cosa serve?

Il link almeno l'hai cliccato? Nella descrizione del sito c'è tutto, chiaro che occorre perderci un po' di tempo a provare ecc. sempre nel solito link se tu scaricassi e provassi al libreria troveresti anche un paio d'esempi alquanto istruttivi...

Buona sera ho scaricato la libreria e mi da questo errore con il primo sketch :

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

PCF8574_HD44780_I2C lcd(0x3F, 20, 4);

// 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


int  list,sp=110;

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

  Serial.begin(9600);    
  tree.begin(PCF8574_HD44780_I2C lcd(0x3F, 20, 4);); //declare lcd object and screen size to menwiz lib

 lcd.init();           // LCD Initialization
  lcd.backlight( );      // Backlight ON
  lcd.clear();          // Clear the display
  
  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");
  }

Arduino:1.6.5 (Windows 7), Scheda:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

quick_tour.ino: In function 'void setup()':
quick_tour:30: error: expected primary-expression before 'lcd'
quick_tour:30: error: expected primary-expression before ')' token
quick_tour:30: error: expected ';' before ')' token
expected primary-expression before 'lcd'

Questo report potrebbe essere più ricco
di informazioni con
"Mostra un output dettagliato durante la compilazione"
abilitato in "File > Impostazioni"

Ciao,
la linea di codice

tree.begin(PCF8574_HD44780_I2C lcd(0x3F, 20, 4););

è sbagliata, devi togliere la parentesi e il punto e virgola finale.
Se posso permettermi di darti un suggerimento, prima di procedere con un progetto così complesso ti consiglio di studiarti un minimo di sintacci c e partire con progetti più sempici che ti daranno le basi per poter proseguire, stando così le cose non credo che tu possa arrivare a creare ciò che desideri.

ciao questo è propio l'esempio della libreria che gia non va e se non va questo non ries
co propio a studiare, ho sistemato la riga e mi dice questo: Arduino:1.6.5 (Windows 7), Scheda:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

quick_tour.ino: In function 'void setup()':
quick_tour:31: error: expected primary-expression before 'lcd'
In file included from quick_tour.ino:6:0:
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master/MENWIZ.h: At global scope:
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master/MENWIZ.h:47:22: warning: 'EEPROM' defined but not used [-Wunused-variable]
extern EEPROMClass EEPROM;
^
expected primary-expression before 'lcd'

Questo report potrebbe essere più ricco
di informazioni con
"Mostra un output dettagliato durante la compilazione"
abilitato in "File > Impostazioni"

Serial.begin(9600);    
  tree.begin(PCF8574_HD44780_I2C lcd(0x3F, 20, 4); //declare lcd object and screen size to menwiz lib

Gli esempi di quella libreria sono qui:

E quell'errore che tu dici NON c'e'. Non dire cose campate in aria. Brunialti ha fatto una ottima libreria che funziona e gli esempi funzionano. Se tu lo modifichi a casaccio logico che trovi errori ma nel TUO codice e NON in quegli esempi.

Questa è la riga di dichiarazione e poi come si usa, dell'esempio:

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
...
tree.begin(&lcd,20,4); //declare lcd object and screen size to menwiz lib

Questa la tua dichiarazione:

PCF8574_HD44780_I2C lcd(0x3F, 20, 4);

e quindi la usi così com'è nell'originale, non inventarti cose:

tree.begin(&lcd,20,4);

Quello che hai scritto tu è una cavolata enorme, ridichiari e fai tutto nelle parentesi, una schifezza!!

tree.begin(PCF8574_HD44780_I2C lcd(0x3F, 20, 4));

Comunque NON è detto che poi compila. La libreria che usa quella MENWIZ è la LiquidCrystal_I2C e non quella che vuoi usare tu.
Forse, ma non posso provare, puoi fare un cast, quindi scrivere così:

tree.begin( (LiquidCrystal_I2C *) &lcd,20,4);

Ma il mio consiglio di provare quel modulo I2C e lcd che hai con la ottima libreria LiquidCrystal_I2C che trovi qui:
https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home
Eventualmente se nel forum vedi l'utente @Testato, nella sua firma in calce c'e' la libreria modificata che funziona ancora meglio. Tutti usano la LiquidCrystal_I2C.

infatti leggevo in giro che la libreria Pcf non funziona, qualcuno sa aiutarmi a come farla funzionare con MENwiz?

Ora ho capito che quella libreria che usi è quella modificata da Testato.
Prova a chiedere a lui: [Libreria] PCF8574+HD44780 LCD I2C Library - Software - Arduino Forum
Mi pare che anche lui usa MENWIZ quindi forse c'e' un modo di usarla con la LiquidCrystal_I2C che lui ha modificato. :slight_smile:

sto provando ad usare la libreria newliquidcristal.h

ho modificato lo sketch in questo modo ma mi da una serie di errori :

//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(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address


int  list,sp=110;

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

  Serial.begin(9600);    
  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");
  }

marco3020:
sto provando ad usare la libreria newliquidcristal.h
ho modificato lo sketch in questo modo ma mi da una serie di errori

Quali ? Postali

Arduino:1.6.5 (Windows 7), Scheda:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

In file included from quick_tour.ino:6:0:
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master/MENWIZ.h:47:22: warning: 'EEPROM' defined but not used [-Wunused-variable]
extern EEPROMClass EEPROM;
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp: In constructor '_menu::_menu()':
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:73:9: warning: converting to non-pointer type 'byte {aka unsigned char}' from NULL [-Wconversion-null]
parent=NULL;
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp: In member function '_menu* menwiz::addMenu(int, _menu*, const __FlashStringHelper*)':
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:31:34: warning: large integer implicitly truncated to unsigned type [-Woverflow]
#define ERROR(a) MW_error=a
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:109:11: note: in expansion of macro 'ERROR'
ERROR(900);
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp: In member function '_option* _menu::addItem(int, const __FlashStringHelper*)':
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:31:34: warning: large integer implicitly truncated to unsigned type [-Woverflow]
#define ERROR(a) MW_error=a
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:136:7: note: in expansion of macro 'ERROR'
ERROR(900);
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp: In member function 'void _menu::addVar(uint8_t, int*)':
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:31:34: warning: large integer implicitly truncated to unsigned type [-Woverflow]
#define ERROR(a) MW_error=a
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:163:51: note: in expansion of macro 'ERROR'
var=(_var*)malloc(sizeof(_var));if(var==NULL){ERROR(900); return;}
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp: In member function 'void _menu::addVar(uint8_t, int*, int, int, int)':
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:31:34: warning: large integer implicitly truncated to unsigned type [-Woverflow]
#define ERROR(a) MW_error=a
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:182:51: note: in expansion of macro 'ERROR'
var=(_var*)malloc(sizeof(_var));if(var==NULL){ERROR(900); return;}
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:31:34: warning: large integer implicitly truncated to unsigned type [-Woverflow]
#define ERROR(a) MW_error=a
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:185:86: note: in expansion of macro 'ERROR'
var->lower=malloc(sizeof(int)); if(var->lower!=NULL) VINT(var->lower)=low; else {ERROR(900); return;}
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:31:34: warning: large integer implicitly truncated to unsigned type [-Woverflow]
#define ERROR(a) MW_error=a
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:186:85: note: in expansion of macro 'ERROR'
var->upper=malloc(sizeof(int)); if(var->upper!=NULL) VINT(var->upper)=up; else {ERROR(900); return;}
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:31:34: warning: large integer implicitly truncated to unsigned type [-Woverflow]
#define ERROR(a) MW_error=a
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:187:85: note: in expansion of macro 'ERROR'
var->incr=malloc(sizeof(int)); if(var->incr!=NULL) VINT(var->incr)=incr; else {ERROR(900); return;}
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:31:34: warning: large integer implicitly truncated to unsigned type [-Woverflow]
#define ERROR(a) MW_error=a
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:188:93: note: in expansion of macro 'ERROR'
var->old=malloc(sizeof(int)); if(var->old!=NULL) VINT(var->old)=VINT(var->val); else {ERROR(900); return;}
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp: In member function 'void _menu::addVar(uint8_t, float*, float, float, float)':
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:31:34: warning: large integer implicitly truncated to unsigned type [-Woverflow]
#define ERROR(a) MW_error=a
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:201:51: note: in expansion of macro 'ERROR'
var=(_var*)malloc(sizeof(_var));if(var==NULL){ERROR(900); return;}
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:31:34: warning: large integer implicitly truncated to unsigned type [-Woverflow]
#define ERROR(a) MW_error=a
^
C:\Users\marco\Documents\Arduino\libraries\MENWIZ-master\MENWIZ.cpp:204:90: note: in expansion of macro 'ERROR'
var->lower=malloc(sizeof(float)); if(var->lower!=NULL) VFLOAT(var->lower)=low; else {ERROR(900); return;}

^

niente non ci riesco propro a farla andare sta libreria

Leggi qui: MENWIZ: yet another character lcd menu wizard library - #535 by czangus - Displays - Arduino Forum

Dice di usare la beta con IDE ultimo.

Per usare la libreria PCF prova come ho scritto sopra con un cast:
La libreria che usa quella MENWIZ è la LiquidCrystal_I2C e non quella che vuoi usare tu.
Forse, ma non posso provare, puoi fare un cast, quindi scrivere così:

tree.begin( (LiquidCrystal_I2C *) &lcd,20,4);

ho,letto ma non trovo nulla

Non trovi nulla de chè ? :o

non trovo niente che mi dica come far funzionare la libreria pcf con la libreria Manwiz

E il pezzo di codice che ti ho scritto sopra ?
Leggi solo le prime 2 righe e poi il resto non lo leggi più ? :o