Тёмный

Perché il delay() di Arduino è MALE - Video 759 

paolo aliverti
Подписаться 87 тыс.
Просмотров 16 тыс.
50% 1

Perché il delay() di Arduino è MALE - Video 759
Abbonati a questo canale per accedere a contenuti e corsi esclusivi
/ @zeppelinmaker
Info abbonamenti: www.zeppelinmaker.it/abboname...
Canale Telegram: t.me/zeppelinmaker
Forum/Gruppo Telegram: t.me/forumzeppelinmaker
Codice: github.com/zmaker/arduino_coo...
Shop Libri e Componenti: www.amazon.it/shop/paoloaliverti
Libri:
- "Arduino trucchi e segreti" - amzn.to/2zvM2S8
- "Il manuale di Arduino" (va bene per chi inizia): amzn.to/2WQLzlw
- "Progettare con Arduino": amzn.to/3mMfKXZ
Puoi scaricare gratuitamente i miei libri:
- "Il manuale di Arduino - gumroad.com/l/arduino
- "Il cookbook di Arduino": gumroad.com/l/arduinocookbook
Altre informazioni e sul libri mio sito: - www.zeppelinmaker.it/libri/
Indice dei video:
www.zeppelinmaker.it/arduino100/
La playlist elettronica: bit.ly/2ICzhGS
La playlist su Arduino: bit.ly/2SNTKf4
La playlist coding sul: bit.ly/2B1uuL2
Come cercare tra i miei video:
• Canale RU-vid di Paol...
Che cosa uso come lavagna digitale? OpenBoard (www.openboard.ch). + tavoletta wacom (amzn.to/3t2Fynd)
• Che strumenti utilizzo...
- Per offrirmi un caffè: www.zeppelinmaker.it/vuoi-off...
- Vuoi chiedere un video su un argomento particolare? www.zeppelinmaker.it/vuoi-chie...
ATTENZIONE: Per ovvi motivi di tempo non posso correggere o analizzare gli sketch e schemi che postate nei commenti o che inviate via mail. Cerco di rispondere a tutte le domande e le richieste sensate ma sono veramente troppe: abbiate pazienza.
#arduino #elettronica

Опубликовано:

 

