Pages: 1 ... 8 9 [10] 11 12 ... 15   Go Down
Author Topic: MENWIZ: una libreria per creare menu su LCD  (Read 24832 times)
0 Members and 1 Guest are viewing this topic.
rome
Offline Offline
Sr. Member
****
Karma: 17
Posts: 483
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ci provo... visto che è la libreria LiquidCrystal...
prova a sostituire
LiquidCrystal_I2C lcd(0x20);  // Set the LCD I2C address

con
LiquidCrystal_I2C lcd(0x20 , BACKLIGHT_PIN, POSITIVE) oppure
LiquidCrystal_I2C lcd(0x20, BACKLIGHT_PIN, NEGATIVE)

.... fammi sapere :-)
« Last Edit: November 05, 2013, 03:36:02 pm by brunialti » Logged

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

No, purtroppo non funziona. Uguale a prima    smiley-confuse

Però mi viene un serio dubbio: seguendo sempre lo schema preso dal sito postato sopra, al PIN 13 di Arduino non arriva niente. Potrebbe essere questo il problema?
« Last Edit: October 16, 2013, 01:40:51 pm by pesie » Logged

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

Come suggerito dal moderatore ho aperto un nuovo topic sulla sezione generale:
http://forum.arduino.cc//index.php?topic=193882.0
Logged

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

Analizzando la parte dove vengono analizzati i pin di arduino collegati ai pulsanti:
Code:
// DEFINE ARDUINO PINS FOR THE NAVIGATION BUTTONS
#define UP_BUTTON_PIN       9
#define DOWN_BUTTON_PIN     10
#define LEFT_BUTTON_PIN     7
#define RIGHT_BUTTON_PIN    8
#define CONFIRM_BUTTON_PIN  12
#define ESCAPE_BUTTON_PIN   11

è possibile battezzare invece dei pin 9, 10, 7, 8, 12, 11, degli ingressi di un PCF8574 tipo P0, P1, P2 ....?
Ad esempio, in questo codice:
Code:
//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>
#include <IOexp.h>


#define IO_ADDR (0x21)  //Definisco l'indirizzo del pcf8574 dei bottoni
IOexp myIOexpander(IO_ADDR);

// 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(0x20);

int  list,sp=110;

void setup(){
  _menu *r,*s1,*s2;
 
  Wire.begin(); // join i2c bus (address optional for master)
 
  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();
 
  int data;
  bool bool1, bool2, bool3, bool4, bool5, bool6; // the bool vars bool1 and bool2 are to store the status of the Inputs we wish to read.
  Serial.print("teste ! ");
  bool1 = myIOexpander.read(P0);
  bool2 = myIOexpander.read(P1);
  bool3 = myIOexpander.read(P2);
  bool4 = myIOexpander.read(P3);
  bool5 = myIOexpander.read(P4);
  bool6 = myIOexpander.read(P5);
  Serial.print(bool1);
  Serial.print(" ");
  Serial.print(bool2);
  Serial.print(" ");
  Serial.print(bool3);
  Serial.print(" ");
  Serial.print(bool4);
  Serial.print(" ");
  Serial.print(bool5);
  Serial.print(" ");
  Serial.print(bool6);
  Serial.print(" \n ");
  delay(500);
 
  }

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

ho unito l'esempio della libreria MENWIZ con l'esempio della libreria IOexp e quello che ottengo è di vedere il menu sul display collegato al primo PCF8574, e di poter cambiare lo stato degli ingressi (da alto a basso) di un secondo PCF8574 e visualizzarli sul monitor seriale.
Considerando il secondo codice che ho postato, vorrei capire se si può fare una cosa di questo tipo con la giusta sintassi:
Code:
#define UP_BOTTON_PIN       myIOexpander.read(P0)
#define DOWN_BOTTON_PIN     myIOexpander.read(P1)
#define LEFT_BOTTON_PIN     myIOexpander.read(P2)
#define RIGHT_BOTTON_PIN    myIOexpander.read(P3)
#define CONFIRM_BOTTON_PIN  myIOexpander.read(P4)
#define ESCAPE_BOTTON_PIN   myIOexpander.read(P5)
Logged

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

Nessuno ha qualche idea su come poter sfruttare un pcf8574 per i pulsanti?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22817
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

