Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
viliamk
Published © LGPL

Easy and transparent non-blocking code using millis()

How to implement non-blocking code with an example of 3 independant processes

BeginnerProtip1 hour270
Easy and transparent non-blocking code using millis()

Things used in this project

Hardware components

Arduino Nano
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

Non-blocking code

Arduino
unsigned long every200millis, every5seconds, every29seconds; 

void setup() {
  every200millis = millis(); 
  every5seconds = every200millis; 
  every29seconds = every200millis;
}

void loop() {
  if (MillisTimer(&every200millis, 200)) DoProcess1(); 
  if (MillisTimer(&every5seconds, 5000)) DoProcess2(); 
  if (MillisTimer(&every29seconds, 29000)) DoProcess3(); 
}

bool MillisTimer(unsigned long* t, long waitMillis) { 
  unsigned long actualTime = millis();
  if ((actualTime - *t) > waitMillis) { 
    *t = actualTime; 
    return true; 
  } 
  if (actualTime < *t) *t = actualTime;     //this row treats overflow of millis() 
  return false; 
} 

Credits

viliamk
14 projects • 5 followers
Contact

Comments

Please log in or sign up to comment.