[RISOLTO] Programma funzionante su tinkercad non funziona su arduino

Salve! Ho scritto un programma abbastanza grande su tinkercad per facilitarmi il lavoro di debugging.
Il programma su tinkercad è finito e funziona perfettamente, ma quando lo porto su arduino non funziona.
Non vengono rilevati errori di sorta, ma semplicemente non va avanti dopo una certa istruzione (me ne sono accorto dal risultato sul seriale) che invece funziona su tinkercad.
Cosa può essere andato storto?
Se necessario, pubblico il codice.

Update: credo, correggetemi se sbaglio, che il problema sia che su tinkercad le variabili locali di una funzione conservino il dato, mentre su arduino no.
Mi spiego meglio. Ho un codice che esegue a loop una funzione con alcune variabili locali che devono mantenere il loro dato anche quando la funzione è finita. Su arduino sembra che per far funzionare il programma, io debba metterle come variabili globali, altrimenti il dato non si conserva a fine funzione.

Usa la parolina magica "static" per quelle variabili locali che vuoi conservino il loro valore ... :slight_smile:

In pratica, ad esempio, per dichiarare una variabile intera che conserva il suo valore all'interno di una funzione anche se esci e poi rientri la dichiari come:

static int mioIntero;

Guglielmo

Sembra che il problema siq eullo che hai messo nel PS, e che Guglielmo ti ha indicato, ma secondo me se vuoi qualche risposta più concreta e mirata devi postare anche il codice.

Clo7:
Mi spiego meglio. Ho un codice che esegue a loop una funzione con alcune variabili locali che devono mantenere il loro dato anche quando la funzione è finita. Su arduino sembra che per far funzionare il programma, io debba metterle come variabili globali, altrimenti il dato non si conserva a fine funzione.

Arduino si programma in C e in C le variabili locali NON mantengono il valore precedente se il blocco finisce (in questo caso il blocco è la funzione loop)
Se tinkercad fa diversamente, sbaglia e di brutto, non Arduino.
Come detto sopra, posta il codice originale tinkercad (mettilo nei tag code)

gpb01:
Usa la parolina magica "static" per quelle variabili locali che vuoi conservino il loro valore ... :slight_smile:

Salagadula megicabula bibbidi bobbidi bù,
metto lo static a quella variabile sù!
bibbidi bobbidi bù!

E' proprio una parolina magica ahahahah. Ha sistemato tutto! Grazie mille!!
Il codice ora funziona perfettamente come su tinkercad!

Clo7:
E’ proprio una parolina magica ahahahah. Ha sistemato tutto! Grazie mille!!

… si, ma, mi raccomando, va usata “cum grano salis” perché, contrariamente alle normali variabili locali che vengono allocate nello stack quando si entra nella funzione e deallocate quando si esce (quindi, quando la funzione NON è in uso, non c’è occupazione di memoria), le variabili dichiarate static nella funzione sono allocate in modo statico ed occupano sempre la memoria.

Guglielmo

P.S.: … e comunque, se con tinkercad funzionava, c’è un errore in tinkercad perché le variabili locali di una funzione DEVONO avere validità SOLO quando la funzione è attiva, poi devono essere buttate salvo, appunto, non vengano appositamente dichiarate ‘static’.

gpb01:
le variabili dichiarate static nella funzione sono allocate in modo statico ed occupano sempre la memoria.

Purtroppo non posso fare altrimenti in questo caso. Ad ogni modo, non sto occupando troppa memoria e me ne rimane un bel po' da parte nel caso volessi ampliare il programma.
Grazie ancora per le dritte!