Go Down

Topic: Spiegazioni per millis() (Read 2131 times) previous topic - next topic

kemosabesay

allora scusa ma torno al concetto principale della domanda....
se ho capito, cosa che non credo, millis con un'operazione con if, conta il tempo iniziale lo confronta con la current e lo confronta con il conteggio impostato da me,faccio quello che devo, e poi riporto current alllo stato di millis .
quindi,
millis non è un vero e proprio delay inteso come tempo, ma un contatore che conta .

allora.....se da un confronto esempio: if (millis() - current >tempo)

quanto è il tempo effettivo di tempo che voglio di " pausa" diciamo tipo delay

vediamo se cosi' mi spiego meglio

a ri grazie

gpb01

#31
Sep 19, 2018, 03:08 pm Last Edit: Sep 19, 2018, 03:09 pm by gpb01
millis() è una FUNZIONE (vedi che ha le parentesi?) che ritorna il valore di un contatore che viene continuamente incrementato dal "core" di Arduino ogni millisecondo.

Quindi, dal momento in cui accendi Arduino, il "core" inizia ad incrementare di 1, ogni millisecondo, questo contatore e millis() non fa altro che andare a leggerlo e tornarti il valore nel momento in cui la chiami.

Tutto qui :)

Guglielmo
Search is Your friend ... or I am Your enemy !

kemosabesay

ok e fin li c'ero arrivato.
il mio problema è che non riesco a capire come fare a confrontarlo con delay,
nel senso, a parte il fatto che uno ferma il programma e l'altro no,
allora con delay(2000) so che per 2 secondi farà una certa "cosa",
if (millis()- current >tempo) conta da quando è partito arduino fino al tempo impostato.ma la pausa che voglio dare a quella "cosa" di quanto è?

Scusa ma se insisto tanto è perchè non mi entra in testa questo confronto....

gianlucaf

#33
Sep 19, 2018, 05:00 pm Last Edit: Sep 19, 2018, 05:01 pm by gianlucaf
ok e fin li c'ero arrivato.
il mio problema è che non riesco a capire come fare a confrontarlo con delay,
nel senso, a parte il fatto che uno ferma il programma e l'altro no,
allora con delay(2000) so che per 2 secondi farà una certa "cosa",
if (millis()- current >tempo) conta da quando è partito arduino fino al tempo impostato.ma la pausa che voglio dare a quella "cosa" di quanto è?

Scusa ma se insisto tanto è perchè non mi entra in testa questo confronto....
delay() sai che mette in pausa tutta l'esecuzione del tuo programma.

mentre usare il confronto con millis ti permette di continuare a far fare cose al tuo programma mentre aspetti.
tempo è la pausa che vuoi dare.
il contenuto dell'if viene eseguito solo quando la differenza tra il tempo attuale, millis()  e il tempo iniziale current è maggiore della quantità di tempo che hai deciso debba passare, appunto tempo.
Vuol dire che è passata una quantità di millisecondi maggiori di tempo dal riferimento che ti eri dato.
L'hanno spiegata molto bene con il discorso dell'arrosto, più di così c'è solo un atto di fede che devi fare e provare :D

kemosabesay

vi ringrazio della pazienza, ma lascio perdere e continuerò con delay, non riesco a spiegarmi a comprendere sto millis. 
Sono piu' duro di comprendonio di quello che pensavo

grazie ancora a tutti

gianlucaf

ti aspettiamo al varco, tranquillo, prima o poi ci dovrai picchiare la testa perchè delay() ti limiterà fortemente.
Non è difficile come concetto, va capito però, il tempo farà il suo lavoro :D

kemosabesay

è mooooolto probabile che ogni volta che mi troverò nell'impossibilità di fare qualcosa per la limitazione di delay abbandonerò il progetto
per ora abbandono questo e comprerò qualcosa di già fatto


grazie ancora

kemosabesay

se dai un'occhiata al listato che ho postato prima ci sono almeno....due cose che non vanno
la prima è che : finchè il ciclo sirena non finisce il ciclo blink non si attiva
la seconda che se inclinometro è a low il ciclo parte ma se nel frattempo inclinometro va ad high il ciclo sirena aspetta di aver fatto i tre cicli .....e poi esce

