Arduino Sketch with millis() instead of delay()

SdĂ­let
VloĆŸit
  • čas pƙidĂĄn 28. 06. 2024
  • đŸ€© FREE Arduino Crash Course 👇👇
    bit.ly/get_Arduino_skills
    **If you like this, I think you'll like the premium Arduino training we offer. Check it out here** bit.ly/3nSBPUs
    We designed this circuit board for beginners!
    Kit-On-A-Shield: amzn.to/3lfWClU
    SHOP OUR FAVORITE STUFF! (affiliate links)
    ---------------------------------------------------
    Get your Free Trial of Altium PCB design Software
    www.altium.com/yt/programming...
    We use Rev Captions for our subtitles
    bit.ly/39trLeB
    Arduino UNO R3:
    Amazon: amzn.to/37eP4ra
    Newegg: bit.ly/3fahas8
    Budget Arduino Kits:
    Amazon:amzn.to/3C0VqsH
    Newegg:bit.ly/3j4tISX
    Multimeter Options:
    Amazon: amzn.to/3rRo3E0
    Newegg: bit.ly/3rJoekA
    Helping Hands:
    Amazon: amzn.to/3C8IYXZ
    Newegg: bit.ly/3fb03X1
    Soldering Stations:
    Amazon: amzn.to/2VawmP4
    Newegg: bit.ly/3BZ6oio
    AFFILIATES & REFERRALS
    ---------------------------------------------------
    â–șAudible Plus Free trial: amzn.to/3j5IGrV
    â–șJoin Honey- Save Money bit.ly/3xmj7rH
    â–șDownload Glasswire for Free:bit.ly/3iv1fql
    FOLLOW US ELSEWHERE
    ---------------------------------------------------
    Facebook: / programmingelectronics...
    Twitter: / progelecacademy
    Website: www.programmingelectronics.com/
    **Arduino Sketch with millis() instead of delay() written tutorial**
    www.programmingelectronics.co...

