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.
@Salvatore_Corona Жыл бұрын
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
@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👋
@MrSergio100135 ай бұрын
Dovrebbero darti un Oscar, adoro i tuoi video: chiari, competenti e ben spiegati. Ancora grazie, grazie mille
@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 👍
@mauromenegazzi72 Жыл бұрын
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.
@nicolafugazzaro92489 ай бұрын
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ì!
@dab39637 ай бұрын
Paolo, non so se lo sai, ma tu sei davvero lo special one. Grazie, grazie millis() 😊
@zeppelinmaker7 ай бұрын
grazie a te!
@klod73 Жыл бұрын
Grazie per questi video e il tempo dedicato che per chi come me è all inizio e viene da tutt altro mondo sono fondamentali.
@antoniofreda8390 Жыл бұрын
GRAZIE X LE PILLOLE DI SAGGEZZA/INTELLIGENZA/SEMPLICITÀ CHE USI. GRANDE PAOLO !!!
@giaxlab9 ай бұрын
Bella lezione, come sempre!
@luigicerino5559 Жыл бұрын
ti seguo da sempre, come primo post dico solo che sei il migliore in assoluto! Non sai quanti casini mi hai risolto. Grazie
@SandroPasini612 ай бұрын
buongiorno Paolo. Io preferirei mettere la routine di cambio di stato del pin collegato al led in un servizio di interrupt di un timer. Grazie
@dronirobotchannel-marcello2820 Жыл бұрын
GRAZIE Paolo. Preziosissimi consigli.
@linus031961 Жыл бұрын
Sempre ottimi consigli. Complimenti e buona serata.
@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 🙂
@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...🙏🙏🙏
@cirofusco44599 ай бұрын
Grande, dovrò modificare molti programmi chei hanno dato difficoltà, Grazie non Ci avevo mai pensato
@robertosabatino7213 Жыл бұрын
Ottima (come sempre) spiegazione!! Grazie.
@MrSergio100135 ай бұрын
Grazie.
@zeppelinmaker5 ай бұрын
Ma grazie a te! Di cuore...!
@luigibassi2087 Жыл бұрын
Paolo, complimenti per la chiarezza!!
@Alberto_Alletto7 ай бұрын
Ottimo ! Immagino si abbia anche un grande risparmio di energia utile quando si lavora con batterie
@giuseppemodugno61616 ай бұрын
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
@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 Жыл бұрын
certo! sul mio canale ne esce uno ogni 3 giorni
@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 !!!
@gabriele6378 Жыл бұрын
OTTIMO grazie ;-)
@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
@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.
@davide8923 Жыл бұрын
Ciao Paolo bel video😊Questo tema lo tratti nel tuo libro su Arduino?
@zeppelinmaker Жыл бұрын
si in "Arduino Trucchi e segreti"
@flavianorodolfo Жыл бұрын
Grazie mille!!
@fabioprevitali8050 Жыл бұрын
Ciao Paolo, aspettavo con ansia questa serie! Per patreon o a pagamento sono disponibili tutte le lezioni? Grazie
@zeppelinmaker Жыл бұрын
per gli abbonati ci sono vari corsi completi. www.zeppelinmaker.it/abbonamenti/
@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.
@giuseppemodugno61616 ай бұрын
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
@ivanmobile65rossi80 Жыл бұрын
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
@giuseppemodugno61616 ай бұрын
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.
@AleZakko Жыл бұрын
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!
@hbelettronica Жыл бұрын
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 Жыл бұрын
penso di si!
@hbelettronica Жыл бұрын
Sapreste dirmi quale e il numero del video dove lo spegate ? Grazie@@zeppelinmaker
@michelelostred589913 күн бұрын
scusa la domanda che può sembrare stupida.. ma se io voglio accendere il led per 10s poi spengerlo per 50 secondi come posso fare? non capisco sono proprio alle prime armi..
@leonardoattombri11 ай бұрын
numero 1 !!!
@michelealbanese4438 Жыл бұрын
Grande Paolo a quanto un nuovo libro o videocorso su nuove tecniche su Arduino? ❤
@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 Жыл бұрын
Ciao! Doppio grazie: per il libro e per il consiglio. Buona lettura!
@robertotedeschi4350 Жыл бұрын
Grande Paolo , si infatti col Delay possono nascere parecchi problemi soprattutto se uno volesse gestire tempi piu' lunghi 😀😀😀😀😀
@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
@giuseppemodugno61616 ай бұрын
La matematica degli unsigned in C ti garantisce che il codice nel video continui a funzionare anche al wraparound di millis()
@patrickgourdain Жыл бұрын
Parole sante 😇😇
@giannibasso99 Жыл бұрын
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.
@giuseppemodugno61616 ай бұрын
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.
@GiovanniScafora Жыл бұрын
Ciao Paolo, vorrei sapere, invece di utilizzare millis, non è meglio utilizzare le interrupt? Ti ringrazio, fin da ora, per l'eventuale risposta.
@zeppelinmaker Жыл бұрын
sono alternative. Dipende da quello che devi fare
@GiovanniScafora Жыл бұрын
@@zeppelinmaker sinceramente preferisco sempre le interrupt al millis.
@giuseppemodugno61616 ай бұрын
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.
@you2ber252 Жыл бұрын
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 Жыл бұрын
...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)
@giuseppemodugno61616 ай бұрын
Sfrutti la matematica degli unsigned in C. Vedi altro mio commento
@AlessandroColonna-m9k10 ай бұрын
TOP
@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_ Жыл бұрын
È 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.
@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
@giuseppemodugno61616 ай бұрын
No, sfrutti la matematica degli unsigned in C. Vedi un altro mio commento
@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!
@teneranz Жыл бұрын
Grande! Era ora...🤭
@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
@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.
@micheledestefano Жыл бұрын
Ciao Paolo E’ sempre un piacere seguirti. Ci rispieghi lo shuffle in maniera diversa ?( (tutorial 178) Grazie
@zeppelinmaker Жыл бұрын
ok
@micheledestefano Жыл бұрын
@@zeppelinmaker 😀 Grazie Le basi per una tombola! Novanta numeri che si shuffolano da soli ed entrano dentro una matrice….
@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 Жыл бұрын
👍 anche uno schema a blocchi dell'algoritmo aiuta a capire chi non è pratico di programmazione.
@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 Жыл бұрын
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 Жыл бұрын
mmh così non hai la certezza dei tempi e usi comunque una delay().
@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.
@robrota1 Жыл бұрын
Mettere la tragedia Aiuta sempre😂
@BrunoGiavotto Жыл бұрын
è male se lo usi male, come tutte le cose se lo usi inpropriamente perchè non sai quello che stai facendo. Tutto li.