forse mi sto perdendo in un bicchiere d'acqua ma non sono espertissimo di programmazione
in un progetto devo inviare 5 comandi via seriale distanziati una dal altro di 500 millisecondi senza usare il delay ma immagino con il millis in tempo pari a 2,5 secondi poi ripetersi il tutto
esempio
tempo 0ms invio primo comando
tempo 500ms invio secondo comando
tempo 1000 ms invio .........
..............
tempo 2500 ms invio quinto comando
Nel setup metti t=millis(); poi, nel loop, metti una variabile che conta continuamente da 1 a 5 e, in base al valore della variabile, invii il comando appropriato.
if (millis()-t>499)
{
t=millis();
contatore+=1;
if contatore==6 contatore=1;
fatto=0;
}
Ogni volta che invii un comando, metti
if(fatto==0) {invia il comando(); fatto=1;}
per evitare che venga ripetuto. Esempio:
ora ho un altro quesito
vorrei che in un loop mi invia tutti i 5 comandi come mi hai spiegato ogni 500 ms
nel loop successivo solo gli ultimi 2
poi ancora tutti
e cosi via
il modo è giusto ma i tempi devono essere sempre gli stessi da un comando al altro
cerco di spiegare ogni comando singolo deve avere lo stesso tempo di stacco di ogni ciclo vuol dire che se nel ciclo 1 faccio 1,2,3,4,5 distaccati da uno dal altro 500ms fin qui ok
ma nel ciclo 2 praticamente il tempo totale deve essere uguale al ciclo 1 cioe deve ""saltare"" il comando 1,2,3 inserendo equivalente pausa per mantenere sempre il tempo totale del ciclo di 2.5 secondi altrimenti i comandi 4,5 sono ripetuti 2 volte nel arco di tempo troppo breve
È quello che hai chiesto: trasmettere N in tutti i passaggi in cui 'ciclo_rid' vale 0, e trasmettere N solo se maggiore di 3 nei passaggi in cui 'ciclo_rid' vale 1.
Claudio_FF:
È quello che hai chiesto: trasmettere N in tutti i passaggi in cui 'ciclo_rid' vale 0, e trasmettere N solo se maggiore di 3 nei passaggi in cui 'ciclo_rid' vale 1.
si ma N sono tutti comandi diversi ogni comando deve essere inviaro una volata sola ogni 500ms
Se cerchi il mio 'la pappa è fatta' trovi almeno tre discussioni con tre differenti soluzioni
Basta mettersi di buzzo buono a leggere con un minimo di interesse e curiosità
birrohgt:
N sono tutti comandi diversi ogni comando deve essere inviaro una volata sola ogni 500ms
Non sono sicuro di intuire quale sia il dubbio.... "Trasmetti N" è una scritta generica che significa: trasmetti il comando relativo al valore di N, quindi può essere sia la chiamata a una funzione che accetta il valore N e trasmette quello che deve trasmettere, sia uno switch o una struttura if/else if che facciano la stessa cosa.