Komentáƙe • 306

  • @programmingelectronics
    @programmingelectronics  Pƙed 3 lety +14

    ****If you like this, I think you'll like the premium Arduino training we offer. You can check it out here**** bit.ly/3lHyzcB

    • @Darkstar327
      @Darkstar327 Pƙed 2 lety +1

      please make a video on arduino sensor kit i need help on it btw your videos are amazing

  • @AlienRelics
    @AlienRelics Pƙed 4 lety +20

    Using
    previousTime = currentTime;
    will introduce an accumulating error. The time to process the code within the if statement will add to the time and accumulate. For just blinking LEDs or some other none critical stuff, no big deal.
    But if you simply use:
    previousTime += interval;
    You've just gotten rid of the cumulative error.

    • @programmingelectronics
      @programmingelectronics  Pƙed 4 lety +3

      Thanks for bringing this up Steve!

    • @AlienRelics
      @AlienRelics Pƙed 4 lety +6

      @@programmingelectronics It probably won't affect most of what people will use this for, but it is just the sort of thing to drive you crazy later when you can't figure out why your timing is slipping.

  • @johncorbishley1548
    @johncorbishley1548 Pƙed 4 lety +22

    I have always struggled with this, even with your videos from years ago. I have watched numerous videos and still struggled. This video is simply THE BEST!
    You have done so well as an experienced programmer to be able to explain to us newby's how this work is such an easy to understand way.
    I have been copying & pasting other peoples bits of code randomly getting results and as my projects get more complicated, that approach does not work.
    Well done, you are the best teacher on CZcams for Arduino.
    No.1
    Numero uno!

  • @cschmitz
    @cschmitz Pƙed 5 lety +69

    This is a great explanation. The visuals really help wrap your head around the concept. Thanks for the vid!

  • @mariojulio993
    @mariojulio993 Pƙed 4 lety

    It becomes very easy to learn from you. You make everything looks so simple. Thanks

  • @shaswot
    @shaswot Pƙed 4 lety +2

    love the simplicity you bring into the explanation..... i had been reading up on example codes to understand millis function and scratching my head over and over. I wish i had found this video earlier...

  • @mykolasbauza
    @mykolasbauza Pƙed 3 lety +1

    Thank you for a wholesome explanation! Great stuff!

  • @jandobbelsteen8953
    @jandobbelsteen8953 Pƙed 5 lety +21

    The way you show it will usually work nicely. However, the interval at which you trigger your event will be at least eventInterval, but often just a little bit longer. This is because the loop also takes a little time. Sometimes you may want to be more sure that you always trigger your timed event at an 'exact' multiple of 'eventInterval'. In such cases it's better to update your 'previousTime' with the 'eventInterval', like so:
    previousTime = previousTime + eventInterval;

  • @wmrieker
    @wmrieker Pƙed měsĂ­cem

    I like that the if statement works even when the counter overflows so it'll keep going after 49 days and not miss a beat.

  • @vjdav6872
    @vjdav6872 Pƙed 4 lety +1

    Very clear explanation - I like that. I have taught some stuff in my one past life...Good job!

  • @epartsacc
    @epartsacc Pƙed 2 lety +1

    This is the best "millis()" tutorial I have ever seen. Thanks so much for explaining everything clearly.

  • @johnrees44..G4EIJ
    @johnrees44..G4EIJ Pƙed 4 lety +4

    I'm an 'old timer', and after a year of struggling with the theory and even the basic concept of 'millis', I've finally 'got it'!
    Thank you for the best Arduino 'millis' tutorial, and it's been my good fortune to find it..I look forward to watching more of your videos in future.
    John.. Bristol.. UK

  • @omkarkhade4602
    @omkarkhade4602 Pƙed 3 lety +1

    You are my favourite teacher.
    Thanks a bunch 😀

  • @martinest9458
    @martinest9458 Pƙed 4 lety +9

    what a Legend ! i wish i would of found your videos earlier! Absolutely the best explanation of things. Thank you Sir!

  • @pedrofelipebezerra4491
    @pedrofelipebezerra4491 Pƙed 3 lety +10

    The best explanation I've ever seen about millis()

    • @P44L
      @P44L Pƙed 2 lety

      true

  • @guidoramacciotti3503
    @guidoramacciotti3503 Pƙed 4 lety

    Very clear and simple explanation . Thank you!!

  • @amirmatrix9134
    @amirmatrix9134 Pƙed 2 lety

    When you saved me I really love that tutorial it's actually the best thing I've ever watched in the history of our doing it Tori old and I'm not even being hilarious that's the truth thanks man keep up the good work !

  • @AbhishekKanti
    @AbhishekKanti Pƙed rokem +2

    Thanks a lot man!
    I watched numerous videos, but wasn't able understand the concept of space time along with black holes.
    But now I'm confident enough to derive E=mcÂČ.đŸ’Ș

  • @ChadKapper
    @ChadKapper Pƙed 2 lety +1

    These lessons are so well done!!

  • @conversationwithgod272
    @conversationwithgod272 Pƙed 4 lety +1

    Really a great video.great people behind this Job...The visuals make everything so simple.thanks millions

  • @AerialPhotogGuy
    @AerialPhotogGuy Pƙed 5 lety +1

    Very Cool!!
    You come out with this video just in time for me to use millis() to toggle between volts and amps on an OLED display (without using delays, delays that long when added up would have made the loop way too long for this project).
    It took me a bit to figure out how to write the second section (like this:) (currentTime - previousTime >= interval + interval_1) I added the second interval time so I could set the volts code to display less time than the amps code since that's the one that needs to be read the most, but I got it. I'm sure I will eventually figure out an easier way but it's good for now and I'm proud of it! :-D
    The most valuable information in your video series is the fact that the timer continues to count up until the microcontroller is reset or turned off and on again.
    I now also realize that I can run more than one program from the same millis() function.
    It's kind of like calculating what needs to happen at different times of the day with a certain amount of time for each task. Yeah, I know, probably a screwed up analogy but there it is LOL :-)
    Until now I thought that the timer reset each time it was called for.
    Thanks!!
    Joe

  • @ahmedessam9092
    @ahmedessam9092 Pƙed 2 lety +1

    You make everything look simple .
    Thanks

  • @naboulsikhalid7763
    @naboulsikhalid7763 Pƙed 4 lety +1

    Great. first time explained, first-time understood. thank you very much

  • @ruwansamanpriya6085
    @ruwansamanpriya6085 Pƙed 5 lety +2

    Wow.. That was the greatest tutorial I have ever seen on youtube...Thank you...

  • @kashpatel898
    @kashpatel898 Pƙed 2 lety +1

    Excellent explanation and coding, with great visuals 👏

  • @VasilisKarastergios
    @VasilisKarastergios Pƙed 5 lety +1

    You are awesome, I can't wait for the next video! 👍👍

  • @jackmini1217
    @jackmini1217 Pƙed 2 lety

    enjoying this lessons. motivated to keep moving further. thanks a bunch.

  • @NCVluminati
    @NCVluminati Pƙed 2 měsĂ­ci

    thankyou, I needed this

  • @anitaobiorah4661
    @anitaobiorah4661 Pƙed 7 měsĂ­ci +1

    I found your video very helpful. Thank you!

  • @mohamedsoftline1
    @mohamedsoftline1 Pƙed 4 lety +1

    This is a great explanation.

  • @philipeanthonybattung3860
    @philipeanthonybattung3860 Pƙed 2 lety +1

    Oh you did great. This will help me on the annoying issue between RF transmitter not sending data because pulse sensor eats all the event

  • @hamouz718
    @hamouz718 Pƙed 4 lety +1

    Very entertaining channel, love your videos, keep them coming

  • @johnmitchell4836
    @johnmitchell4836 Pƙed 4 lety +1

    I think Micheal is THE BEST TRAINER out there to learn the basics of programming in Arduino!!! I've spent many hours watching all kinds of Arduino videos before I found Micheal's - Programming Electronics Academy. I signed up and watched ALL of his videos and it was well worth the money!!!
    I highly recommend it to anyone that is getting into Arduino programming. He is really, really good!!!

    • @programmingelectronics
      @programmingelectronics  Pƙed 4 lety

      Thanks so much for the kind words John! I am glad you are finding the training helpful!

  • @georgemugala4830
    @georgemugala4830 Pƙed 2 lety +1

    Best explanation ever on millis. Thanks alot bro

  • @jameskalenga7546
    @jameskalenga7546 Pƙed 3 lety +1

    😄 The millis code was smart. I love that logic

  • @ChandanKumar-kr2kj
    @ChandanKumar-kr2kj Pƙed 2 lety +1

    Great video. Thanks a lot for making this video.

  • @jesus2639
    @jesus2639 Pƙed 5 lety +6

    Thanks you make it so easy to learn

  • @reylepiten3722
    @reylepiten3722 Pƙed 3 lety +1

    Thanks for this great explanation..it really helps a lot...

  • @husseinnejah5337
    @husseinnejah5337 Pƙed 4 lety +1

    this is legendary! massive Thanks

  • @adadmohamedcherif192
    @adadmohamedcherif192 Pƙed 3 lety +1

    Thanks, very clear

  • @Khan_Rahman
    @Khan_Rahman Pƙed 3 lety +4

    why cant every tutorial be like this. Love it best

  • @maxabeles
    @maxabeles Pƙed 3 lety +1

    Simply grand.

  • @madhukeshnp
    @madhukeshnp Pƙed 4 lety +1

    The best explanation ever... the carrot example was just epic... every noob can understand..... thank you so much for the great tutorial.

  • @simplyjust-6912
    @simplyjust-6912 Pƙed 2 lety +1

    Tyyyy this was such a good video 😄

  • @RamyHelmy-vv3gq
    @RamyHelmy-vv3gq Pƙed 2 lety +1

    You really have easily way to explain each point,thanks

  • @omkarbansode6305
    @omkarbansode6305 Pƙed 5 měsĂ­ci +1

    thankyou so much ,it was a really big help

  • @P44L
    @P44L Pƙed 2 lety +1

    Very nice and easy to understand video, thanks!

  • @dezmach93
    @dezmach93 Pƙed rokem

    Wow, you're the best!!! thanks!

  • @hobarey5029
    @hobarey5029 Pƙed 4 lety +1

    the best tutorial on millis() ever... thanks...

  • @andrasparanici5491
    @andrasparanici5491 Pƙed 3 lety +1

    The best lesson!

  • @mlggeek1812
    @mlggeek1812 Pƙed 5 lety +1

    Great video! Going to implement it to my project ASAP

  • @Bianchi77
    @Bianchi77 Pƙed 8 měsĂ­ci +1

    Nice info, well done, thanks for sharing it :)

  • @emmanuelegel21
    @emmanuelegel21 Pƙed 4 lety +2

    This is awesome! the best explanation ever about millis function. Thanks a lot... Poor millis can't catch the carrot XD

  • @Val-eq4sg
    @Val-eq4sg Pƙed 5 lety +1

    Muchas gracias, At last someone took the time to explain this, I really needed it thank you kind GOD of code..

  • @hobarey5029
    @hobarey5029 Pƙed 5 lety +2

    very informative...thanks a lot...

  • @HARSH9909
    @HARSH9909 Pƙed 3 lety +1

    Such a nice video 🙂

  • @vasha1548
    @vasha1548 Pƙed 3 lety +1

    love it

  • @ludionieves5494
    @ludionieves5494 Pƙed 2 lety

    First off, thank you for your very informative video. I know this video is a few years old but I just came across it so my apologies for such a late comment.
    From your video, and from others, I understand that millis() starts as soon as the Arduino starts running and it keeps running, and increasing, as long as the Arduino is up, at least until it reaches its maximum value and restarts. I'm not sure that you actually CAN reset millis() from within code but everyone seems to say you shouldn't. Apparently doing so can break some libraries that rely on it.
    In order to understand millis() better I made a little project using code similar to yours to blink the built-in LED on and off at a preset interval while displaying current_elapsed_time (read from millis()) and previous_time, something similar to what you did in your code, and everything ran as expected. However, I noticed that every time I closed the serial monitor and reopened it the current_elapsed_time, which should display the current millis() value, returned to its starting value. The LED continues to blink at the proper interval while the monitor is closed, so I know the code is still running properly.
    Thinking there was a bug in my code I created a new, stripped-down program which only makes a call to millis() and prints the retrieved value to the serial monitor (see code below) and ran my test again. Same behavior. The code calls for the millis() value to be sent to the serial monitor directly - no massaging or assigning to a variable - and every time I close and reopen the serial monitor it appears to reset millis(). Not sure what is happening.
    Here is the simplified code I used to test:
    void setup() {
    Serial.begin(115200);
    }
    void loop() {
    Serial.println(millis());
    }
    The program runs as expected and, as you can see, there is nothing but the call to print the current value of millis() but millis() seems to be affected by the status of the serial monitor window. Is this normal? Am I missing something? đŸ€”
    Appreciate your help on this.
    Thank you.

  • @lmatrix6626
    @lmatrix6626 Pƙed 3 lety

    I think this is good idea if you need to step multiple stepper motors at the same time. When using delay() for moving stepper motors you can only move one stepper motor at a time

  • @katrinejensrud537
    @katrinejensrud537 Pƙed 4 lety +1

    fantastic video!thank you!

  • @michaelg6327
    @michaelg6327 Pƙed 2 lety +1

    GOD BLESS YOU! You saved me from days of suffering! You are my Hero!!!

  • @gamersglitch1922
    @gamersglitch1922 Pƙed měsĂ­cem

    Great explanation sir thank you đŸ˜â€

  • @lindsaydempsey5683
    @lindsaydempsey5683 Pƙed 3 lety +4

    Great video, thank you. Question, will that code work correctly when millis() overflows and starts counting up from zero?

  • @plugnugget3672
    @plugnugget3672 Pƙed rokem +1

    Smoooth animation bro. I love the homey type design, backdrop is really chill. Casually printing ice ice bb to the serial monitor lol. Explained it fantstic with the carrot comparison. Sending money but more importantly encouragment. Your great at this! keep going - seriously
    God Bless ;)
    - J. T

  • @attalaw36
    @attalaw36 Pƙed 4 lety +1

    thank you

  • @sainumkhey8849
    @sainumkhey8849 Pƙed rokem

    the best explain tutorial lesson thanks a lot 👍

  • @Technologic1993
    @Technologic1993 Pƙed 5 lety

    Thank you so much!

  • @fullbridgerecrifier
    @fullbridgerecrifier Pƙed měsĂ­cem +1

    Thank you,
    That saved my life ❀

  • @yuriu8
    @yuriu8 Pƙed 3 lety +1

    Wow mate thanks it amazing lessons

  • @Simoooooooonn
    @Simoooooooonn Pƙed 3 lety +2

    Great video

  • @mridulsarkar9015
    @mridulsarkar9015 Pƙed 3 lety +1

    Very nice explaination. Thanks

  • @ankushchauhan5752
    @ankushchauhan5752 Pƙed 3 lety +1

    Thank you sir i really appreciate that....😎😎

  • @CommenterTheMan
    @CommenterTheMan Pƙed 3 lety +1

    This is very informative

  • @muhammadbilal2000
    @muhammadbilal2000 Pƙed 3 lety +1

    Sweet explanation :) Thank you

  • @raafathabeeb6718
    @raafathabeeb6718 Pƙed 3 lety +1

    It was very useful information thanks

  • @umiturgutaswwsa
    @umiturgutaswwsa Pƙed 3 lety +1

    What a great video.

  • @soul-motionselby
    @soul-motionselby Pƙed rokem

    thank you very much

  • @lalogarcia6686
    @lalogarcia6686 Pƙed 2 lety

    great video!!

    • @programmingelectronics
      @programmingelectronics  Pƙed 2 lety

      Thank you!! If there are other types of videos you would like to see, I'd love to get your advice/feedback/recommendations Lalo!

  • @lucienramono
    @lucienramono Pƙed 3 lety +1

    so nicely explain thank you :)

  • @JeThKo_MSW
    @JeThKo_MSW Pƙed 3 lety +1

    it was taking me forever to figure out why mine wasn't working, then i found out i had "==" instead of ">=" lol
    thanks for the very clear and concise explanation!

  • @romycruz4498
    @romycruz4498 Pƙed 3 lety +1

    wow that's awesome and well explained ! The presentation is very nice and clean and understandable ! but... what is it again ? ah, needs to rewind this utube vlog again & again.

  • @punjabilog
    @punjabilog Pƙed 4 lety +1

    Thank you very much Sir... Great Video

  • @yassirbenmessaoud4587
    @yassirbenmessaoud4587 Pƙed 4 lety

    Very helpfull! , but how it looks when you have a Button with some conditions? Thanks!

  • @karanparve1734
    @karanparve1734 Pƙed 4 lety +1

    wow its amazing...

  • @bl4ckd0n4ut2
    @bl4ckd0n4ut2 Pƙed 2 lety +1

    Thanks mate

  • @HETRM
    @HETRM Pƙed 3 lety +1

    extremely helpfull!!!

  • @pixies4ever324
    @pixies4ever324 Pƙed 5 měsĂ­ci +1

    haha.. being mean with the carrot and millis() function. love it.

  • @brucesmith9144
    @brucesmith9144 Pƙed 4 lety +13

    One thing that should be added to the code is a trap for when the value of the millis() function rolls over. Consider if your Arduino is being used on a long term basis exceeding the long int value maximum. The user would want a way to handle that condition and continue the event timer. One quick way would be to check if the new millis() time is less than the previous time then the event timer loop can be reset.

    • @Ruudrad
      @Ruudrad Pƙed 2 lety +3

      The way the code is written, by subtraction of unsigned longs, it compensates for roll over. No additional checks are needed.

    • @____________________________.x
      @____________________________.x Pƙed rokem

      I was just wondering about rollover

    • @wadebrewer7212
      @wadebrewer7212 Pƙed 3 měsĂ­ci

      ​@@Ruudrad please explain a bit please. Is it in the code in your face code or firmware side that you simply do not see. As in...
      If I am using millis to run a tachometer on an engine, and using that tach value to hold ignition on (interlock if you will, if RPM drops it cuts ignition) it will not get the math wrong in seeing the correct rpm?
      The long term use case here is; the arduino is going to be powered on indefinitely monitoring a signal from inverter to start generator. Once the inverter calls, the arduino will sequence and start the generator. I dont want the roll over to cause am issue with a tach calculation inadvertently shutting down the generator.

    • @Ruudrad
      @Ruudrad Pƙed 3 měsĂ­ci

      @@wadebrewer7212 I initially also thought roll over would cause problems, however if you use longs _and_ subtract the unsigned longs (holding the output of the millis() function and/or the millis() function itself) the calculation will also work when millis() rolls over (I.E. goes from almost its maximum to just over zero). Strange but true thanks to how subtraction works on a microprocessor, which is NOT exactly the same as mathematical subtraction.

    • @wadebrewer7212
      @wadebrewer7212 Pƙed 3 měsĂ­ci

      @Ruudrad Thank you tons. I was about to start researching for a work around. The community around this stuff is pretty great. Every once in a while you get the tool that talks down or "why do you want to do that project"....because I can....and at least for now...I am allowed.....lol.
      Even in my situation....reading and counting every quarter or half second for revolutions....even if it did send a call to shut off the system, the cycles are so quick I don't think it would actually shut down. But...sounds is like it's non issue anyway.
      Again, thank you for the input and much appreciated.

  • @martinsiolowosoran5242
    @martinsiolowosoran5242 Pƙed 4 lety +1

    very interesting, a good teacher

  • @airduino5484
    @airduino5484 Pƙed 2 lety +1

    fantastic

  • @hanac5586
    @hanac5586 Pƙed 3 lety +1

    Thank you so much đŸ€
    + extra points from ice ice baby

  • @callumjones5288
    @callumjones5288 Pƙed 3 lety

    This is great! However, how could i for example programme an event to take readings of from a temperature sensor for 1 minute? do i use debounceDelay?

  • @vamshikp.j.8592
    @vamshikp.j.8592 Pƙed 2 měsĂ­ci +1

    amazing explanationnnnnn

  • @shrikantnikam2426
    @shrikantnikam2426 Pƙed 4 lety +1

    Is it possible to make delay function in separate tab and use millis single line command like delay? For make code more simpler

  • @Le0mach
    @Le0mach Pƙed 2 lety +1

    Hi! I'd like to thank you very much for the excelent explanation! I was struggling a bit with millis() until watched you videos. It saved me a lot of time and helped me to understand why my project wasn't working (that's the best way to learn something, by fixing it's bugs)! Keep on doing this awesome job, man!

  • @Krystino
    @Krystino Pƙed rokem

    Amazing explanation, great thanks. Thus, there is something I don't manage to understand. If I want a start point not equal to the interval, I mean for example an event to start at 30 seconds, and to be repeated 60 seconds later on. Do I need one more variable to be created? Kind regards.

  • @HillsWorkbench
    @HillsWorkbench Pƙed 5 lety +1

    This detail on the mills() function has been very helpful to me, explains why a program I wrote a few years ago doesn't quite work as expected.

  • @peterchrien
    @peterchrien Pƙed rokem +1

    very nice video

  • @themecue9732
    @themecue9732 Pƙed 4 lety

    How would you blink with this or {pin HIGH/LOW alternating} on "eventInterval" ?

  • @j.w.8663
    @j.w.8663 Pƙed 6 měsĂ­ci +1

    @5:31 Aah, I see what you did there: The Neutron Dance! 😆