LCD KeypadShield v2.0

Salve a tutti, sto imparando moooolto lentamente a programmare Arduino, ho solo una leggera infarinatura di C++ e rudimenti di programmazione, quindi faccio un po' fatica, ma il dediderio e' proprio quello di imparare.
Ho ordinato un po' di shield e sensori vari, finalmente sono arrivati e come da prassi non riesco ad utilizzare tutto.
Sono nel panico con l' LCD da oggetto, un simpaticissimo prodotto, ma cio' che dovrebbe essere banale per me e' diventato uno scoglio.
Ho piazzato la shield su Arduino, ho scaricato la libreria e copiata in "libraries" come da procedura, eppure non vanno neanche gli esempi, il compilatore da' errore.
Per quello che sono le mie competenze, potrei sbagliare in qualunque dei passaggi, quindi cerco di esporli tutti dettagliatamente :smiley:

La libreria e': LCD4Bit_mod, l'ho copiata in \arduino-1.0\libraries

Carico un esempio, sempre contenuto nella cartella, e nel compilarlo, il risultato e':

\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:29:57: error: WConstants.h: No such file or directory
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp: In member function 'void LCD4Bit_mod::pulseEnablePin()':
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:58: error: 'LOW' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:58: error: 'digitalWrite' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:59: error: 'delayMicroseconds' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:61: error: 'HIGH' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:64: error: 'delay' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp: In member function 'void LCD4Bit_mod::pushNibble(int)':
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:73: error: 'digitalWrite' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp: In member function 'void LCD4Bit_mod::commandWriteNibble(int)':
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:99: error: 'LOW' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:99: error: 'digitalWrite' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp: In member function 'void LCD4Bit_mod::commandWrite(int)':
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:106: error: 'LOW' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:106: error: 'digitalWrite' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp: In member function 'void LCD4Bit_mod::print(int)':
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:118: error: 'HIGH' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:118: error: 'digitalWrite' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:119: error: 'LOW' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp: In member function 'void LCD4Bit_mod::clear()':
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:139: error: 'delay' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp: In member function 'void LCD4Bit_mod::init()':
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:146: error: 'OUTPUT' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:146: error: 'pinMode' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:154: error: 'delay' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:160: error: 'delayMicroseconds' was not declared in this scope
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp: In member function 'void LCD4Bit_mod::leftScroll(int, int)':
\arduino-1.0\libraries\LCD4Bit_mod\LCD4Bit_mod.cpp:225: error: 'delay' was not declared in this scope

Ora, se ci ho capito almeno un minimo... parrebbe assente un'altra libreria, ovvero: WConstants.h
Se e' corretto, perche' manca? Non dovrebbe far parte della libreria dell'LCD che ho gia' scaricato?
E soprattutto, come risolvo?

Ok... ci sono arrivato, non e' compatibile con l'ultima versione software di Arduino, ho installato la 18 e funzia.

Posso risolvere in qualche modo utilizzando anche la versione aggiornata?

Devi modificare la libreria:

http://arduino.cc/en/Main/ReleaseNotes:

  • The WProgram.h file, which provides declarations for the Arduino API,
    has been renamed to Arduino.h. To create a library that will work in
    both Arduino 0022 and Arduino 1.0, you can use an #ifdef that checks
    for the ARDUINO constant, which was 22 and is now 100. For example:

#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif

Ciao Uwe

Grande! Grazie!

Pero' si fa fatica a stare dietro a tutti ste postille eh!
Ad esempio, tu come hai reperito quest'informazione? Come cavolo facevo a saperlo? :~

Il link denominato "release notes" si trova sopra i link per scaricare gli IDE Arduino sulla pagina http://arduino.cc/en/Main/Software menu "Download".

Ciao Uwe

Puoi dire di più (magari un link) di questo shield che stai usando?

Credo sia questo Michele: http://www.nuelectronics.com/estore/index.php?main_page=project_lcd (v1.1) o Arduino_LCD_KeyPad_Shield__SKU__DFR0009_-DFRobot

L'ho visto usare anche in altri progetti.

GS88:
Credo sia questo Michele: http://www.nuelectronics.com/estore/index.php?main_page=project_lcd (v1.1) o Arduino_LCD_KeyPad_Shield__SKU__DFR0009_-DFRobot

L'ho visto usare anche in altri progetti.

Grazie :slight_smile: leggendo keypad ho pensato alla tastiera tipo telefonico, ero incuriosito visto che ho lavorato recentemente ad un PCB con display 4x20 e keypad esadecimale. Ciao

Esatto, e' quello il display, 4 tastini, interessanti se si vuole sviluppare un display con qualche comando rapido.

Grazie uwefed, certo pero' che ricordasi tutte le note di versione, ehehe, che comunque vabbe' che le ho lette al volo, ma non e' che io quasi del tutto ignorante possa capire che in quella versione non mi va una particolare libreria.
Ma ce la posso fare XD

Dai almeno ho voi come riferimento!!

Questo shield funziona con la normale libreria liquidcrystal, basta solo adattare la definizione dei pin usati (ricopiando quelli definiti nella lib. 4bitmod), ed estrapolare la gestione dei tasti (che sono gestiti dal pin analog0).