****If you like this, I think you'll like the premium Arduino training we offer. You can check it out here**** bit.ly/3lHyzcB
@Darkstar3272 жыл бұрын
please make a video on arduino sensor kit i need help on it btw your videos are amazing
@AlienRelics5 жыл бұрын
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.
@programmingelectronics5 жыл бұрын
Thanks for bringing this up Steve!
@AlienRelics5 жыл бұрын
@@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.
@johncorbishley15484 жыл бұрын
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 KZbin for Arduino. No.1 Numero uno!
@johnrees44..G4EIJ4 жыл бұрын
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
@programmingelectronics4 жыл бұрын
Excellent! Great to hear John!
@cschmitz5 жыл бұрын
This is a great explanation. The visuals really help wrap your head around the concept. Thanks for the vid!
@programmingelectronics5 жыл бұрын
Thanks for watching!
@johnmitchell48364 жыл бұрын
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!!!
@programmingelectronics4 жыл бұрын
Thanks so much for the kind words John! I am glad you are finding the training helpful!
@epartsacc2 жыл бұрын
This is the best "millis()" tutorial I have ever seen. Thanks so much for explaining everything clearly.
@programmingelectronics2 жыл бұрын
Glad it was helpful! Thanks so much for the note!
@plugnugget3672 Жыл бұрын
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
@programmingelectronics Жыл бұрын
Appreciate that - thanks for your generosity J.T.!
@jandobbelsteen89535 жыл бұрын
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;
@programmingelectronics5 жыл бұрын
That's a fantastic point - thanks for that adding that Jan!
@shaswot4 жыл бұрын
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...
@programmingelectronics4 жыл бұрын
Glad it helped!
@whitejtw4 ай бұрын
Wow this is so excellent. I've been bumping up against limitations imposed by my reluctance to learn this methodology but now I'm halfway through the video and excited about the possibilities this engenders.
@programmingelectronics3 ай бұрын
Great! Timing can be a bear. Another thing you might consider is learning about RTOS for scheduling tasks.
@pedrofelipebezerra44913 жыл бұрын
The best explanation I've ever seen about millis()
@P44L3 жыл бұрын
true
@michaelg63273 жыл бұрын
GOD BLESS YOU! You saved me from days of suffering! You are my Hero!!!
@programmingelectronics3 жыл бұрын
Glad it helped!
@wmrieker6 ай бұрын
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.
@madhukeshnp4 жыл бұрын
The best explanation ever... the carrot example was just epic... every noob can understand..... thank you so much for the great tutorial.
@programmingelectronics4 жыл бұрын
Glad it helped!
@matrix91342 жыл бұрын
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 !
@brucesmith91445 жыл бұрын
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.
@Ruudrad2 жыл бұрын
The way the code is written, by subtraction of unsigned longs, it compensates for roll over. No additional checks are needed.
@____________________________.x Жыл бұрын
I was just wondering about rollover
@wadebrewer72129 ай бұрын
@@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.
@Ruudrad9 ай бұрын
@@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.
@wadebrewer72129 ай бұрын
@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.
@philipeanthonybattung38602 жыл бұрын
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
@programmingelectronics2 жыл бұрын
Great! Glad it helped!
@martinest94584 жыл бұрын
what a Legend ! i wish i would of found your videos earlier! Absolutely the best explanation of things. Thank you Sir!
@programmingelectronics4 жыл бұрын
Thanks a ton! Glad they were helpful.
@AbhishekKanti2 жыл бұрын
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².💪
@programmingelectronics2 жыл бұрын
Glad it helped :)
@kkaelyn0024 сағат бұрын
Amazing explanation and visuals to illustrate the more abstract concepts, cheers!
@JeThKo_MSW3 жыл бұрын
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!
@programmingelectronics3 жыл бұрын
Thanks a ton for watching - I am glad it helped!
@Khan_Rahman4 жыл бұрын
why cant every tutorial be like this. Love it best
@mykolasbauza4 жыл бұрын
Thank you for a wholesome explanation! Great stuff!
@omkarkhade46024 жыл бұрын
You are my favourite teacher. Thanks a bunch 😀
@ahmedessam90923 жыл бұрын
You make everything look simple . Thanks
@programmingelectronics3 жыл бұрын
I hope it helped! Timing stuff can get confusing quick!
@georgemugala48302 жыл бұрын
Best explanation ever on millis. Thanks alot bro
@programmingelectronics2 жыл бұрын
Thanks! Glad it helped!
@RamyHelmy-vv3gq2 жыл бұрын
You really have easily way to explain each point,thanks
@programmingelectronics2 жыл бұрын
Thank you! I hope it helped!
@vjdav68724 жыл бұрын
Very clear explanation - I like that. I have taught some stuff in my one past life...Good job!
@jameskalenga75464 жыл бұрын
😄 The millis code was smart. I love that logic
@ludionieves54942 жыл бұрын
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.
@ensarija3 жыл бұрын
Thanks for the extensive explenation. I made function out of this, which can receive interval in milliseconds and counter number, so it can be called multiple times and keep prevousTime in array for multiple counters. if(execDelay(2,1000)) { // Do stuff } bool execDelay(int instance, unsigned long v) { unsigned long prevTime[] = {}; if(currTime - prevTime[instance] >= v) { prevTime[instance] = currTime; return true; } else { return false; } }
@programmingelectronics3 жыл бұрын
Cool! Thanks for sharing that code!
@AdemOmerovicBA3 жыл бұрын
Just one correction, define prevTime outside the function.
@emmanuelegel214 жыл бұрын
This is awesome! the best explanation ever about millis function. Thanks a lot... Poor millis can't catch the carrot XD
@rupert2743 жыл бұрын
You're mean, Emmanuel!
@romycruz44984 жыл бұрын
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.
@ruwansamanpriya60855 жыл бұрын
Wow.. That was the greatest tutorial I have ever seen on youtube...Thank you...
@programmingelectronics5 жыл бұрын
Glad you enjoyed it!
@jesus26395 жыл бұрын
Thanks you make it so easy to learn
@programmingelectronics5 жыл бұрын
Thanks - much appreciated!
@ChadKapper3 жыл бұрын
These lessons are so well done!!
@programmingelectronics3 жыл бұрын
Thanks so much Chad - really appreciate that!
@lmatrix66264 жыл бұрын
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
@Jevajs4 жыл бұрын
you could do the same logic and prob have better runtime using (inside the loop) if (millis() % interval == 0) { // do whatever you want here for every x amt of milliseconds // where x = interval }
@banzaiiiiii3 жыл бұрын
In an Ideal situation, you're right. But in reality millis would almost never hit exactly your interval. That's why >= is used in the video, but with your code >= wouldn't work.
@mariojulio9934 жыл бұрын
It becomes very easy to learn from you. You make everything looks so simple. Thanks
@conversationwithgod2724 жыл бұрын
Really a great video.great people behind this Job...The visuals make everything so simple.thanks millions
@programmingelectronics4 жыл бұрын
Really appreciate that! Thanks!
@annie_obi Жыл бұрын
I found your video very helpful. Thank you!
@programmingelectronics Жыл бұрын
Thanks so much for watching Anita!
@AerialPhotogGuy5 жыл бұрын
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
@programmingelectronics5 жыл бұрын
Thanks also for sharing your addition on the code - very cool!
@kashpatel8982 жыл бұрын
Excellent explanation and coding, with great visuals 👏
@programmingelectronics2 жыл бұрын
Thanks so much!
@jackmini12173 жыл бұрын
enjoying this lessons. motivated to keep moving further. thanks a bunch.
@programmingelectronics3 жыл бұрын
Great to hear!
@lindsaydempsey56834 жыл бұрын
Great video, thank you. Question, will that code work correctly when millis() overflows and starts counting up from zero?
@ChandanKumar-kr2kj2 жыл бұрын
Great video. Thanks a lot for making this video.
@programmingelectronics2 жыл бұрын
Thank you! Thanks so much for watching!
@Le0mach3 жыл бұрын
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!
@programmingelectronics3 жыл бұрын
Thanks so much for the note Leonardo!
@hobarey50295 жыл бұрын
the best tutorial on millis() ever... thanks...
@programmingelectronics5 жыл бұрын
Thank you!
@stevenstraker51052 жыл бұрын
Great video, thanks! One comment though, I think we could also use a modulus operator to manage the event intervals. This would also cause it to run at millis() == 0, but we can use an additional clause to limit this. Perhaps something like: if( currentTime > 0 && currentTime % eventInterval == 0 ) { ...
@stevenstraker51052 жыл бұрын
Actually, it seemed like this would work in theory, but there needs to be a buffer, as the code would run multiple times at each interval. I guess this is why the lastTime variable is introduced, so that we can ensure the code runs only once per interval. Makes sense - I stand corrected!
@j.w.866311 ай бұрын
@5:31 Aah, I see what you did there: The Neutron Dance! 😆
@P44L3 жыл бұрын
Very nice and easy to understand video, thanks!
@programmingelectronics3 жыл бұрын
Thanks for watching!
@guidoramacciotti35034 жыл бұрын
Very clear and simple explanation . Thank you!!
@naboulsikhalid77635 жыл бұрын
Great. first time explained, first-time understood. thank you very much
@programmingelectronics5 жыл бұрын
Awesome!
@pixies4ever32411 ай бұрын
haha.. being mean with the carrot and millis() function. love it.
@programmingelectronics11 ай бұрын
Thanks so much for watching!!
@HillsWorkbench5 жыл бұрын
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.
@programmingelectronics5 жыл бұрын
Awesome - I am glad it helped!
@hamouz7184 жыл бұрын
Very entertaining channel, love your videos, keep them coming
@programmingelectronics4 жыл бұрын
Thanks - much appreciated!
@reylepiten37224 жыл бұрын
Thanks for this great explanation..it really helps a lot...
@fullbridgerecrifier7 ай бұрын
Thank you, That saved my life ❤
@programmingelectronics7 ай бұрын
Glad it helped!
@omkarbansode630511 ай бұрын
thankyou so much ,it was a really big help
@programmingelectronics11 ай бұрын
Great to hear!
@simplyjust-69122 жыл бұрын
Tyyyy this was such a good video 😄
@programmingelectronics2 жыл бұрын
Glad you liked it!! Thanks so much for watching!
@husseinnejah53374 жыл бұрын
this is legendary! massive Thanks
@programmingelectronics4 жыл бұрын
Thanks!
@o-h-15 жыл бұрын
At 6:53 I was wondering why eventInterval was an unsigned long. Isn’t it a const with a value of 1000? Can’t it be a int?
@alejandroperez53685 жыл бұрын
You need to use the same type of variables when working with mills, so it needs to be an unsigned long. When doing some math with those variables, you need to use the UL suffix in the numbers (otherwise they are treated as integers and you get into trouble. Just check his first video about mills() to understand this.
@RixtronixLAB Жыл бұрын
Nice info, well done, thanks for sharing it :)
@programmingelectronics Жыл бұрын
Thanks for watching!
@mlggeek18125 жыл бұрын
Great video! Going to implement it to my project ASAP
@programmingelectronics5 жыл бұрын
Thank you! I am glad it helped - best of luck!
@NCVluminati7 ай бұрын
thankyou, I needed this
@davidsvarrer89422 жыл бұрын
Hey Programming Electronics Academy. Your code is good if you want 1000 milliseconds between events, which ie. takes 10 milliseconds to execute. However. If you want things to happen every 1000 milliseconds, sharp, then you will need to add 1000 to the carrot, instead of moving ahead with the relative time. You can say, that you would add 1000 to the limit of 1000 every time, making an absolute goal, rather than adding to the relative currentTime.
@TrentSmith-m4h Жыл бұрын
Same idea…. Slightly different solution: if(millis() % 1000 == 0)) { // make your fish taco } IOW use modulus operator… any number divided by 1000, then take the remainder. When remainder is zero, millis is a multiple of 1000. Also: You can make an LED ‘flicker’ by using the random function to change the 1000.
@edgarbonet17 ай бұрын
This is a bad idea for two reasons: 1. If your loop() ever takes more than one millisecond to run, you may well miss the specific millisecond you where aiming for. 2. millis() doesn't count every single millisecond: as it is only updated every 1024 µs, it skips one value roughly every 42.7 ms (it skips 42, 85, 127, 170, 213, etc.).
@maxabeles3 жыл бұрын
Simply grand.
@VasilisKarastergios5 жыл бұрын
You are awesome, I can't wait for the next video! 👍👍
@programmingelectronics5 жыл бұрын
Thanks!
@mohamedsoftline14 жыл бұрын
This is a great explanation.
@Sarvesh11107 ай бұрын
Great explanation sir thank you 😁❤
@mridulsarkar90153 жыл бұрын
Very nice explaination. Thanks
@programmingelectronics3 жыл бұрын
Glad you liked it! Thanks for watching!
@CommenterTheMan3 жыл бұрын
This is very informative
@programmingelectronics3 жыл бұрын
Glad it was helpful!
@Simoooooooonn3 жыл бұрын
Great video
@programmingelectronics3 жыл бұрын
Thanks!
@sainumkhey8849 Жыл бұрын
the best explain tutorial lesson thanks a lot 👍
@horrorhotel462905 жыл бұрын
How do you handle the overflow of the millis function ? Like this, code will run fine for 49 days and then stop working. You cannot be sure what exactly previoustime will be the last time the event occurs before overflow because of small inaccuracies that will sum up until the 49 days mark Somehow you need to know when to reset previous time without loosing information about the time lapsed since the last event This is a purely hypothetical example, but lets say ypu are building an arduino based pacemaker - you absolutely need to always reliably trigger a pulse at the same intervals, while sending some data like battery percentage etc to an external host or whatever How do you prevent the device from missing or falsely timing an event after 49 days?
@howardhecht17835 жыл бұрын
See forum.arduino.cc/index.php?topic=122413.0, in particular message #2 & #10 and also www.baldengineer.com/arduino-how-do-you-reset-millis.html
@AlienRelics5 жыл бұрын
The fact that you are using unsigned long for currentTime, previousTime, and interval makes the subtraction wrap around and work correctly. No need to reset the millis() timer. if (currentMillis - previousMillis >= interval) { //when currentMillis wraps around and previousMillis subtracts, the //answer is likewise wrapped back around and the difference is correct previousMillis += interval; // does not accumulate timing errors
@negrilamarius8977 Жыл бұрын
Helloo, if currentTime = "MAXIMUM of millis()" then next currentTime(or next value of millis() ) will be : Case 1 : or remaining to "MAXIMUM of millis()" or Case 2: next value will be 0.Which case do you think that will happened?. If Case 1: currentTime = "MAXIMUM of millis()" minus previousTime (which it will be olso "MAXIMUM of millis()") = 0 (so, the difference will be zero and all the time will not >= SetTime. IfCase 2: if millis after 49 days will be automatically 0 then difference 0 - "MAXIMUM of millis()" ('the last value of previusTime) will be negative , so, in this case it a must to use all the time ABS(currentTime-PreiousTime) >=SetTime. So which case it happening!? An alternative solution is to use a function to reset automatically arduino ( I tested this function: void(* resetFunction) (void)=0; and, after, in loop rutine call this function using: resetFunction(); if millis()>=4000000000UL ....resetFunctio() .. .This resetFunction is very fast.Write , as example, Serial.print(F("abc..")); after calling resetFunction(); and you will see that Serial.print(F("abc..")); will not happened because arduino it was reset be resetFunction(); OR, if someone cand wait ~ 49 days to see what happend with value of millis() function after this period , please let me know :)) .Maybe will happened one of both cases 1 or 2 ...or neither.
@Krystino Жыл бұрын
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.
@ankushchauhan57523 жыл бұрын
Thank you sir i really appreciate that....😎😎
@HARSH99094 жыл бұрын
Such a nice video 🙂
@Val-eq4sg5 жыл бұрын
Muchas gracias, At last someone took the time to explain this, I really needed it thank you kind GOD of code..
@programmingelectronics5 жыл бұрын
Glad it helped!
@katrinejensrud5375 жыл бұрын
fantastic video!thank you!
@programmingelectronics5 жыл бұрын
Thanks for watching!
@muhammadbilal20004 жыл бұрын
Sweet explanation :) Thank you
@programmingelectronics4 жыл бұрын
Glad it was helpful! Thanks for watching!
@HeadakusMaximus2 жыл бұрын
Would using a modulus comparison rather than subtraction be a bad thing to do?
@programmingelectronics2 жыл бұрын
I think that's a great idea. I really ought to use the modulus more often.
@martinsiolowosoran52425 жыл бұрын
very interesting, a good teacher
@programmingelectronics5 жыл бұрын
Thank you!
@CapnAhabChannel Жыл бұрын
Why not use the modulus function? If (currentTime % eventInterval == 0). It wouldn't be precise on the rollover (unless the interval was a power of 2) but it allows for lots of different intervals with minimal code.
@Ivan-wb4id4 жыл бұрын
After some time , millis wont be precise. Is there a way to restart millis after 1 second has passed. Like count up to 1000 milis, and then restert it to count again to 1000?
@DesertVox5 жыл бұрын
Is there a way to reset millis() without turning the Arduino off? That could be integrated into the code so that the project can go on for more than the 49 days limit.
@programmingelectronics5 жыл бұрын
From what I can gather, the best way to "keep it going" is to not reset the timer, but to handle in code the overflow event.
5 жыл бұрын
@@programmingelectronics Thanks. I understand you keep easy for beginners. But what you have shown will stop working after 49 days. Is that good programming? At the very least, you should have cleary mentioned this.
@DocDay55 жыл бұрын
@ If you do the comparison correctly, the overflow calculation can be handled. Consider if( millis()-Timer >= INTERVAL ) // will fire every INTERVAL milliseconds { // Place code here Timer += INTERVAL; // Move Timer to the location that should have fired . } If you test millis() - Timer will work around a wrap.
@JohnSmith-lp5en2 жыл бұрын
Little help or suggestion. I'm new to the Arduino programing or Arduino as a whole but I've running into a dilemma in which I'm looking for some guidance. So let me set the stage, I have a sketch that constantly flashes LED lights (Nav Lights) then I have a function that when a button is pushed it should play some music and flash another LED while the other LEDs (Nav Light) should continue flashing. However when I the delay function, the sound plays and the second LED flashes but the first flashing LED's (Nav Lights) pause. I have tried multiple different ways to try an use the millis() function but when I push the momentary button I can't get the SD card to play sound and the second LED to flash. Is using the millis() function the right thing to use or do I need to do something else. your lesson 4 started to discuss this but it didn't give an example.
@programmingelectronics2 жыл бұрын
Hi John, great question here, and just so you know, timing can be super tough sometimes, so if you have a difficult time with it, you are in good company. I could be wrong here, but it sounds like you are using delay() in the function you are calling from your loop. If this is the case, when your function gets called, it will delay your loop, until you function is done running, and then return to the loop. Maybe you have realized this already... Another caveat to note here is that if you are using a library to play noises from an SD card, some of the functions in that library *may* be blocking code -> that is, code that holds up the program for a bit, while it executes. This may, or may not be the case, but it is something you'll have to figure out. The millis() construct that I go through in these lessons is definitely a way to handle timing different events but sometimes it depends on situation. Not sure this helps much or not!
@kpro-ke5hd Жыл бұрын
That actually make sanse,Thanks for the vod.
@kpro-ke5hd Жыл бұрын
We dont have to crate a variable(previousTime) if we only wanna execuit the if once.but to update the timing we have to substract the (currentTime from the previousTime)
@hanac55864 жыл бұрын
Thank you so much 🤍 + extra points from ice ice baby
@shrikantnikam24264 жыл бұрын
Is it possible to make delay function in separate tab and use millis single line command like delay? For make code more simpler
@vamshikp.j.85928 ай бұрын
amazing explanationnnnnn
@programmingelectronics8 ай бұрын
Thanks!
@ahmetozdemir71732 жыл бұрын
Thanks for video. I'm trying to understand this; Considering that we use delay depending on the if function; sample; sensor = 8; led out = 11; if(sensor == 1) { digitalWrite(sensor, HIGH); delay(10000); } I wrote it roughly like this. In this case, let's assume that the sensor in pin is active and the delay function starts. In this case, the system is in standby. In the first 5 seconds of this wait, if the value of the sensor pin changes, will the delay be disabled? that is, does the system exit without waiting at 5 seconds and start working again? otherwise, even if the pin value changes and if equality is broken, will the system continue to wait until 10 seconds is up?
@programmingelectronics2 жыл бұрын
Great question Ahmet! Once the program hits the delay - it stops in its tracks - nothing will happen - no new sensor readings, no anything, until that delay time has passed. Let's say what you want is to wait until the sensor reading changes to some value/range, what you might try is something like a while loop that uses the sensor reading as the condition, and then inside the while loop keep reading and updating the sensor value. Not sure that is what you're after, but just a thought. Best of luck!
@ahmetozdemir71732 жыл бұрын
@@programmingelectronics What I'm trying to do is that the data from the sensor is contuinue without stopping. That is, the leds turn on according to the data from the sensor, however, when the sensor data changes, the leds turn off momentarily. I guess this can be done with the millis function. Also, I was able to understand the millis function for the first time when I listened to your videos. Thank you for this valuable explanation.
@dezmach932 жыл бұрын
Wow, you're the best!!! thanks!
@Namai.5 ай бұрын
very well explained, thx
@programmingelectronics5 ай бұрын
Glad it was helpful! Thank you for watching!
@neelmehta1004 жыл бұрын
I like to imagine the millis being waves in the ocean and we are the Surfers trying to ride those waves.