E' un integrato che si pilota via I2C (quindi libreria Wire) e su cui trovi su internet migliaia di esempi  smiley-wink
Uno a caso:
http://www.gioblu.com/tutorials/comunicazione/109-keypad-i2c
Logged


ivrea (to)
Online Online
Faraday Member
**
Karma: 87
Posts: 4963
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
#define UP_BOTTON_PIN       myIOexpander.read(P0)

Non ho la certezza matematica, ma non credo. Nel codice della libreria penso ci siano delle istruzioni del tipo digitalRead(UP_BUTTON_PIN);
Pensa se in quella istruzione sostituisci la parola con quella tua funzione!!!

Secondo me hai 2 alternative, la prima è modificarti la libreria e sostituire la gestione dei normali pulsanti con i tuoi comandi per il PCF. La seconda e forse più semplice è utilizzare un comando della libreria che permette di sostituire la funzione che gestisce i comandi/pulsanti con una funzione dove tu gestisci i comandi. Ad esempio io l'ho fatto per gestire i menu tramite telecomando IR.
La funzione è addUsrNav()   se guardi sul manualetto pdf della libreria ci sono le spiegazioni.
« Last Edit: October 24, 2013, 08:19:51 am by nid69ita » Logged

my name is IGOR, not AIGOR

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

Grazie a tutti.
In questi giorni sono stato impegnato in un altro progettino ma appena riesco riprendo a mano anche questo.
Mi sa che mi studierò la funzione addUsrNav().
Logged

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

Ciao a tutti,
torno alla carica con la soluzione per abbinare alla libreria menwiz l'utilizzo di pulsanti gestiti da un pcf8574.
Ho modificato il codice per cercare di utilizzare il metodo addUsrNav:
Code:
//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>
#include <IOexp.h>


#define IO_ADDR (0x21)  //Definisco l'indirizzo del pcf8574 dei bottoni
IOexp myIOexpander(IO_ADDR);

menwiz tree;
// create lcd obj using LiquidCrystal lib
LiquidCrystal_I2C lcd(0x20);

int  list,sp=110;

void setup(){
  _menu *r,*s1,*s2;
 
  Wire.begin(); // join i2c bus (address optional for master)
 
  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);
       tree.addUsrNav(tasti,6); 
  }

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

void myfunc(){
  Serial.println("ACTION FIRED");
  }
 
int tasti(){
  if(myIOexpander.read(P0)==1){
    return MW_BTU;}
  else if (myIOexpander.read(P1)==1){
    return MW_BTD;}
  else if (myIOexpander.read(P2)==1){
    return MW_BTL;}
  else if (myIOexpander.read(P3)==1){
    return MW_BTR;}
  else if (myIOexpander.read(P4)==1){
    return MW_BTE;}
  else if (myIOexpander.read(P5)==1){
    return MW_BTC;}
  else
    return MW_BTNULL;
  }

e già ho un problema di compilazione. Probabilmente ho interpretato male qualcosa. Ecco l'errore:
menwizmenu.ino: In function 'void setup()':
menwizmenu:51: error: no matching function for call to 'menwiz::addUsrNav(int (&)(), int)'
C:\Program Files (x86)\Arduino\libraries\MENWIZ/MENWIZ.h:180: note: candidates are: void menwiz::addUsrNav(int (*)())

Mi potete aiutare?
Grazie
Logged

rome
Offline Offline
Sr. Member
****
Karma: 17
Posts: 483
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

vai su MENWIZ.h e guarda come è dichiarata la funzione. Ad occhio sembra che tu usi la call inteface di MENWIZ 1.2 e successivi, ma abbia il .h precedente (addUsrScreen nell vecchie versioni aveva un solo parametro).
Logged

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

Ho scaricato il pacchetto trovato a questo indirizzo:
https://github.com/brunialti/MENWIZ