31 май 2023

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 79   
@el_kibitzer
@el_kibitzer Год назад
Oh sì! parole sacrosante, questa dovrebbe essere la lezione n. 1 di qualsiasi tutoriale su Arduino e subito dopo la lezione n. 2 dovrebbe essere lo stesso schema risolto con la gestione degli interrupt. Su queste fondamenta si possono costruire sketch molto complessi ed affidabili. Complimenti cordiali, ciao.
@ziobit5177
@ziobit5177 Год назад
Scusatemi se mi permetto di dire la mia..Per i piu' curiosi!! Se vogliamo essere pignoli sarebbe meglio dire che il delay chiama una "sub routine a basso livello chiamata NOP" e non fa altro che ciclare per milioni di volte finchè raggiunge il valore impostato sul delay stesso...rimanedo completamente impegnato e non risponde a nient'altro....quindi in realtà il micro lavora sempre alla sua massima velocità ma rimane indaffarato, quindi millis() risolve alla grande:) Grazie Paolo per il tuo impegno👋
@Salvatore_Corona
@Salvatore_Corona 9 месяцев назад
Hai una capacità di spiegare impressionante.. ho realizzato numerosi progetti grazie al tuo aiuto e non posso che ringraziarti.. sei un ottimo insegnante e utilizzi un linguaggio semplice, chiaro e super progessionale Grazie ancora
@robertosabatino7213
@robertosabatino7213 Год назад
Ottima (come sempre) spiegazione!! Grazie.
@linus031961
@linus031961 Год назад
Sempre ottimi consigli. Complimenti e buona serata.
@GiovanniTsolakis
@GiovanniTsolakis Год назад
Ciao Paolo Per far capire in maniera più incisiva la differenza base tempi del loop dalla prima alla seconda versione io userei il serial monitor stampando un ok con millisecondi. Nel primo caso vedremo che appare una nuova riga ogni secondo e nel secondo caso non riusciremo a distinguere nemmeno i numeri. Grazie dell'impegno che metti a promuovere l'uso di arduino 👍
@luigibassi2087
@luigibassi2087 Год назад
Paolo, complimenti per la chiarezza!!
@giaxfaidate
@giaxfaidate 4 месяца назад
Bella lezione, come sempre!
@antoniofreda8390
@antoniofreda8390 Год назад
GRAZIE X LE PILLOLE DI SAGGEZZA/INTELLIGENZA/SEMPLICITÀ CHE USI. GRANDE PAOLO !!!
@dronirobotchannel-marcello2820
GRAZIE Paolo. Preziosissimi consigli.
@klod73
@klod73 Год назад
Grazie per questi video e il tempo dedicato che per chi come me è all inizio e viene da tutt altro mondo sono fondamentali.
@nicolafugazzaro9248
@nicolafugazzaro9248 4 месяца назад
Che dire... FAVOLOSO! Grazie di cuore per queste autentiche perle! E' ammirevole la tua capacità di divulgare con semplicità ed immediatezza concetti non proprio banali. Continua così!
@luigicerino5559
@luigicerino5559 Год назад
ti seguo da sempre, come primo post dico solo che sei il migliore in assoluto! Non sai quanti casini mi hai risolto. Grazie
@mauromenegazzi72
@mauromenegazzi72 7 месяцев назад
La definizione "timer non bloccante " rende perfettamente l'idea. Questa procedura mi ha risolto un'infinità di problemi nei miei progetti. Grazie sempre per quello che fai.
@flavianorodolfo
@flavianorodolfo Год назад
Grazie mille!!
@cirofusco4459
@cirofusco4459 4 месяца назад
Grande, dovrò modificare molti programmi chei hanno dato difficoltà, Grazie non Ci avevo mai pensato
@Antonio-ge6rz
@Antonio-ge6rz Год назад
Si agli inizi usavo solo delay e a volte millis, perché non avevo capito bene l'uso. Ora delay non compare più nei miei sketch! Grandioso Paolo
@michelealbanese4438
@michelealbanese4438 Год назад
Grande Paolo a quanto un nuovo libro o videocorso su nuove tecniche su Arduino? ❤
@dab3963
@dab3963 2 месяца назад
Paolo, non so se lo sai, ma tu sei davvero lo special one. Grazie, grazie millis() 😊
@zeppelinmaker
@zeppelinmaker 2 месяца назад
grazie a te!
@gabriele6378
@gabriele6378 6 месяцев назад
OTTIMO grazie ;-)
@luigibrunomanzini253
@luigibrunomanzini253 Год назад
Ciao Paolo, grazie, conoscevo il millis, infatti ho costruito un generatore di segnali modulato in AM con un tono a 4,5 khz che spazia da 500 khz a 32 mhz, utilizzando un Si5351 e un oled da usare come display per leggere la frequenza e lo step di variazione della stessa effettuato con un encoder rotativo. Avevo grossi problemi di funzionamento con i delay, utilizzando i millis per creare gli anti rimbalzo dello switch dell'encoder, per l'impostazione dello step di variazione di frequenza da 100 hz a 100 khz, ho risolto e funziona tutto perfettamente !!!
@mdani76
@mdani76 Год назад
avevi già trattato l'argomento molto tempo fa con più variabili, per arrivare poi alla stessa tua conclusione di oggi: basta una variabile e poche righe di codice. Sei sempre il mio punto di riferimento 🙂
@giorgioventurini2856
@giorgioventurini2856 Год назад
Grazie alla corretta gestione dei "millis" sono riuscito a risolvere degli strani problemi, che avevo notato in alcuni "blink-sketch" da me compilati in precedenza. Quando l'intermittenza viene affidata al comando "delay", in effetti si blocca l'esecuzione di altre istruzioni altrettanto importanti, provocando dei problemi di sincronismo imprevedibili. Oltre al corretto utilizzo della funzione "millis" sarebbe molto utile anche una bella lezione sull'uso degi "interrupt", che sono certo non mancherà. Grazie di nuovo all'ing. Aliverti.
@antonioesposito3084
@antonioesposito3084 Год назад
Ciao Paolo, grazie per questi video. Sarebbe bello anche qualcosa sui Timer interni di Arduino, ad esempio l'utilizzo di Timer1 settando i registri vari e il prescaler per avere un'onda quadra ben precisa ogni tot millisecondi, così da generare un interrupt ogni tot. In questo modo si evitano le rotture di cicli bloccanti che magari sono presenti in alcune librerie. Grazie!
@rico5870
@rico5870 Год назад
Sono un principiante, ho iniziato una settimana fa a studiare Arduino tramite Udemy. Grazie del video e della condivisione ! Spero farai altri video su Arduino! Greetings from New Zealand
@zeppelinmaker
@zeppelinmaker Год назад
certo! sul mio canale ne esce uno ogni 3 giorni
@robertotedeschi4350
@robertotedeschi4350 Год назад
Grande Paolo , si infatti col Delay possono nascere parecchi problemi soprattutto se uno volesse gestire tempi piu' lunghi 😀😀😀😀😀
@Alberto_Alletto
@Alberto_Alletto 2 месяца назад
Ottimo ! Immagino si abbia anche un grande risparmio di energia utile quando si lavora con batterie
@giuseppemodugno6161
@giuseppemodugno6161 Месяц назад
Ma non direi, il micro lavora sempre alla sua massima velocità senza andare in sleep. Perché dovrebbe ridurre il suo consumo? Anzi, al contrario se la delay() bloccante fosse implementata (ma NON lo è) mandando in sleep il micro, allora sì che si avrebbe un risparmio... ma proprio con il metodo delay
@patrickgourdain
@patrickgourdain Год назад
Parole sante 😇😇
@leonardoattombri
@leonardoattombri 5 месяцев назад
numero 1 !!!
@teneranz
@teneranz Год назад
Grande! Era ora...🤭
@fabioprevitali8050
@fabioprevitali8050 Год назад
Ciao Paolo, aspettavo con ansia questa serie! Per patreon o a pagamento sono disponibili tutte le lezioni? Grazie
@zeppelinmaker
@zeppelinmaker Год назад
per gli abbonati ci sono vari corsi completi. www.zeppelinmaker.it/abbonamenti/
@davide8923
@davide8923 Год назад
Ciao Paolo bel video😊Questo tema lo tratti nel tuo libro su Arduino?
@zeppelinmaker
@zeppelinmaker 11 месяцев назад
si in "Arduino Trucchi e segreti"
@Ideb315
@Ideb315 Год назад
Buonasera sarebbe interessante un video su come evitare l' uso di variabili globali, organizzando il codice dove il loop richiama sottoprogrammi che usano variabili statiche.
@albertobuganza6718
@albertobuganza6718 Год назад
Ciao Paolo, chi è inesperto aspetta i tuoi video con ansia, anzi angoscia..... Spiegazione meravigliosa!!!!!! Da inesperto stavo cominciando a capire il gelo del delay, ma non riuscivo a capire bene come raggirarlo,,, 😅😅😅😅😅😅 grazie della bella anche se semplice lezione...🙏🙏🙏
@user-px6hc9jt4k
@user-px6hc9jt4k 4 месяца назад
TOP
@hbelettronica
@hbelettronica 8 месяцев назад
Salve sig Paolo spero di ricevere una risposta. Avete realizzato un video sul "ROLLOVER" di millis() ? . Siete il migliore con i vostri tutorial ben dettagliati Grazie
@zeppelinmaker
@zeppelinmaker 7 месяцев назад
penso di si!
@hbelettronica
@hbelettronica 7 месяцев назад
Sapreste dirmi quale e il numero del video dove lo spegate ? Grazie@@zeppelinmaker
@GiovanniScafora
@GiovanniScafora Год назад
Ciao Paolo, vorrei sapere, invece di utilizzare millis, non è meglio utilizzare le interrupt? Ti ringrazio, fin da ora, per l'eventuale risposta.
@zeppelinmaker
@zeppelinmaker Год назад
sono alternative. Dipende da quello che devi fare
@GiovanniScafora
@GiovanniScafora Год назад
@@zeppelinmaker sinceramente preferisco sempre le interrupt al millis.
@giuseppemodugno6161
@giuseppemodugno6161 Месяц назад
Gli interrupt introducono delle complessità non da poco. Se si tratta di gestire un tasto il cui tempo di reattività è sulle decine di ms, eviterei gli interrupt.
@ivanmobile65rossi80
@ivanmobile65rossi80 9 месяцев назад
Che dire ? Questo video aiuta molto là dove il delay innesca ritardi e non solo nell’esecuzione e comportamento dello sketch, anche l’eliminazione dell’istruzione if è una sorpresa almeno per me che combatto da tempo con un progetto personale. Ti ringrazio per l’approfondimento che potrebbe sembrare banale ma non Lo è affatto. Aggiungo solo a titolo personale che sto lottando per una esecuzione reattiva del mio progetto tentando di conciliare stato macchina con schedulazione e non ne esco, queste lezioni comunque danno ulteriore ispirazione nel trovare soluzioni alternative da provare. Grazie
@giuseppemodugno6161
@giuseppemodugno6161 Месяц назад
La reattività di tipo hard (tempi molto brevi e stringenti) si risolvono con gli interrupt. La reattività di tipo soft (tempi più lunghi e non strongenti) si risolvono con le macchine a stati.
@gennaroschiavone8452
@gennaroschiavone8452 Год назад
Ciao Paolo ho ordinato il tuo libro su Arduino e non vedo l’ora che arrivi!! Una domanda, ma sull’elettronica di tutti i giorni ( es Cassa Bluetooth, vecchio drone) che magari per qualche motivo non funziona più quali componenti magari possono essere riciclate per Arduino? Magari se puoi prova a fare un video, a mio parare é un argomento molto interessante e di “riciclaggio”.
@zeppelinmaker
@zeppelinmaker Год назад
Ciao! Doppio grazie: per il libro e per il consiglio. Buona lettura!
@damianogenchi7708
@damianogenchi7708 Год назад
Ciao Paolo, Il video è chiaro, ma ho provato a mettere la funzione millis in uno sketch con un ciclo for per visualizzare dei messaggi e non funziona più, togliendo il delay non riesco più a visualizzare tutti i messaggi, mi puoi aiutare per favore? Ti ringrazio in anticipo.
@micheledestefano
@micheledestefano Год назад
Ciao Paolo E’ sempre un piacere seguirti. Ci rispieghi lo shuffle in maniera diversa ?( (tutorial 178) Grazie
@zeppelinmaker
@zeppelinmaker Год назад
ok
@micheledestefano
@micheledestefano Год назад
@@zeppelinmaker 😀 Grazie Le basi per una tombola! Novanta numeri che si shuffolano da soli ed entrano dentro una matrice….
@AleZakko
@AleZakko 8 месяцев назад
Ciao! Ottimo sketch ottimizzato. Non riesco però a comprendere una semplice logica: Se inizialmente nel loop azzeriamo di fatto il millis a zero, e successivamente a fine ciclo lo "resettiamo", come fa il sistema a riconoscere in un singolo passaggio l'intervallo impostato del maggiore/uguale se dopo la funzione IF non è presente la funzione ELSE? grazie! EDIT: Ho iniziato a monitorare il tempo del millis nel seriale ed ho in parte capito il suo funzionamento!
@giuseppemodugno6161
@giuseppemodugno6161 Месяц назад
Da notare che millis(), essendo a 32 bit su un'architettura Atmel a 8 bit, disattiva tutti gli interrupt. Quindi va bene usarlo, ma meglio limitarne l'uso. Per esempio nel codice del video si potrebbe leggere millis() solo una volta all'inizio di loop
@lillo2711
@lillo2711 Год назад
Io mi sono creato una libreria che mette un timer sul pulsante e mi impedisce di premere il pulsante nuovamente, cosi evito la pressione multipla del pulsante e posso usare anche usare più pulsanti senza che lo sketch debba fermarsi. contemporaneamente
@ruggierodonvito2587
@ruggierodonvito2587 Год назад
ottimo spiegazione, ma ho sempre un dubbio: cosa succedere quando il millis arriva al suo numero massimo? forse conviene azzerare il millis al bisogno? Grazie
@giuseppemodugno6161
@giuseppemodugno6161 Месяц назад
No, sfrutti la matematica degli unsigned in C. Vedi un altro mio commento
@grigioluna
@grigioluna Год назад
Ciao Paolo, perdonami se faccio una domanda magari sciocca, dove potrei rispondermi con un esperimento pratico: se io legassi il segnale del pulsante ad un interrupt ma usando comunque il delay per il lampeggio, cambierebbe la reattività di ricezione del segnale da parte di arduino? Ossia, sarebbe comunque una soluzione valida? È solo una curiosità, certo che il delay va comunque sradicato dai nostri sketch 😉
@_gatorland_
@_gatorland_ Год назад
È un po che non uso arduino o comunque qualche atmel. In linea di massima ti direi che funziona, l'interrupt va a "bloccare" il normale flusso del codice, quindi si mette in pausa l'esecuzione del loop per risolvere la funzione che implementa l'interrupt. Un po come accadeva nei processori Motorola68xxx dove al verificarsi di una eccezione contenuta nel vettore TRAP, il processore stesso entrava in modalità supervisor. Non so quanto sia corretta come soluzione però, sperando sempre di non aver detto fesserie.
@you2ber252
@you2ber252 11 месяцев назад
Ciao Paolo, una domanda: funziona anche nel momento in cui il counter millis() si azzera perchè ha raggiunto il massimo rappresentabile dal long int? Perchè temo che dopo 50+ giorni non funzioni più....
@you2ber252
@you2ber252 11 месяцев назад
...altrimenti metterei un controllo anche tipo che se postit è molto > di millis() (cioè millis si è azzerato), allora il controllo lo faccio tenendo conto del fatto che millis si è azzerato nel frattempo, usando un'opportuna formula (al momento non ho voglia di pensarci, ma la si trova)
@giuseppemodugno6161
@giuseppemodugno6161 Месяц назад
Sfrutti la matematica degli unsigned in C. Vedi altro mio commento
@giannibasso99
@giannibasso99 11 месяцев назад
Ciao Paolo. Video utile ma ci sono casi in cui i milis superano il valore max che può gestire arduino e si può verificare che il valore di millis successivo sia inferiore al precedente. Ho trovato istruzioni che possono far ripartire il conteggio dei milis. Azzerando i Millis ad ogni ciclo scongiuri ogni problema.
@giuseppemodugno6161
@giuseppemodugno6161 Месяц назад
La matematica degli unsigned nel linguaggio C aiuta in questi casi. Quando millis fa wrap-around diventa nuovamente 0, mentre il tuo postit rimane a 0xFFFFFFF0 (esempio). In questo caso, incredibilmente, 0-0xFFFFFFF0 è ancora >0.
@rscgln
@rscgln Год назад
"millis() - postit1" è corretto in quanto, anche dopo l'eventuale overflow dei millis, ritorna il valore corretto! L'apparentemente identico sistema di settare postit1 con l'orario dell'evento futuro: "postit1 = millis() +500;" e poi compararlo "if (millis() == postit1)..." , sarebbe sbagliato in quanto fallirebbe quando il conteggio dei millis torna a zero, ogni qualche miliardata di millisecondi!
@pasqualemichini6131
@pasqualemichini6131 Год назад
👍 anche uno schema a blocchi dell'algoritmo aiuta a capire chi non è pratico di programmazione.
@robrota1
@robrota1 11 месяцев назад
Mettere la tragedia Aiuta sempre😂
@jotat_maker
@jotat_maker Год назад
E se ti dicessi che si possono superare tranquillamente i 50gg come: Nel video hai messo nel post-it il valore di millis() e poi hai controllato dopo tempo t se( millis() - post-it >= t) allora fai qualcosa Come principio funziona, il problema sta nel momento che millis supera il valore massimo quindi sia tornato a zero mentre nel post-it c'è ancora memorizzato il valore di millis prima che venisse riazzerato, e lo sketch non lavora più. Come si risolve, semplice!: Nel post it metti il valore di millis+t nel caso millis+t vada in overflow nel post-it viene memorizzaro direttamente il mills() dopo l'overflow. Per es: Post-it = (millisMax-1)+t ne consegue che: post-it = millisMin+(t-1) Detto questo poi nel codice metti [Se post-it==millis fai qualcosa ] In questo caso quando il contatore di arduino azzera il codice continua a lavorare
@giuseppemodugno6161
@giuseppemodugno6161 Месяц назад
La matematica degli unsigned in C ti garantisce che il codice nel video continui a funzionare anche al wraparound di millis()
@jangoMOSFET
@jangoMOSFET Год назад
Io non lo faccio così, generalmente nei miei firmware gestisco i tempi facendo: Int timing = 0; Void loop { If(timing>10000)timing=0; if(timing%500==0)digitalWrite(2,!digitalRead(2)); timing++; delay(1); }
@rscgln
@rscgln Год назад
Altamente impreciso e inutilmente macchinoso! Infatti al millisecondo di delay (che, comunque è una vita per un microprocessore che, magari, ha di meglio da fare) si somma ogni volta il tempo di esecuzione delle if e dell'incremento. Alla fine sono più di 500mS.
@zeppelinmaker
@zeppelinmaker Год назад
mmh così non hai la certezza dei tempi e usi comunque una delay().
@jangoMOSFET
@jangoMOSFET Год назад
Si, è vero, ho sempre fatto così perché mettendo vari if(timing%xx) puoi dare svariate temporizzazioni a più processi nel firmware con la precisione del millisecondo. Tipo far salvare delle misure analogiche su sd anche u a volta al secondo, attuare ingressi uscite ogni 100 millisecondi e gestire funzioni di sicurezza libere da timing quindi ogni millisecondo.
@user-qr4db2ck7y
@user-qr4db2ck7y 11 месяцев назад
è male se lo usi male, come tutte le cose se lo usi inpropriamente perchè non sai quello che stai facendo. Tutto li.
@paolorublino2690
@paolorublino2690 6 месяцев назад
Cosa succede una volta saturato millis?
Далее
The Micro Mechanisms in Your Phone
19:31
Просмотров 1,2 млн
МОЙ НОВЫЙ ДОМ
1:01:04
Просмотров 1,7 млн
Come eseguire il multitasking con Arduino (FreeRTOS)
12:12
Usare una Rete LoRa con Arduino - Video 551
14:28
Просмотров 22 тыс.
Usare le Interrupt con Arduino - #59
8:13
Просмотров 40 тыс.