delay per stringa seriale

ciao a tutti
volevo sapere se c'era un modo
per mettere un delay (senza usare il delay) ad ogni volta che mando la stringa via seriale
tipo questo
Serial.println("xx");
Attesa
Serial1.println("xxx";
Altra attesa
grazie

Per non usare i delay si può usare un metodo tipo questo
Inizio
Data una variabile unsigned long
Dato un intervalli di tempo da attendere
Setup
variabile=millis();
Loop
if (millis()-variabile >intervallo)
{
Azioni
Variabile=millis()
}
Resto loop

volevo mettere le azioni in questo modo
serial.println("x");
attesa
serial.println("xx");
attesa
serial.println("xxx");
attesa
e cosi via

Domanda, il numero di caratteri aumenta ogni volta? Se si si può usare una seconda variabile, da inserire sempre nell'if di tempo passato. Si può pensare ad una variabile globale numero_x che parte da 1 e che, ad ogni ciclo dell'IF aumenta di uno. Nell'if, prima operazione é un for (byte i=0;i<numero_x;i++)
con per comando Serial.print ('x');
Fuori dal for un Serial.println ed un numero_x++
Fine if

Mi sembra pero' di capire, dalla domanda, che lui voglia un ritardo solo fra le diverse operazioni di stampa dei caratteri, tipo, far apparire i diversi caratteri con un certo ritardo sul display, e solo quello ...

Quindi, domanda: il ritardo ti serve solo a scopo "estetico" per far apparire i caratteri in modo graduale, ma NON e' funzionale al resto dello sketch, che deve quindi continuare a funzionare senza ritardi ? ... ad esempio, per far apparire una fila di x o altri caratteri che compaiono uno alla volta con quel ritardo, ma allo stesso tempo il ritardo in se non deve influire sul resto del programma ? ... se si, credo che la cosa piu semplice sia fare una funzione che stampa i caratteri, e che includa il controllo del ritardo fatto con millis all'interno della funzione, e poi condizionarla al valore di una flag ...

Cioe', l'intera funzione sara' un'if che viene eseguito solo se una certa variabile e', ad esempio, ad 1 (potrebbe anche essere solo un'if nel loop, se deve fare solo quello, ma una funzione da piu controllo, perche' puo essere richiamata solo dove serve), per cui quando vuoi che la stampa inizi metti la variabile ad 1 ...

il ritardo mi serve ogni volta che ho mandato una stringa alla seriale

non volevo usare il delay perchè mi fa confusione con altri tempi in attesa contati con la libreria timerone
volevo mettere una cosa come questa senza usare il delay
esempio
serial.println("stringa1");
attesa senza delay
serial.println("stringa2");
attesa senza delay
e cosi via

mikibenx:
non volevo usare il delay perchè mi fa confusione con altri tempi in attesa contati con la libreria timerone

... che cosa significa questa affermazione ? La delay NON può crearti particolari problemi, se non il fatto che ti blocca il programma in quel punto per tutti il tempo di delay().

Che "confusione" ti fa? E che significa "fa confusione" ? ? ? :o

Guglielmo

prova ad usare millis().
è un po difficile da comprendere ,ma risolve un sacco di problemi.

Puso:
prova ad usare millis().
è un po difficile da comprendere ,ma risolve un sacco di problemi.

... magari se aspettiamo la sua speigazione e capiamo COSA a lui serve, prima di "buttare li" soluzioni campate nel nulla, è meglio. Grazie.

Guglielmo

mikibenx:
...
esempio
serial.println("stringa1");
attesa senza delay
serial.println("stringa2");
attesa senza delay
e cosi via

Quello che non e' chiaro e' perche' dopo la stampa di una stringa ti serva una pausa che non blocca nient'altro ...

Oppure intendi dire che hai effettivamente diverse stringhe da stampare consecutivamente e vuoi il ritardo fra le varie stampe ? ... come ad esempio piu messaggi da una o due righe da far apparire in sequenza su un display dove tutte insieme non ci stanno ? ... oppure piu dati da far apparire in sequenza con un certo intervallo fra i vari dati, mentre il programma continua a fare altre cose ? (... tipo ad esempio quegli orologi che alternano ciclicamente ora, data e temperatura ? )

... Etem, ripeto anche a te ... invece di continuare a fare "supposizioni" perché non aspettiamo che mikibenx risponda e ci spieghi ? ... anche perché, causa della terminologia che ha usato, NON è affatto chiaro il problema e perché chiami in causa la libreria "timerone" ... ::slight_smile:

Guglielmo

non so se mi spiegao meglio
volgio mandare una stringa via seriale aspettare e mandarne un'altra
posso farlo
cosi
serial.println("stringa uno");
delay(100);
Serial.println("Stringa due");
delay(100);
Serial.println("Stringa tre");
solo che non voglio usare il tempo di attesa frà le due stringhe delay

se io mando le stringhe senza il delay il computer non li legge bene
mentre se metto la pausa si

... e allora, come già altri utenti ti hanno suggerito, devi studiarti come si usa la millis(), prima QUI, poi QUI ed infine leggi anche QUI e QUI ... dopo di che potrai applicarla per creare delle temporizzazioni senza però fermare il programma come con la delay().

Guglielmo