[RISOLTO] Problema a compilare uno sketch diviso in più schede

Buongiorno a tutti,

dato che sto preparando uno sketch gigante volevo suddividerlo in più schede ma quando arrivo a compilare l’ide mi dice:

Arduino:1.6.3 (Windows 7), Scheda:"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

In file included from button_peri.ino:3:0:

funzioni.h: In function 'void readButtons()':

funzioni.h:4:3: error: 'byte' was not declared in this scope

   byte reading;

   ^

funzioni.h:4:8: error: expected ';' before 'reading'

   byte reading;

        ^

funzioni.h:5:8: error: expected ';' before 'buttonEnterState'

   byte buttonEnterState=true;             // the current reading from the Enter input pin

        ^

funzioni.h:6:8: error: expected ';' before 'buttonEscState'

   byte buttonEscState=true;             // the current reading from the input pin

        ^

funzioni.h:7:8: error: expected ';' before 'buttonLeftState'

   byte buttonLeftState=true;             // the current reading from the input pin

        ^

funzioni.h:8:8: error: expected ';' before 'buttonRightState'

   byte buttonRightState=true;             // the current reading from the input pin

        ^

funzioni.h:10:3: error: 'reading' was not declared in this scope

   reading = digitalRead(buttonPinEnter);

   ^

funzioni.h:10:39: error: 'digitalRead' was not declared in this scope

   reading = digitalRead(buttonPinEnter);

ecc ecc

eppure se io butto tutto nella pagina principale funziona. Non so se ho fatto qualche errore concettuale (ma non credo) per cui metto anche la cartella dello sketch zippato.

PS è un programma da finire e servirà per gestire un menu da display.

PPS OT
Sono stato via per lungo tempo perchè ho fatto dei passi da gigante nella gestione di uno stepper, a breve vorrei aprire un topic in cui spiego come gestire uno stepper di tipo NEMA 34 con due schede BTS7960 con implementata la stall detection! Credo di aver fatto una cosa abbastanza ganza :smiley:

button_peri.zip (2.36 KB)

Per risolvere rinomina "funzioni.h" e "menu.h" come .ino, elimina i relativi include dal .ino principale e vedrai che la compilazione va a buon fine.
Premesso che il C/C++ consente di inserire delle funzioni e dichiarazioni di variabili dentro un file .h è una pratica da evitare perché porta tutta una serie di problemi, primo di tutti la ridefinizione delle variabili, che non sempre sono facilmente identificabile e che possono produrre risultati quantomeno bizzarri in runtime.
Comunque per come lavora l'IDE di Arduino è vietato inserire parti di codice in file .h che poi vengono inclusi nel file principale, se crei più file lascia il nome senza estensione, ci pensa l'IDE a rinominarlo .ino e a gestirne la corretta inclusione in fase di compilazione/linking.

ecco vedi non avevo ben capito come funzionava il discorso. Mi ero basato su un'altro sketch che aveva appunto le schede dichiarate come xxx.h e infatti mi ha fatto ridefinire tutte le costanti.

Ho provato a includerle anche come .ino! ora provo a rinominare senza includere! :smiley:

grazie mille sei sempre di grande aiuto!

Ho trovato anche un bug nell'IDE, in pratica quando si rinomina una scheda se per sbaglio si preme compila o carica l'IDE impazzisce e non fa più rinominare il file anche se rimane aperta la finestrina di "cambia nome"