Ciao, in conformità al REGOLAMENTO , punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita che si trova in basso del tuo post), seleziona tutto il codice e premi l’icona </> nella barra degli strumenti per contrassegnarla come codice. Grazie.
Il primo problema che noto è che tu leggi il pulsante fuori dal setup e prima di aver definito il pinMode.
Sposta la lettura dentro il setup e dopo il pinMode e dovresti risolvere
Cavolo hai ragione, adesso funziona ...
Mi sembrava più corretto dichiararlo fuori dal setup
Ma come mai resettando funzionava e riavviando no?
Ci sono 2 comportamenti diversi?
Ero convinto che reset ed avvio fossero equivalenti.
Non è che non si può fare cose prima del setup ma nel 99% dei casi non ha molto senso perché verrebbero eseguite una sola volta esattamente come nel setup.
Se tu avessi messo la pinMode prima della lettura avrebbe funzionato.
Il perché su reset funzionava dipendeva, probabilmente, dal fatto che il pin aveva ancora il settaggio per l'input e quindi la lettura riusciva, ma sto ipotizzando per la certezza serve qualcuno di molto ferrato nell'HW e, soprattutto, del datasheet del 328
Il framework di Arduino (Arduino core) "nasconde" il fatto che uno sketch è un programma classico in C/C++ ovvero nasconde all'incirca questo:
void main()
{ init();
initVariant();
setup(); // chiamato una volta
while(1) loop(); // ciclo infinito
}
Quindi ecco perché la setup() viene chiamata solo una volta, all'inizio
Dentro la main() prima della chiamata alla setup() c'e' poi del codice che dipende dalla MCU/hardware per cui compili, di base molto codice che inizializza l'hw