Arduino nano every errore compilazione.

Buongiorno, sto eseguendo il progetto di una sveglia come avevo detto IN QUESTO POST. Mi sto barcamenando più o meno egregiamente e sono arrivato ad avere un progetto funzionante, il tutto eseguendo dei test con la UNO R3.
A questo punto ho voluto sostituire la scheda e ho utilizzato una Arduino nano every!!!
Ho avuto fin da subito problemi di compilazione che con la UNO invece non ho, mi sembra di capire che ci sia qualche incompatibilità con le librerie.
Quindi ho iniziato ad effettuare compilazioni con i vari esempi delle librerie che sto utilizzando, ma mi sono bloccato quasi subito, perché già all'esempio "HELLO WORLD" della libreria "LiquidCrystal.h" mi compare questo errore:

Arduino:1.8.12 (Mac OS X), Scheda:"Arduino Nano Every, None (ATMEGA4809)"

In file included from /Users/emiliano/Documents/Arduino/libraries/LiquidCrystal/src/LiquidCrystal.cpp:1:0:
/Users/emiliano/Documents/Arduino/libraries/LiquidCrystal/src/LiquidCrystal.h:45:36: error: expected class-name before '{' token
 class LiquidCrystal : public Print {
                                    ^
/Users/emiliano/Documents/Arduino/libraries/LiquidCrystal/src/LiquidCrystal.h:86:9: error: 'Print' has not been declared
   using Print::write;
         ^~~~~
Più di una libreria trovata per "LiquidCrystal.h"
Usata: /Users/emiliano/Documents/Arduino/libraries/LiquidCrystal
Non usata: /private/var/folders/8d/5l3ty3_1403b11s584psp4hw0000gn/T/AppTranslocation/4FE1316E-64D8-4095-BD83-95A3286509BB/d/Arduino.app/Contents/Java/libraries/LiquidCrystal
exit status 1
Errore durante la compilazione per la scheda Arduino Nano Every.

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"

Ora posso capire che magari qualche libreria non sia aggiornata per questo tipo di scheda, come ad esempio la "I2C_graphical_LCD_display.h" (che tra l'altro l'esempio me lo compila senza problemi). Ma trovare problemi con la "LiquidCrystal.h", che se non sbaglio è già all'intero del pacchetto Arduino mi è sembrato alquanto strano.

Ribadisco che ovviamente lo stesso esempio compilato con la UNO non mi genera errori, qualcuno mi sa dare delle informazioni in merito?

Grazie mille

Meluino

Veramente ti sta dicendo che trova più di una libreria con lo stesso nome ...
... leggi bene i messaggi di errore ed elimina le librerie duplicate!

Guglielmo

Scusate se rispondo solo ora ma ho avuto problemi con la linea e di questi periodi essere senza internet vuol dire essere fuori dal mondo.

Digressione a parte...

...sì, avevo fatto caso alla doppia libreria e ne avevo eliminata una, ma ricevevo sempre un errore di compilazione.
Ho eseguito ancora un po' di prove, ma il dubbio di avere il sistema "non a posto" ormai non me lo toglievo più. Così, appena sono arrivato al lavoro ho preso un PC sul quale Arduino non è mai stato installato, così da trovarmi una "tela bianca" senza impurità. Ho scaricato l'IDE, ho inserito la scheda nano every, ho compilato e questo è il messaggio d'errore:

Arduino:1.8.12 (Windows 7), Scheda:"Arduino Nano Every, ATMEGA328"

In file included from C:\Program Files\Arduino\libraries\LiquidCrystal\src\LiquidCrystal.cpp:1:0:

C:\Program Files\Arduino\libraries\LiquidCrystal\src\LiquidCrystal.h:45:36: error: expected class-name before '{' token

 class LiquidCrystal : public Print {

                                    ^

C:\Program Files\Arduino\libraries\LiquidCrystal\src\LiquidCrystal.h:86:9: error: 'Print' has not been declared

   using Print::write;

         ^~~~~

exit status 1
Errore durante la compilazione per la scheda Arduino Nano Every.

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"

Tra l'altro riflettevo sul problema del conflitto di librerie del primo post, ma se ci sono due librerie e queste creano un errore, questo errore non si dovrebbe presentare anche con tutte le altre schede?
Comunque anche quest'ultimo errore si presenta solo se compilo con nano every, con UNO, con MEGA, con la vecchia NANO, non si presenta nessun problema.

Meluino

P.S. nell'errore è selezionata la MCU ATMEGA328, ma lo stesso accade con la MEGA 4809.

Ho fatto un'ulteriore prova, ho scaricato la versione portable di arduino su un terzo PC, anche questo non ha mai visto arduino in vita sua. Ho scaricato da gestione schede la nano every e stesso problema. Quindi io presumo che, a meno che non mi sfugga qualcosa, questo problema lo abbiano tutti, mi potete confermare se compilando Helloworld di liquidcrystal.h anche a voi non compila con nano every?!

Tra l'altro, nel pacchetto con nano every, viene scaricata la scheda uno wifi rev2 e anche questa presenta il medesimo problema.

Meluino.

Come ho spiegato molte volte in altri thread, ATmega4809 è una cosa ben diversa dagli altri vecchi ATmega e ...
... NON è affatto detto che le librerie che andavano bene con i vecchi AVR vadano bene anche con il ATmega4809.

Purtroppo hanno sbagliato a dargli il nome di Arduino Nano Every, perché, del vecchio Arduino Nano, salvo forse le dimensioni, NON ha altro in comune ... ::slight_smile:

Guglielmo

Quindi, scusa, per evitare fraintendimenti, mi stai confermando un'incongruenza tra questa libreria e la scheda (o meglio la sua MCU) nano every?

Meluino

meluino:
Quindi, scusa, per evitare fraintendimenti, mi stai confermando ...

... NO, ti sto dicendo che c'è questa possibilità ... come per tantissime altre librerie (es. tutte quelle che fanno accesso diretto ai registri) che, o vengono modificate per la specifica MCU o non possono funzionare.

Guglielmo

No, no, no, no, attenzione, secondo me qui c'è bisogno di un dinstinguo!

Capisco benissimo che ci possano essere delle librerie che non vengano compilate, questo succede in modo "fisiologico" anche con la stessa UNO con l'evolversi dell'IDE.
In questo caso non vedo troppe alternative se non:
-attendere che qualcuno aggiorni le librerie;
-modificare la libreria a proprio piacimento (ovviamente chi ne è capace);
-attaccarsi al tram e trovare altre soluzioni.

Nel caso specifico sempre secondo me, la cosa è un po' più complessa.
Qui si sta parlando di una board UFFICIALE ARDUINO (non di un clone di un clone di un clone) che (forse) risulta essere incompatibile con una libreria che fa parte del pacchetto base dell'IDE UFFICIALE ARDUINO (che a percezione è anche una delle librerie più "gettonate"):

Io da utente reputo che SE in una discussione si evincesse una situazione del genere si debba informare il team di sviluppo.

gpb01:
Purtroppo hanno sbagliato a dargli il nome di Arduino Nano Every, perché, del vecchio Arduino Nano, salvo forse le dimensioni, NON ha altro in comune ... ::slight_smile:

Riallacciandomi a questo pensiero, mi viene da dire che non è l'unico errore che è stato commesso, sulla pagina ufficiale riportano, cito testualmente:

"The Arduino Nano Every is an evolution of the traditional Arduino Nano, but featuring a lot more powerful processor, the ATMega4809. This will allow you making larger programs than with the Arduino Uno (it has 50% more program memory), and with a lot more variables (the RAM is 200% bigger)."

Queste due comparazioni, in particolare modo con la UNO, inducono il lettore e potenziale acquirente a pensare ad una completa compatibilità! Cosa che evidentemente non è possibile...

Quindi vorrei sapere se effettivamente, nel caso specifico, anche altri utenti riportano problemi con la libreria LiquidCrystal e la scheda Arduino nano every, in modo da non avere dubbi sull'effettiva incompatibilità, così da poterlo segnalare al team di sviluppo con abbondante certezza.

Guglielmo, immagino che tu abbia provato a compilare l'esempio HelloWorld, è stato restituito anche a te un messaggio d'errore?

Grazie

Meluino

meluino:
Guglielmo, immagino che tu abbia provato a compilare l'esempio HelloWorld, è stato restituito anche a te un messaggio d'errore?

NO, non ho avuto tempo ... appena ho un momento lo faccio ...

Guglielmo

gpb01:
NO, non ho avuto tempo ... appena ho un momento lo faccio ...

Sì sì, ci mancherebbe, non volevo sembrare insistente...
...tanto ho già capito che il progetto sveglia lo devio su una mini pro della sparkfun che ho acquistato tempo fa e che mi sono sempre domandato dove avrei potuto usarla...perché, così a percezione, credo che le problematiche legate alla nano every siano per me insormontabili.

Allo stesso tempo però non vorrei far cadere il discorso, perché se veramente c'è un'incompatibilità con i liquidi crystal, la cosa è abbastanza "grave". Dai gli lcd sono tra i primi esperimenti che ti fanno fare e una scheda non è compatibile? Assurdo...

L'unica cosa che mi lascia dubbioso è il fatto che mi sembra moooooolto strano che non se ne sia mai accorto nessuno, per questo ho ancora qualche riserva...

Meluino

SI, confermo che c'è un problema ... facilmente risolvibile :slight_smile: , ma che comunque deve essere segnalato e deve essere messo a posto dal team di sviluppo.

Intanto ti dico cosa fare ...
... occorre copiare la libreria LiquidCrystal (tutta la cartella) tra le librerie del package relativo alla Nano Every, che è il package "megaavr" ... megaavr -> 1.8.6 -> libraries -> LiquidCrystal

Fatto questo occorre aprire il file che si trova nella sottocartella src e che si chiama LiquidCrystal.h e, in testa, modificarlo così aggiungendo una riga (#include <api/ArduinoAPI.h>):

#ifndef LiquidCrystal_h
#define LiquidCrystal_h

#include <api/ArduinoAPI.h>
#include <inttypes.h>
#include "Print.h"

// commands
#define LCD_CLEARDISPLAY 0x01
...
...

... vedrai che il problema scompare.

Attenzione, questa cosa va fatta nella libreria che si è copiata nel core megaavr, NON nella libreria nella sua posizione originale (che è quella dei normali AVR).

Guglielmo

gpb01:
... vedrai che il problema scompare.

Beh Guglielmo, non poteva essere diversamente, basta seguire alla lettera le tue istruzioni e sono in una botte di ferro!

Innanzitutto GRAZIE!

E' mio impegno rivolgere al team di sviluppo questo problema, a meno che non lo abbia già fatto tu attraverso i tuoi canali diretti...

Grazie ancora

Meluino

meluino:
E' mio impegno rivolgere al team di sviluppo questo problema, a meno che non lo abbia già fatto tu attraverso i tuoi canali diretti...

... fallo, fallo che io non so quando avrò il tempo :slight_smile:

Guglielmo

Mi sono recato nella sezione in cui si può segnalare un bug nel software di Arduino e giustamente la guida "dichiara": "prima di segnalare un malfunzionamento verifica che non sia già noto".

Io non ho una buona padronanza dell'inglese, ma secondo voi QUESTA discussione non è pertinete al problema che ho segnalato?

Meluino

SI, esatto ! ... quindi baco già noto ... ;D

Guglielmo

P.S.: ... comunque di banale soluzione :wink:

gpb01:
P.S.: ... comunque di banale soluzione :wink:

:cold_sweat: :cold_sweat: :cold_sweat: ehm...certo, volevo quasi dirlo subito :grin: .

Grazie ancora per l'aiuto

Meluino