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

แชร์
ฝัง
  • เผยแพร่เมื่อ 31 พ.ค. 2023
  • 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 TH-cam 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

ความคิดเห็น • 71

  • @el_kibitzer
    @el_kibitzer ปีที่แล้ว +21

    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 ปีที่แล้ว +8

    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 8 หลายเดือนก่อน +2

    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

  • @GiovanniTsolakis
    @GiovanniTsolakis ปีที่แล้ว +5

    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 👍

  • @nicolafugazzaro9248
    @nicolafugazzaro9248 2 หลายเดือนก่อน

    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ì!

  • @giaxfaidate
    @giaxfaidate 2 หลายเดือนก่อน

    Bella lezione, come sempre!

  • @mauromenegazzi72
    @mauromenegazzi72 6 หลายเดือนก่อน

    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.

  • @Alberto_Alletto
    @Alberto_Alletto 27 วันที่ผ่านมา

    Ottimo ! Immagino si abbia anche un grande risparmio di energia utile quando si lavora con batterie

  • @robertosabatino7213
    @robertosabatino7213 ปีที่แล้ว

    Ottima (come sempre) spiegazione!! Grazie.

  • @linus031961
    @linus031961 ปีที่แล้ว

    Sempre ottimi consigli. Complimenti e buona serata.

  • @dronirobotchannel-marcello2820
    @dronirobotchannel-marcello2820 ปีที่แล้ว

    GRAZIE Paolo. Preziosissimi consigli.

  • @luigibassi2087
    @luigibassi2087 ปีที่แล้ว

    Paolo, complimenti per la chiarezza!!

  • @antoniofreda8390
    @antoniofreda8390 ปีที่แล้ว

    GRAZIE X LE PILLOLE DI SAGGEZZA/INTELLIGENZA/SEMPLICITÀ CHE USI.
    GRANDE PAOLO !!!

  • @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

  • @dab3963
    @dab3963 27 วันที่ผ่านมา

    Paolo, non so se lo sai, ma tu sei davvero lo special one. Grazie, grazie millis() 😊

  • @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.

  • @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...🙏🙏🙏

  • @cirofusco4459
    @cirofusco4459 2 หลายเดือนก่อน

    Grande, dovrò modificare molti programmi chei hanno dato difficoltà, Grazie non Ci avevo mai pensato

  • @mdani76
    @mdani76 ปีที่แล้ว +1

    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 🙂

  • @flavianorodolfo
    @flavianorodolfo ปีที่แล้ว

    Grazie mille!!

  • @fabioprevitali8050
    @fabioprevitali8050 10 หลายเดือนก่อน

    Ciao Paolo, aspettavo con ansia questa serie! Per patreon o a pagamento sono disponibili tutte le lezioni? Grazie

    • @zeppelinmaker
      @zeppelinmaker  10 หลายเดือนก่อน

      per gli abbonati ci sono vari corsi completi. www.zeppelinmaker.it/abbonamenti/

  • @gabriele6378
    @gabriele6378 5 หลายเดือนก่อน

    OTTIMO grazie ;-)

  • @ivanmobile65rossi80
    @ivanmobile65rossi80 8 หลายเดือนก่อน

    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

  • @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  ปีที่แล้ว +1

      certo! sul mio canale ne esce uno ogni 3 giorni

  • @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

  • @davide8923
    @davide8923 10 หลายเดือนก่อน +1

    Ciao Paolo bel video😊Questo tema lo tratti nel tuo libro su Arduino?

    • @zeppelinmaker
      @zeppelinmaker  10 หลายเดือนก่อน +1

      si in "Arduino Trucchi e segreti"

  • @michelealbanese4438
    @michelealbanese4438 ปีที่แล้ว

    Grande Paolo a quanto un nuovo libro o videocorso su nuove tecniche su Arduino? ❤

  • @leonardoattombri
    @leonardoattombri 4 หลายเดือนก่อน

    numero 1 !!!

  • @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.

  • @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

  • @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 !!!

  • @AleZakko
    @AleZakko 6 หลายเดือนก่อน

    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!

  • @damianogenchi7708
    @damianogenchi7708 11 หลายเดือนก่อน

    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.

  • @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!

  • @giannibasso99
    @giannibasso99 10 หลายเดือนก่อน

    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.

  • @gennaroschiavone8452
    @gennaroschiavone8452 10 หลายเดือนก่อน

    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  10 หลายเดือนก่อน +1

      Ciao! Doppio grazie: per il libro e per il consiglio. Buona lettura!

  • @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

  • @robertotedeschi4350
    @robertotedeschi4350 ปีที่แล้ว

    Grande Paolo , si infatti col Delay possono nascere parecchi problemi soprattutto se uno volesse gestire tempi piu' lunghi 😀😀😀😀😀

  • @user-px6hc9jt4k
    @user-px6hc9jt4k 3 หลายเดือนก่อน

    TOP

  • @you2ber252
    @you2ber252 10 หลายเดือนก่อน

    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 10 หลายเดือนก่อน

      ...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)

  • @hbelettronica
    @hbelettronica 6 หลายเดือนก่อน

    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  6 หลายเดือนก่อน +1

      penso di si!

    • @hbelettronica
      @hbelettronica 6 หลายเดือนก่อน

      Sapreste dirmi quale e il numero del video dove lo spegate ? Grazie@@zeppelinmaker

  • @patrickgourdain
    @patrickgourdain ปีที่แล้ว

    Parole sante 😇😇

  • @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  ปีที่แล้ว +2

      sono alternative. Dipende da quello che devi fare

    • @GiovanniScafora
      @GiovanniScafora ปีที่แล้ว

      @@zeppelinmaker sinceramente preferisco sempre le interrupt al millis.

  • @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_ ปีที่แล้ว +1

      È 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.

  • @teneranz
    @teneranz ปีที่แล้ว

    Grande! Era ora...🤭

  • @micheledestefano
    @micheledestefano ปีที่แล้ว

    Ciao Paolo
    E’ sempre un piacere seguirti.
    Ci rispieghi lo shuffle in maniera diversa ?(
    (tutorial 178)
    Grazie

    • @zeppelinmaker
      @zeppelinmaker  ปีที่แล้ว +1

      ok

    • @micheledestefano
      @micheledestefano ปีที่แล้ว

      @@zeppelinmaker 😀
      Grazie
      Le basi per una tombola!
      Novanta numeri che si shuffolano da soli ed entrano dentro una matrice….

  • @rscgln
    @rscgln ปีที่แล้ว +1

    "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!

  • @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.

  • @pasqualemichini6131
    @pasqualemichini6131 ปีที่แล้ว

    👍 anche uno schema a blocchi dell'algoritmo aiuta a capire chi non è pratico di programmazione.

  • @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

  • @robrota1
    @robrota1 9 หลายเดือนก่อน

    Mettere la tragedia Aiuta sempre😂

  • @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 ปีที่แล้ว +2

      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  ปีที่แล้ว +2

      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 9 หลายเดือนก่อน

    è male se lo usi male, come tutte le cose se lo usi inpropriamente perchè non sai quello che stai facendo. Tutto li.

  • @paolofecarotta2690
    @paolofecarotta2690 4 หลายเดือนก่อน

    Cosa succede una volta saturato millis?