E' questo il punto a cui ti riferisci?
Code:
class menwiz{
public:
           menwiz();
  void     begin(void *,int, int);
  void     addSplash(char *,int);
  void     addUsrScreen(void (*f)(), unsigned long);
  void     addUsrNav(int (*f)(), int);
  void     setBehaviour(MW_FLAGS,boolean);
  _menu*   addMenu(int, _menu *, MW_LABEL);
  void     draw();
  void     drawUsrScreen(char *);       //draw user screen(s)
  int      getErrorMessage(boolean); //if arg=true, err message is printed to the default Serial terminal, otherwise the function returns error code only
  int      freeRam();
Logged

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

Update:
ho riscaricato la libreria e l'ho copiata nuovamente nell'apposita cartella e adesso non ho più problemi di compilazione. Si vede che avevo incasinato io qualcosa...  smiley-red
Grazie per l'aiuto.
Appena riesco carico il programma su Arduino e vedo cosa succede.
Logged

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

Ciao a tutti, sono nuovo nel mondo arduino e sto cercando di creare un'interfaccia per controllare delle pompe e delle elettrovalvole in intervalli di tempo definiti. L'interfaccia mi serve proprio per impostare questi intervalli di tempo, ovvero ho delle semplici variabili che se modificate mi cambiano le tempistiche del dispositivo. Quello che vorrei fare è dare all'utente del dispositivo la possibilità di impostare numericamente i valori delle variabili temporali senza ogni volta andare a modificare le variabili nello sketch e caricarlo su arduino tramite usb. Da quello che ho letto ancora non ho capito se questa operazione è eseguibile tramite libreria menwiz….Spero di essere stato più o meno chiaro, qualcuno può darmi una mano? Grazie mille a tutti
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
ho problemi a compilare la libreria menwiz con ide 1.5.5, qualcuno è riuscito a risolvere il problema?
Scaricando il pacchetto completo di menwiz ci sono anche le librerie per il display, gia quello non va, questo l'ho baypassato ma mi ha dato un errore nel file fastio non conosceva la variabile _BV tolta anche quella, ma adesso il risultato è:

Code:
Arduino:1.5.5-r2 (Windows 7), Scheda:"Arduino Due (Programming Port)"

C:\Users\Documents\Arduino\libraries\menwiz\MENWIZ.cpp: In member function 'void menwiz::drawMenu(_menu*)':
C:\Users\Documents\Arduino\libraries\menwiz\MENWIZ.cpp:376: error: 'itoa' was not declared in this scope
C:\Users\Documents\Arduino\libraries\menwiz\MENWIZ.cpp:409: error: 'itoa' was not declared in this scope
C:\Users\Documents\Arduino\libraries\menwiz\MENWIZ.cpp:410: error: 'itoa' was not declared in this scope
C:\Users\Documents\Arduino\libraries\menwiz\MENWIZ.cpp:418: error: 'itoa' was not declared in this scope
C:\Users\Documents\Arduino\libraries\menwiz\MENWIZ.cpp:419: error: 'itoa' was not declared in this scope
C:\Users\Documents\Arduino\libraries\menwiz\MENWIZ.cpp:423: error: 'dtostrf' was not declared in this scope
C:\Users\Documents\Arduino\libraries\menwiz\MENWIZ.cpp:424: error: 'dtostrf' was not declared in this scope
C:\Users\Documents\Arduino\libraries\menwiz\MENWIZ.cpp:428: error: 'itoa' was not declared in this scope
C:\Users\Documents\Arduino\libraries\menwiz\MENWIZ.cpp:429: error: 'itoa' was not declared in this scope
C:\Users\Documents\Arduino\libraries\menwiz\MENWIZ.cpp: In member function 'void menwiz::drawVar(_menu*)':
C:\Users\Documents\Arduino\libraries\menwiz\MENWIZ.cpp:512: error: 'itoa' was not declared in this scope
C:\Users\Documents\Arduino\libraries\menwiz\MENWIZ.cpp:520: error: 'itoa' was not declared in this scope
C:\Users\Documents\Arduino\libraries\menwiz\MENWIZ.cpp:534: error: 'dtostrf' was not declared in this scope

  "
Logged

rome
Offline Offline
Sr. Member
****
Karma: 17
Posts: 483
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Con la 1.5.5. e la 1.5.6r2 non ci sono problemi, nel senso che io compilo senza problemi...
Gli errori sembrano dovuti al fatto che non trova le funzioni che sono contenuti nella libreria di base del C K&R stdio.
Hai per caso toccato qualcosa negli include della libreria?
Logged

Pages: 1 ... 8 9 [10] 11 12 ... 15   Go Up
Jump to: