Salve a tutti sono Damian mi chiedevo se qualcuno poteva darmi una mano
Premetto che mi sono sempre dilettato in elettronica per questo ho deciso di dedicarmi al mondo arduino, qualcosa la riesco a fare e a capire. ho un problema a fine codice vorrei inserire un comando che tramite la pressione di un tasto mi riporti nuovamente a inizio programma
Pensavo a qualcosa come il Comando return o non so
Potreste spiegarmi come organizzarlo ??
Grazie mille a tutti
Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.
Guglielmo
Hai uno sketch di esempio?
Ciao Uwe
void setup (){
int hours, minutes, seconds;
lcd.begin(16, 2);
Serial.begin(9600);
tone1.begin(Buzzer);
pinMode(ledGreen, OUTPUT);
pinMode(ledRed, OUTPUT);
/////////////////////////
pinMode(pulsante, INPUT);
/////////////////////////
char key;
boolean cancel;
do
{
cancel = false;
lcd.clear();
lcd.setCursor(0,0);
buttonBip(100);
lcd.print("Sistema attivo");
digitalWrite(ledGreen, HIGH);
delay(500);
digitalWrite(ledGreen, LOW);
lcd.setCursor (0,1); // sets cursor to 2nd line
lcd.print ("S.tempo.");
il codice e molto piu lungo potrei inserirlo tutto ma credo sia inutile
il mio scopo e quello ritornare tremite la pressione di un tasto alla voce " s.tempo " dopo che il programma e terminato
quindi in teoria a fine programma dovrei fare un richiamo per tornare in quel punto
ma non so come organizzarlo e quale voce utilizzare.come detto avevo pensato un return o qualcosa di simile.
Per chiarire ulteriormente la situazione si tratta di un progetto per il softair, ovvero un gioco a tempo dove inserendo una pass interrompo il conto alla rovescia e sbagliandola mi da partita persa quindi una volta terminato il tutto tramite la pressione del tasto mi dovrebbe riportare al inizio
spero di essermi spiegato.
ps se volete posso postare tutto il codice grazie del attenzione.
forse non hai ben chiaro di come viene processato un programma su un microcontrollore
a differenza di un programma su pc (per esempio scritto in basic) che viene eseguito una volta sola e se vuoi ricominciarlo devi appunto dare un comando apposito
qui il programma una volta caricato nel micro va in esecuzione
e le istruzioni che fanno parte del blocco (obbligatorio) chiamato setup(), vengono eseguite una dopo l'altra dalla prima all'ultima. Al termine del setup (che serve appunto a preparare l'ambiente di lavoro del programma) si entra nel loop() (altro blocco obbligatorio) e tutte le istruzioni che sono scritte qui dentro vengono ripetute una dopo l'altra fino in fondo e immediatamente dopo ricominciano dalla prima (del loop) alla velocità di qualche microsecondo l'una. Quindi il programma non termina mai.
Per eseguire nuovamente le istruzioni del setup() normalmente si deve resettare il micro...
Questa operazione la faccio già con il tasto accensione ma volevo evitare ogni volta di spegnere l’alimentazione, facendo rimanere il sistema acceso e intervenendo con un pulsante appunto per riavviare
non capisco ma mi adeguo diceva....
allora aggiungi un pulsante che quando lo premi lancia la funzione setup()
Patrick_M:
allora aggiungi un pulsante che quando lo premi lancia la funzione setup()
Io la butto lì... Un pulsante collegato al pin RESET ed a GND non va bene?
docdoc:
Io la butto lì... Un pulsante collegato al pin RESET ed a GND non va bene?
Damian10:
Questa operazione la faccio già con il tasto accensione ma volevo evitare ogni volta di spegnere l’alimentazione, facendo rimanere il sistema acceso e intervenendo con un pulsante appunto per riavviare
Patrick_M:
Cogli la differenza tra "tasto di accensione" e "pin di RESET" o non era chiaro?
IL "tasto di accensione" è un interruttore che mette/toglie alimentazione. Quello che lui dice di voler realizzare è ripartire dalla setup() con un pulsante, e mandando a GND il pin RESET fa esattamente questo, senza interrompere l'alimentazione.
Se poi volesse fare qualcosa di diverso, non so, non è stato scritto, per cui il pulsante su Reset mi pare che sia ciò che cercava.
si si, l'ho colta
da come l'ho capita io sta cosa.... dalle mie parti si dice "sa l'è mia supa l'è pan bagna" (se non è zuppa è pan bagnato)
nel senso che premere il pulsantino di reset sulla scheda o
aggiungere un pulsante che collega reset e gnd o
premere un pulsante che toglie corrente...
aggiungere un pulsante che alla pressione rilancia il setup
sono tutti e 4 metodi alternativi per fare una cosa che nel caso del pezzo di programma esposto dall'OP.... non mi pare abbia molto senso...
Patrick_M:
da come l'ho capita io sta cosa.... dalle mie parti si dice "sa l'è mia supa l'è pan bagna" (se non è zuppa è pan bagnato)
Di dove sei, per curiosità? Mi suona familiare :D.
Patrick_M:
sono tutti e 4 metodi alternativi per fare una cosa che nel caso del pezzo di programma esposto dall'OP....
Si, certo, è tutto pan bagnato.. Ma, ripeto, lui ha esplicitamente detto, non so bene perché, di non voler intervenire sull'interruttore (che non è un pulsante, quindi va premuto due volte..;)) ma di volere un pulsante alla cui pressione il codice possa ripartire dal setup().
E quello che ho indicato, il RESET, fa esattamente questo.
Poi sicuramente si può anche intercettare la pressione di un altro pulsante su altro pin, e quando premuto fa riavviare Arduino (non comunque richiamare semplicemente la funzione setup in quanto ogni variabile globale non reimpostata dentro al setup manterrà il suo attuale valore...), credo eseguendo il codice dall'indirizzo 0 (una cosa tipo "void(*Reboot)(void)=0;" se non erro).
Per cui, delle 4 possibili zuppe.. soluzioni, quella del pin RESET soddisfa tutti i requisiti ed è la più semplice.
IMHO.
Via software, il reset tramite watchdog ?
http://www.leonardomiliani.com/2013/impariamo-ad-usare-il-watchdog-1/
SukkoPera:
Di dove sei, per curiosità? Mi suona familiare :D.
diciamo bassa valsesia
Ma lui non vuole rieseguire il setup... vuole ritornare al punto in cui ha scritto s.tempo
(che si trova nel setup, anzi in un loop dentro il setup che potrebbe sostituire con il normale loop, ma non è importante).
Consiglio mio:
metti il loop - o meglio la parte che si deve ripetere - dentro la void loop() così ti viene più standard
richiama alla fine del loop una funzione che attende la pressione di un pulsante
così ti eseguirà il loop e prima di ricominciarlo attenderà la pressione del pulsante
Ah, be come dici tu (ma non capisco perchè metterlo in loop) basta prendere il pezzo che vuole eseguire quando vuole, lo mette in una void MiaFunz() di nome a scelta e la chiama sia nel setup() (al posto del pezzo che ha tagliato) che quando vuole esempio tramite pulsante
nid69ita:
Ah, be come dici tu (ma non capisco perchè metterlo in loop) basta prendere il pezzo che vuole eseguire quando vuole, lo mette in una void MiaFunz() di nome a scelta e la chiama sia nel setup() (al posto del pezzo che ha tagliato) che quando vuole esempio tramite pulsante
quindi come dovrei strutturarlo ...
Inserisco il void mia funzione()
E poi richiamo Mia funzione (); Nel setup
Ma che comando dovrei utilizzare ? Cioè nel void mia funzione dopo aver inserito la condizione se premo il pulsante cosa dovrei inserire ?
No, scusa, io vedo due cose:
una certa impreparazione in 'C', nulla di grave: tutti impariamo/abbiamo imparato/impareremo
una certa confusione, e qui forse sbaglio io:
tu vuoi prorpio ri-accendere Arduino (magari per re-inizializzare delle periferiche)? mi sembra di no...
tu vuoi resettare arduino? magari per far ri-partire un programma impiantato? non credo
per quelle che mi sembra di capire tu vuoi che una certa sequenza riparta dall'inizio, senza però che questo sia causa/causato da guasti o malfunzionamenti
e allora la strada di ripetere il setup è quasi sbagliata, quella di re-settare arduino è certamente sbagliata
se sei in una condizione "normale", senza alcuna anomalia ne guasti re-settare o ri-accendere inutilmente è indice di cattiva programmazione, una situazione normale deve venire affrontata con mezzi "normali"
spiga bene cosa vuoi fare, mi raccomando: non "come", ma "cosa"
>Damian10: il tasto "Report to Moderator" NON serve per porre domande agli utenti o rispondere a domande, serve per segnalare ai moderatori di TUTTO il forum (in tutto il mondo) un qualche cosa di serio (insulti, volgarità, spam, violazioni al regolamento, ecc.), quindi ... ti pregherei di usarlo solo per tali cose, grazie.
Guglielmo