Domenica 27 ottobre 2013 ho incontrato in aula alcuni appassionati arduino che sono intervenuti al Corso Base Arduino in aula non ufficiale.
Innanzitutto ringrazio tutti i presenti per la bellissima giornata e la partecipazione alla giornata, sicuramente il clima propositivo e la voglia di imparare cose nuove hanno contribuito alla buona riuscita del corso e alla crescita personale di ciascuno con arduino.
Domenica abbiamo affrontato insieme alcuni esercizi pratici di scrittura del codice e testato il corretto funzionamento non solo degli sketch ma anche della logica con cui affrontiamo un progetto arduino.
Errori arduino IDE
Ogni sketch scritto durante il corso lo abbiamo trasferito su arduino e testato, questo mi ha permesso di osservare alcuni errori arduino ide ricorrenti che possono capitare quando scrivi il tuo sketch e lo compili per trasferirelo su Arduino. Non ho mai dedicato un articolo ad alcuni degli errori arduino ide “classici” in cui puoi incorrere quando scrivi i tuoi sketch.
Sono errori con cui tutti ci siamo scontrati, sopratutto all’inizio, e che ancora oggi anche a me capitano quando scrivo uno sketch.
Ho deciso di farne una piccola panoramica e di tenerla aggiornata ogni volta che mi capita un nuovo errore.
Come riconosco un errore
La prima cosa che devi sapere sugli errori è che l’IDE arduino ti segnala gli errori di sintassi e di comunicazione con la scheda, questo significa che se commetti errori di logica: vuoi accendere un led collegato al pin 13 e scrivi digitalWrite( 9,HIGH ); sintatticamente è corretto ma logicamente non accenderai MAI il led collegato al pin 13, al massimo quello collegato al pin 9.
La seconda informazione che ti potrà risultare utile è che gli errori arduino ide sono segnalati in arancione nella parte inferiore dell’ide arduino.
Se il tuo sketch non presenta errori e non ci sono difficoltà di trasferimento del codice compilato sulla scheda arduino avrai una situzione simile alla seguente:
in caso di errori la parte inferiore dell’ide apparirà in questo modo:
La terza cosa importante è che l’ide arduino cerca di darti tutte le informazioni necessarie a risolvere l’errore sintattico e questo a volte comporta un’eccessiva mole di informazioni nella parte inferiore dell’ide ma quello che ti interessa spesso è relativo alle prime 2/3 righe di errore.
“Classici” errori arduino ide
Ho ripreso 4 errori arduino ide in cui potresti trovarti scrivendo sketch per il i tuoi progetti ed ho riportato possibili soluzioni.
Errore Uno
Il primo errore che tutti facciamo e che sicuramente ti sarà capitato è:
Blink:11: error: expected unqualified-id before numeric constant
Blink:13: error: expected ‘,’ or ‘;’ before ‘void’
Se lo leggi con attenzione comprendi subito che si tratta di un errore di sintassi.
La seconda riga di errore dice che era attesa una “,” o un “;” prima della dichiarazione ‘void’.
Ricevi anche un’altra informazione: Blink:11 la linea 11 presenta l’errore e alla linea 13 si manifesta l’effetto descritto sopra.
CAUSA: controlla la linea 11, precedente a quella in cui hai dichiarato il void setup() , manca proprio un punto e virgola “;”.
RISOLUZIONE: aggiungi il punto e virgola alla linea 11 ed esegui la verifica.
Errore Due
Un altro degli errori arduino ide frequente è il seguente:
Blink.ino: In function ‘void setup()’:
Blink:19: error: a function-definition is not allowed here before ‘{‘ token
Blink:24: error: expected `}’ at end of input
Anche in questo caso la terza riga ti dice che alla linea 24 dello sketch si aspettava una parentesi graffa chiusa “}” mentre le linee precedenti evidenziamo che alla linea 19 dello sketch è stat aperta una parentesi graffa che non ha una corrispondente parentesi di chiusura.
CAUSA: osserva la linea 24 e vedrai che manca la parentesi graffa a chiudere la dichiarazione della funzione setup().
RISOLUZIONE: aggiungi la parentesi graffa alla linea 24 e riesegui la verifica.
Errore Tre
Uno degli errori arduino ide meno comuni ma che quando si verifica non è semplice da comprendere è il seguente:
Blink.ino: In function ‘void loop()’:
Blink:20: error: invalid conversion from ‘const char*’ to ‘uint8_t’
Blink:20: error: initializing argument 2 of ‘void digitalWrite(uint8_t, uint8_t)’
Il significato dell’errore lo trovi alla seconda linea dell’errore in cui ti dice che alla linea 20 c’è un errore di conversione da una const char* a uint8_t e alla linea successiva continua la segnalazione sulla riga 20 in quanto il secondo argomento del comando digitalWrite() deve essere di tipo uint8_t;
CAUSA: osserva la linea 20, nota che il secondo parametro passato al comando digitalWrite è “A”, la lettera A è tra virgolette, questa sintassi rende il parametro una stringa.
Notice
In arduino puoi definire le stringhe inserendole tra le doppie virgolette.
Il comando digitalWrite() accetta due parametri di tipo integer ( u_int8_t ) per cui un parametro di tipo String genera l’errore.
RISOLUZIONE: Sostituisci
Errore Quattro
Differente è il caso degli errori legati all’avrdude come il seguente:
avrdude: stk500_recv(): programmer is not responding
In questo caso non è lo sketch a presentare un errore ma la comunicazione con arduino che non è avvenuta in modo corretto impedendo all’IDE di trasferire il software.
CAUSA: le cause possono essere:
- mancanza di collegamento del cavo USB
- arduino in uno stato non pronto a ricevere il trasferimento
- ide non in grado di utilizzare la porta di comunicazione corretta
- porta seriale selezionata non corretta
- tipo di scheda arduino selezionata errata
- disconnessione da parte del computer dell’arduino
solo per citarne alcuni, in ogni caso la causa comune è dovuta al collegamento tra arduino e il computer.
RISOLUZIONE: la soluzione più semplice da applicare è quella di disconnettere e riconnettere arduino al computer, successivamente controlla che la scheda selezionata sia ancora quella corretta, se usi Arduino Uno controlla che sia selezionato questo tipo di controllore. Verifica che il computer riconosca arduino come connesso ad una delle porte seriali e che tale porta sia anche quella selezionata per il trasferimento dello sketch.
Ora sai come affrontare i principali errori arduino ide che possono capitarti quando inizi a lavorare con arduino e non solo agli inizi.
Buon progetto !!!
32 commenti
Vai al modulo dei commenti
Ciao Mauro, un grazie ancora a te per la tua disponibilità e professionalità.
Autore
Complimenti sempre ben accetti Salvatore.
Non vedo l’ora di pubblicare il tuo prossimo progetto Arduino.
Mauro
Ci vorrà un bel pò, ma appena pronto di manderò tutta la documentazione per la sua pubblicazione.
Salvatore
Autore
Grazie Salvatore.
Mauro
ciao Mauro, sono appena entrato nel mondo dell’ arduino, nella compilazione del IDE mi da un errore con scritto
#include expects “filename” or mi sapresti dare qualche dritta, grazie anticipatamente
Autore
Ciao Alfre,
se vuoi imparare di più su Arduino ti consiglio il mio corso Arduino online gratuito.
In merito al tuo errore si tratta della mancanza della libreria richiesta dallo sketch. Dovrai caricarla come spiegato in molti miei articoli del corso e del blog
Hola Mauro.
Me ha parecido muy interesante tu articulo del cual he tomado buena nota.
Llevo poco tiempo en el tema de Arduino y me ha surgido un problema.Quiza puedas ayudarme a solucionar.
En el Arduino Starter kit hay un ejercicio que es la bola de cristal,yo modifico algunos parametros para que aleatoriamente solo me de tres respuestas,”si”,”no”,”quizas”.
Creia que seria aleatoria la respuesta cada vez que pulso el boton para que responda por medio de la lcd.Pero siempre responde en el mismo orden. L a primera respuesta siempre es “si” la segunda es “quizas” y la tercera “no”.No importa si reinicio o borro el programa y lo cargo de nuevo.siempre repite la misma frecuencia.quisiera hacerlo aleatorio y ni se me ocurre que cambiar.Ya modifique varios parametros pero no funcionan.
Alguna idea?
Gracia.
Autore
Hola Gracia
lamentablemente no tengo el starter kit y no conozco los ejercicios.
Usted puede tratar de pedir información sobre el foro Arduino o blog 🙂
Mauro
Ciao Mauro,
articolo utilissimo, complimenti!
Sono nuovo con Arduino e ci sto sbattendo un po’. L’errore che ho incontrato è l’Errore Tre del tipo ‘from int to void’.
Quello che mi chiedo è dove posso andare a vedere quali sono i parametri che una determinata funzione (che è importata da una libreria quindi non predefinita in Arduino) prende in ingresso? E void cosa significa, cosa ci si aspetta ci sia in ingresso alla funz?
Michael
Autore
Ciao Michael,
ogni sviluppatore rilascia della documentazione con le librerie e di certo in quella trovi le risposte sui parametri accettati.
In caso la libreria che stai utilizzando non disponda di documentazione ed esempi puoi leggerla come file di testo e verificare da solo i metodi disponibili.
Questo discorso vale anche per le funzioni dichiarate void.
Mauro
Buonasera, io ho comprato il kitstart di arduino, con il manuale d’istruzione.
il problema è questo..
sto seguendo il manuale di istruzioni, ma quando clicco sulla spunta per fare la verifica, mi da errore in parte della sintassi.
1) sulla serigrafia della scheda arduino c’è scritto -3, mentre sul manuale c’è scritto 3.
quindi io ho messo pinMode(-3, OUTPUT);
2) ma anche seguendo il manuale, con tutto il codice, alla fine quando vado a verificare mi da errore di sintassi.
quindi non riesco a capire se son io che non capisco, oppure il manuale che è stato scritto male.
(Tra l’altro, ho provato a caricare dei file esempio, in alcuni la sintassi va bene, in altri no…)
Quindi come risolvo la questione?
Grazie,
Michael
Autore
Ciao Michael,
il segno che vedi serigrafato su arduino in corrispondenza dei pin 3,5,6,9,10 ed 11 è una tilde ( ~ ) non un meno ( – ).
I pin arduino sono sempre positivi quindi 3 è corretto come sul manuale puoi seguirlo con fiducia.
Ciao Mauro, arduino mi rileva un errore sempre alla stessa riga, qualsiasi cosa ci scriva, ma l’errore a me sembra non esserci. Ed oltre a quello anche altri, ma non riesco a trovare una soluzione. Non è che potresti dare un’occhiata allo sketch? Se non qui anche in privato.
Grazie.
Autore
Ciao Samuele, siete in troppi perché io possa verificare gli sketch di tutti quelli c’è me lo chiedono. Sono costretto a limitare questa analisi si soli progetti a pagamento per i quali scrivo lo sketch da zero sulle esigenze del committente.
Solitamente gli errori sono chiari e indicano abbastanza precisamente il problema di sintassi.
Puoi scrivermi l’errore che ti viene rilevato se non é tra quelli descritti in questo articolo o tra i commenti a cui ho già risposto.
Nonostante aver fatto varie prove, si ripresenta l’errore 4… cosa faccio? Grazie
Autore
Ciao Antonio,
l’errore potrebbe essere un malfunzionamento della tua scheda, verifica con chi ti ha venduto l’arduino.
ciao non so se riceverai la mia email ho costruito una lavagnetta con un progetto che si chiama i board bot ho comprato la scheda arduino leonardo e ho una scheda wifi sempre loro ma sembra tuo funzionate pero quando attacco il pc alla scheda la luce gialla lampeggia in continuo so che deve diventare statica dopo qualche secondo
dalle istruzioni mi dicono che manca il file i boardbot ino che serve a impostare anche il wi fi sono codici che hanno loro tuttavia quando lo inserisco mi da errore spero potrai aiutarmi sto impazzendo per capire cosa e che non va se hai bisogno di altre informazioni su errori ecc ti preferirei postare uno screenshot per capire se hai modo di riceverlo qui
Autore
Ciao Angelo,
in primo luogo, fossi in te, proverei a scrivere agli autori del progetto, ne sapranno di certo più di me.
Come hai letto non è consentito incollare sketch, sopratutto se non scritti da me o da qualche autore del blog.
Puoi scrivermi che errore ti restituisce l’IDE e se è un errore noto cerco di aiutarti, considera che non conosco affatto il progetto di cui scrivi.
ciao si io ti scrivo gli errori ho contatta to i progettisti il problema e che forse sbaglio qualcosa io ma non so cosa cmq ti mando cosa mi restituisce cosi se sai di che si tratta almeno mi dai unna dritta grazie
lo sketch usa 22656 byte(70%) dello spazio disponibile per i programmi il massimo e28672 byte le variabili globali usano 1774 byte (69%) di memoria dinamica lasciando altri 786 byte liberi per le variabili locali il massimo e 2560 byte
——————————————————————————————————————————————————
c:\user\angelo\desktop\iboardbot_107\iboardbot_107.ino:in fuction ‘void setup()’:
“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””” :64:37:warning:deprecated conversion from string constant to ‘chart’ [-write-string]
writewificonfig(0″,”,”,0);
questi sono alcuni degli errori ci sono altre stringhe simili nella dicitura ma puoi dirmi piu o meno di cosa si tratta e se ce una soluzione la di la del progetto la scheda e una arduino leonardo e sopra e montata una scheda fi fiche occupa tutti i pin ho provato a sganciare la scheda per vdere se era quella ma nulla la porta com e giusta e la selezione della scheda anche sembra il computer mela veda e uso ultima versione di arduino ide
Autore
Ciao Angelo,
leggendo l’errore mi sembra di vedere una strana dichiarazione: writewificonfig(0″,”,”,0); forse manca solo una virgola tra lo 0 e gli apici.
o qualche valore è errato.
ciao grazie per la risposta mi confermi allora che potrebbe essere un errore di programmazione e non solo un mio modo di compilare il programma non e mio e d e piuttosto esteso serve a far funzionare una lavagnetta elettronica comandata da una scheda arduino leonardo io non so programmare e trovare già l’errore che hai trovato tu e una impresa ho scritto al sito che per altro e in inglese mi rimandano alle loro istruzioni ma non parlano di errore di programma comunque sai da chi poso farlo anallizzare per capire se danneggiato cosi da farlo riparare e ricompilare
Autore
Ciao Angelo,
si tratta di un prodotto commerciale? Avranno una loro assistenza.
In alternativa puoi scrivere loro segnalando il tuo problema.
ciao mauro ho un problema con il mio sketch per quello che capisco io ce un problema con la libreria del dht11 ma non essendo un esperto non so come risolverlo potresti darmi una mano grazie a priori
Arduino:1.8.2 (Windows 7), Scheda:”Arduino/Genuino Uno”
C:\Users\notebook\Downloads\TempUmiditaPressione_LCD2002A\TempUmiditaPressione_LCD2002A.ino:45:69: fatal error: dht.h: No such file or directory
#include // libreria sensore temperatura e umidita
^
compilation terminated.
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”
Autore
Ciao Gianluca,
devi installare la libreria DHT11 come descritto in alcuni articoli dedicati a questo sensore
salve ho il mio Arduino su gli sketch della programmazione del RFID mi da questo errore c:\users\michele\appdata\local\temp\arduino_modifier_sketch_172513\sketch-aug17c.ino:36:18: fatal error: RFID.h: no such file or directory
#include
compilation terminated.
exit status 1
errore durante la compilazione per la scheda Arduino/genuino uno.
ho provato molti sketch di altri post online per programmare il RFID ma sempre lo stesso errore. Con altri sketch di altri progetti diversi ad esempio per il display lcd o altri ancora vanno tutti bene mi sapresti dire cosa puo essere grazie
Autore
Ciao Michele,
l’errore su cui devi soffermare la tua attenzione è: “RFID.h: no such file or directory” che indica chiaramente che ti manca il file rispondente alla libreria RFID.h, controlla con l’autore dello sketch che libreria ti serve.
grazie mille per la risposta ho trovato il file RFID.h ma ora mi da questo errore \sketch-aug17h:151: error: invalid preprocessing directive #endifvoid
#endifvoid setup() (
sketch_aug17h:5: error: unterminated #ifndef
#ifndef RFID_h
exit ststus 1
invalid preprocessing directive #endifvoid.
manca qualcosa su questa stringa? #endifvoid setup() ( xke e anche evidenziato in rosso. grazie ancora
Autore
Ciao Michele,
dovresti chieder all’autore dello sketch.
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); a me dice che ce un problema qui con positive puoi aiutarmi???
Autore
Ciao Andrea,
Primo: luogo non è il posto gliusto in cui inserire il commento perché non c’entra nulla con quanto scritto.
Secondo: qual’è l’errore?
Terzo: luogo che cos’è POSITIVE e cosa sono tutti quei pin definiti in un display I2C?
Quarto: leggi, per favore, la risposta fino alla fine.
Prova a consultare la documentazione della libreria che stai usando e comprendere dove sbagli.
QUESTA è LA STRINGA DOVE COMPARE BITMAP_ARRAY L’UNICA VOLTA.
display.drawBitmap(posx, posy, (const unsigned char*)pgm_read_word(&(bitmap_array[icon_num])), 16, 16, WHITE);
In file included from C:\Users\ARCHYZ~1\AppData\Local\Temp\arduino_modified_sketch_287211\sketch_may17a.ino:30:0:
C:\Users\Archyzone\Documents\Arduino\libraries\bitmap/bitmap.h:1264:43: error: variable ‘bitmap_array’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
PROGMEM const unsigned char* bitmap_array[] = {
^
exit status 1
Errore durante la compilazione per la scheda Arduino Nano.
AIUTAMI è IL CODICE DI UNO SMARTWATCH GRAZIE
Autore
Ciao Luca,
se ho compreso il tipo di errore che ti viene restituito, la stringa dovrebbe essere scritta così:
const unsigned char bitmap_array[] PROGMEM = { … }
Prova a chiedere anche all’autore del progetto.