quindi, se poi ci metto che l'ho scritto sbagliando perchè non ci ho capito un tubo.....mi sa che sto facendo perdere tempo a voi e a me


a ri grazie

Patrick_M

#38
Sep 19, 2018, 05:37 pm Last Edit: Sep 19, 2018, 05:40 pm by Patrick_M
te l'ho spiegato :) il for per il programma è come un delay, nel senso che una volta entrato esegue a ripetizione le istruzioni al suo interno senza mai uscire per cui
se vuoi eseguire altro in contemporanea (più o meno :D ) devi farlo dentro al for in più se vuoi anche che il tutto venga interrotto dal sensore che va HIGH anche quel controllo devi aggiungerlo li dentro, e guarda che qui millis() o delay non centrano nulla è proprio l'istuzione for che diciamo "blocca" il ciclo

se hai l'arrosto nel piatto e qualcuno ti dice
fino a che non hai contato fino a 1000 non mangi
tu cominci a contare e solo dopo che hai contato si sblocca la condizione e potrai mangiare
il comando in questo caso ti impedisce di fare altro
questo era il for
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

kemosabesay

perfetto, ma ho provato come dici tu a mettere il ciclo frecce dentro al for,
ma frecce lampeggia solo quando finisce ogni ciclo del conteggio del for, non è indipendente frecce

Puso

ALLORA AVEVO RAGIONE  :smiley-evil:  :smiley-evil:  :smiley-yell:  :smiley-yell: sul fatto che utilizzare librerie e cicli bloccanti (utilizzati nei vari esempi) tipo Delay. For, While, Ect. Ect. crea solo confusione nei principianti al Secondo tentativo.

Ti consiglio di evitarli...almeno finche non hai capito bene come influiscono sul tuo Schetck.

Riguardo a millis (), la torta e leggere il giornale........(esempio bellissimo e calzante)....se devi mettere in forno la seconda torta è meglio che azzeri il cronometro....altrimenti il forno resta spento.

Qualcosa tipo "Timer_Torta=millis()", messa alla riga giusta, fa ripartire il forno per cuocere un'altra torta.

 

gpb01

#41
Sep 19, 2018, 08:11 pm Last Edit: Sep 19, 2018, 08:14 pm by gpb01
il mio problema è che non riesco a capire come fare a confrontarlo con delay,
In nessun modo, NON sono neanche parenti ...

... il delay() è una funzione in cui entri e NON esci più fino a quando non è passato un determinato tempo, quindi, provoca un vero e proprio blocco del programma per il tempo da te prefissato.

... millis(), come ti ho detto, ritorna un numero e sta a te farci qualche cosa.

Come vedi, ribadisco che NON sono neanche parenti e, pensare di prendere un programma scritto con l'uso delle delay() e sostituirle semplicemente con millis() è sbagliato ... il programma va completamete ripensato e riscritto seguendo tutta un'altra logica.   Con delay() procedi sequenzialmente fermandoti di tanto in tanto, con millis() hai più cose che devi contemporaneamente gestire mentre il programma contina a girare senza fermarsi.

Guglielmo
Search is Your friend ... or I am Your enemy !

kemosabesay

adesso che ho provato do ragione a tutti e due, qui non ci piove.

pero' resta il fatto che sono ancora nel pallone.
Gpb lo so che mi manderai a quel paese , ma non capisco come mai mi risulti difficile capirne la logica,

sto facendo prove di ogni genere e tipo, ma i risultati sono sempre contrastanti e non sempre funzionanti.....

Boh, sono perplesso

Puso

Guglielmo
sono gia 2 settimane che non mi SGRIDI....sto cominciando ad essere geloso.

Puso

kemoECT.ECT.

capire la logica del linguaggio è la prima cosa da imparare....almeno le basi.

Ti consigli le seconde prove....mettendoci del tuo.....gli errori h noterai da solo saranno i più imprtanti durante il percorso.....


Go Up