Errore librerie Progetto STAZIONE METEO

Buongiorno a tutti voi del forum. :slight_smile:

Apro questo nuovo topic perchè non riesco proprio a venire a capo di questo problema.

Premetto il fatto che sono un novizio per quanto riguarda i progetti di Arduino e volevo riuscire a replicare questo progetto che ho trovato ben descritto a questo link:

62. Arduino nRF24l01 comunicazione dht11 e display - PROGETTI ARDUINO

Ho acquistato tutti i componenti necessari e installato sul mio PC (Windows10) la versione Arduino IDE 1.8.5 (la versione .exe e non quella del microsoft store).

Ora, seguendo passo passo la guida del progetto al link soprastante, prima di tutto ho importato nell'IDE le seguenti librerie (scaricate in formato .zip dalla guida di cui sopra):

  • nrf24l01
  • rf24
  • dht11
  • liquidcrystal_i2c
  • wire

Poi, ho compilato e caricato correttamente il 1° sketch sull'Arduino TX (quello trasmittente), mentre per quanto riguarda il 2° sketch per l'Arduino RX (ricevente) riscontro degli errori nella compilazione.

Ecco l'errore che ho in output:

Arduino:1.8.5 (Windows 10), Scheda:"Arduino/Genuino Uno"
C:\Users\Matteo\Desktop\arduino_nrf24l01_display_dht11_rx\arduino_nrf24l01_display_dht11_rx.ino:3:17: fatal error: LCD.h: No such file or directory
#include <LCD.h>

  • ^*
    compilation terminated.
    Più di una libreria trovata per "Wire.h"
    Usata: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire
    Non usata: C:\Users\Matteo\Documents\Arduino\libraries\Wire
    exit status 1
    Errore durante la compilazione per la scheda Arduino/Genuino Uno.
    Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
    "Mostra un output dettagliato durante la compilazione"
    in "File -> Impostazioni"

Sapreste gentilmente aiutarmi a sbrogliare questo errore?

Molte grazie a tutti per la disponibilità!

Matteo

#include <LCD.h>

hai controllato se è davvero installata questa libreria?

Patrick_M:
#include <LCD.h>

hai controllato se è davvero installata questa libreria?

Penso che sia proprio dovuto a questa libreria l'errore.
Eppure ho seguito le istruzioni passo passo di quel link del progetto e non capisco perchè dia quell'errore.

Eventualmente si potrebbe installare manualmente quella libreria specifica? se si, dove si trova?

Molte grazie

NON installate a mano le librerie, perché, dato che spesso sbagliate, poi escono furi i casini, vedi la doppia "Wire":

tivi92:
Più di una libreria trovata per "Wire.h"
Usata: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire
Non usata: C:\Users\Matteo\Documents\Arduino\libraries\Wire

Usare SEMPRE il library manager presente nel IDE; ormai tutte le librerie più utilizate sono presenti li e costantemente aggiornate.

Quindi, dai una pulita a ciò che hai installato "a mano", elimina i duplicati e installa solo le librerie richieste tramite library manager del IDE.

Guglielmo

gpb01:
NON installate a mano le librerie, perché, dato che spesso sbagliate, poi escono furi i casini, vedi la doppia "Wire":
Usare SEMPRE il library manager presente nel IDE; ormai tutte le librerie più utilizate sono presenti li e costantemente aggiornate.

Quindi, dai una pulita a ciò che hai installato "a mano", elimina i duplicati e installa solo le librerie richieste tramite library manager del IDE.

Guglielmo

Grazie Gugliemo,

Chiedo scusa ma sono novizio di Arduino quindi ho seguito semplicemente la guida presente a questo link del progetto che volevo replicare nel quale mi viene detto di effettuare l'installazione manuale:

Detto questo, ho seguito il tuo suggerimento e pulito le vecchie librerie installate.
Ho installato attraverso il gestore dell'IDE le librerie indicato nella guida, ma come output ottengo sempre questo errore:

Arduino:1.8.5 (Windows 10), Scheda:"Arduino/Genuino Uno"

C:\Users\Matteo\Desktop\sketch_RX\arduino_nrf24l01_display_dht11_rx\arduino_nrf24l01_display_dht11_rx.ino:3:17: fatal error: LCD.h: No such file or directory

#include <LCD.h>

^

compilation terminated.

exit status 1
Errore durante la compilazione per la scheda Arduino/Genuino Uno.

Come posso procedere?

Molte grazie per la disponibilità

