Salve a tutti,
sono nuovo nella programmazione di Arduino e avrei alcune domande per un progetto che vorrei realizzare.
Il circuito ha come input alcuni pulsanti che hanno funzioni diverse a seconda della "modalità".
Ci sono due "modalità" che in precedenza erano programmi per due circuiti differenti.
Quando erano separate le inserivo nel void loop, ora mi chiedo se è possibile creare tre loop, ce ne sarebbe uno principale che mi fa scegliere quale "modalità" usare più uno per ogni modalità al suo interno.
Se non fosse possibile avevo pensato di ridurre a funzione ogni output delle due differenti modalità e spostare i vari if nell' unico loop.
Vorrei sapere se questa seconda strategia è eseguibile (dall' ATmega) in meno tempo rispetto all' eventuale soluzione dei tre void loop.
Lascio questo esempio in termini generici senza scrivere gli input e gli output precisi per spiegare meglio l'idea dei tre loop e le difficoltà a portare tutto in un solo loop.
void loop 0(){
if(input pulsante 1){
entra in void loop1;
}
if(input pulsante 2){
entra in void loop2;
}
if(input pulsante 3){
entra in void loop0; //per poter poi riscegliere
}
void loop1(){
output 1 //ogni output ha il suo if
output 2
...
output n
}
void loop2(){
output n+1 //anche qui ogni output ha il suo if
output n+2
...
output n+m // n ed m sono numeri qualsiasi ma li ho scritti in questo modo per far capire che sono output differenti
}
diversamente dovrei dichiarare prima una funzione per ogni output e poi inserirle nell' unico void loop portando gli if fuori da ogni funzione e scrivendoli sempre nel loop, ma non saprei come poter scegliere quale gruppo di funzioni usare visto che condividono alcuni input e si trovano nello stesso loop.
Scusate ma sono ancora all'inizio e su google non ho trovato niente.
Perdona Heisenberg94, ma uno, prima di buttarsi a scrivere programmi, almeno le basi del linguaggio che deve usare bisogna che se le studia ... perché qui stiamo parlando delle BASI ... in particolare dei concetti di "funzione" !
Prenditi un bel testo di C e comincia a studiare, poi ti riavvicinerai, sicuramente più produttivo, al tuo programma.
Puoi cominciare con QUESTO e puoi scaricarti QUESTO libro (... tranquillo, è un sito legale, purché per esclusivo uso PERSONALE).
Il consiglio di Guglielmo è da cogliere al volo.
Giusto per partire ricorda che come nel C non puoi avere che un solo main sul linguaggio arduinico allo stesso modo devi usare una sola funzione loop,
Quindi andrai a creare tre funzioni separate e quale attivate lo puoi decidere con uno Switch in base al pulsante premuto.
Se vieni dal basic potresti anche pensare di usare i goto per intenderci, ma sono sconsigliati in C nonostante siano regolarmente utilizzabili
Testato:
Se vieni dal basic potresti anche pensare di usare i goto per intenderci, ma sono sconsigliati in C nonostante siano regolarmente utilizzabili
@ Heisenberg94:
... ma se ti scopriamo ad usarlo, ti leghiamo ad un albero e ti fustighiamo ] ] ]
Esiste, ma il suo uso è veramente limitato a "casi eccezionali" ove non è possibile fare in altro modo ( ... es. per problemi in cui contano anche i nsec. XD) ... altrimenti, è assolutamente da evitare !!!
Uno dei programmi sul quale sto lavorando (non mio), in puro C, no arduino, fa abbondante uso di goto e senza nessuna necessità temporale.
Nei ToDo ho immediatamente scritto "degotoizzare" XD
Io lo farei così. Userei una variabile per definire la modalità e poi all'interno della funzione loop eseguirei del codice a seconda dello stato della modalità usando Switch e case o If then a seconda di cosa sia più conveniente.