Manca una libreria per il display LCD e ... il compilatore te lo dice chiaramente ... hai installato la "LiquidCrystal" o la "LiquidCrystal_I2C" a seconda se hai un normale display o uno collegato in I2C ? ? ?

Ah ... prova ad eliminare del tutto la riga con #include <LCD.h> ...
... NON credo serva ... visto che usi la "Liquid_Cristal" ... ::slight_smile:

Magari metti anche qui il codice che stai usando (... mi raccomando, in conformità al regolamento, punto 7, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra) ... così gli diamo anche un'occhiata.

Guglielmo

ho dato un'occhiata al link.... nel codice del ricevitore cancella o commenta con // la riga
#include lcd.h

dovrebbe funzionare :slight_smile:

gpb01:
Manca una libreria per il display LCD e ... il compilatore te lo dice chiaramente ... hai installato la "LiquidCrystal" o la "LiquidCrystal_I2C" a seconda se hai un normale display o uno collegato in I2C ? ? ?

Ah ... prova ad eliminare del tutto la riga con #include <LCD.h> ...
... NON credo serva ... visto che usi la "Liquid_Cristal" ... ::slight_smile:

Magari metti anche qui il codice che stai usando (... mi raccomando, in conformità al regolamento, punto 7, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra) ... così gli diamo anche un'occhiata.

Guglielmo

Grazie,

Allora il codice che sto utilizzando (che è quello che ho preso dalla guida del progetto di cui si trova il link nei post precedenti) è il seguente:

#include <Wire.h>
#include <DHT11.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity

float temperature[2];

RF24 radio(9, 10);
const uint64_t pipe = 0xE8E8F0F0E1LL;

void setup(void) {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1, pipe);
radio.startListening();
lcd.begin(16, 2);
lcd.backlight();
lcd.clear();
lcd.print("Umid & temp");
delay(1000);
lcd.clear();
lcd.print("Start.....");
delay(1000);
}

void loop(void)
{
if ( radio.available() )
{
bool done = false;
while (!done)
{
done = radio.read(temperature, sizeof(temperature));
lcd.clear();
delay(500);
lcd.setCursor(0, 0);
lcd.print("Temp");
lcd.setCursor(0, 1);
lcd.print("Umid");
lcd.setCursor(9, 0);
lcd.print(temperature[0]);
lcd.print(" C");
lcd.setCursor(9, 1);
lcd.print(temperature[1]);
lcd.print(" %");
delay(5000);
}
}

}

Ho seguito il suggerimento di cancellare la riga di #include <LCD.h> ma ottengo il seguente errore:

Arduino:1.8.5 (Windows 10), Scheda:"Arduino/Genuino Uno"

arduino_nrf24l01_display_dht11_rx:8: error: 'POSITIVE' was not declared in this scope

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

^

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

gpb01:
Manca una libreria per il display LCD e ... il compilatore te lo dice chiaramente ... hai installato la "LiquidCrystal" o la "LiquidCrystal_I2C" a seconda se hai un normale display o uno collegato in I2C ? ? ?

Ah ... prova ad eliminare del tutto la riga con #include <LCD.h> ...
... NON credo serva ... visto che usi la "Liquid_Cristal" ... ::slight_smile:

Magari metti anche qui il codice che stai usando (... mi raccomando, in conformità al regolamento, punto 7, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra) ... così gli diamo anche un'occhiata.

Guglielmo

Se non vado errato la LiquidCrystal è già presente di default nella cartella:
C:\Program Files (x86)\Arduino\libraries.
Quella che ho installato attraverso il gestore delle librerie è la LiquidCrystal_I2C che trovo nella cartella:
C:\Users\Matteo\Documents\Arduino\libraries\LiquidCrystal_I2C

Quell esempio fa proprio schifo ... sempre detto di evitare la "monnezza" che c'è su internet ... quella, se ben ricordo, è la sintassi di una vecchia libreria ...

Tu QUALE hai esattamente installato dal "Library Manager" (ce ne sono varie) ? ... Sei andato nel IDE a guardare gli esempi d'uso e vedere la corretta sintassi per dichiarare l'LCD?

Guglielmo

gpb01:
Tu QUALE hai esattamente installato dal "Library Manager" (ce ne sono varie) ? ... Sei andato nel IDE a guardare gli esempi d'uso e vedere la corretta sintassi per dichiarare l'LCD?

Guglielmo

Ho installato la LiquidCrystal_I2C by Frank de Brabander, versione 1.1.2 che se non vado errato è la stessa libreria che mi veniva fatta installare anche manualmente con la cartella .zip.

Quindi hai installato QUESTA che si trova su GitHub ...

Se vai a vedere il file .h hai la sintassi delle chiamate e capisci perché ti da errore a quella riga. Il costruttore vuole:

LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows);

... quindi, l'indirizzo I2C, in numero di colonne e il numero di righe, e null'altro!

Guglielmo

... il metodo begin() invece va bene, difatti la sua sintassi è:

begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS );

... ovvero, vuole, di nuovo, il numero di righe, il numero di colonne e, opzionalmente la struttura del carattere (cosa che tu hai omesso e che quindi viene presa per default).

Volendo (e forse sarebbe anche meglio), credo che protresti sostituire la riga con la più semplice: lcd.init(); che vedo viene usata negli esempi :wink:

Guglielmo

Si esattamente, è proprio quella la libreria installata ed è quella che avevo installato stamane manualmente (utilizzando il file .zip nelna guida di progetto).

Grazie delle informazioni, sei gentilissimo :slight_smile:
Quindi, come si potrebbe modificare il codice per far si che tutto funzioni?

Il display che ho acquistato è questo.
Prima immagine inserita

Il "Come" lo capisci da solo da quello che ti ho scritto ...
.. rileggi bene i miei post #11 e #12 e poi ... metti qui quello che hai ricavato dalla lettura :slight_smile:

Guglielmo

Edit: E studia gli esempi della libreria ... da cui impari come usare le cose !!!

gpb01:
Il "Come" lo capisci da solo da quello che ti ho scritto ...
.. rileggi bene i miei post #11 e #12 e poi ... metti qui quello che hai ricavato dalla lettura :slight_smile:

Guglielmo

Edit: E studia gli esempi della libreria ... da cui impari come usare le cose !!!

Hahaha non ci possono credere, COMPILA SENZA ERRORI! :slight_smile:
Gentilissimo Guglielmo grazie davvero!

Ora ti chiederei gentilmente un ultima cosa.
Il software attuale (che compila correttamente) è il seguente.

#include <Wire.h>
#include <DHT11.h>
//#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
LiquidCrystal_I2C lcd(0x27, 16, 2);

float temperature[2];

RF24 radio(9, 10);
const uint64_t pipe = 0xE8E8F0F0E1LL;

void setup(void) {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1, pipe);
radio.startListening();
lcd.init();
//lcd.begin(16, 2);
lcd.backlight();
lcd.clear();
lcd.print("Umid & temp");
delay(1000);
lcd.clear();
lcd.print("Start.....");
delay(1000);
}

void loop(void)
{
if ( radio.available() )
{
bool done = false;
while (!done)
{
done = radio.read(temperature, sizeof(temperature));
lcd.clear();
delay(500);
lcd.setCursor(0, 0);
lcd.print("Temp");
lcd.setCursor(0, 1);
lcd.print("Umid");
lcd.setCursor(9, 0);
lcd.print(temperature[0]);
lcd.print(" C");
lcd.setCursor(9, 1);
lcd.print(temperature[1]);
lcd.print(" %");
delay(5000);
}
}

}

Una volta caricato poi nell'Arduino ricevente, si dovrebbe comportare correttamente con le modifiche effettuate?

Grazie mille per la disponibilità.

... se compila, almeno sintatticamente NON ci sono errori, che poi funzioni o meno, non lo so, non ho mai provato quel codice. Caricarlo non costa nulla ... quindi ... provare e verificare :smiley:

Una cosa ... per migiorare la leggibilità dei tuoi codici, usa la funzione del IDE "Tools -> Autoformat" ... ti sistema il sorgente con le giuste indentature :wink:

Guglielmo

gpb01:
... se compila, almeno sintatticamente NON ci sono errori, che poi funzioni o meno, non lo so, non ho mai provato quel codice. Caricarlo non costa nulla ... quindi ... provare e verificare :smiley:

Una cosa ... per migiorare la leggibilità dei tuoi codici, usa la funzione del IDE "Tools -> Autoformat" ... ti sistema il sorgente con le giuste indentature :wink:

Guglielmo

L'ho caricato correttamente su Arduino UNO.
Domani provo ad effettuare tutte le connessioni necessarie tra i vari dispositivi e poi spero che funzioni.

Grazie infinite per la disponibilità!

Buona serata,

Matteo

Comunque quella con POSITIVE dovrebbe essere la sintassi della libreria LCD di F. Malpartida.