Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 15th, 2012  |  syntax: None  |  size: 1.16 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Performing a function after x time
  2. unsigned long previousMillis = 0; // last time update
  3. long interval = 2000; // interval at which to do something (milliseconds)
  4.  
  5. void setup(){
  6. }
  7.  
  8. void loop(){
  9.   unsigned long currentMillis = millis();
  10.  
  11.   if(currentMillis - previousMillis > interval) {
  12.      previousMillis = currentMillis;  
  13.  
  14.      // do something
  15.   }
  16. }
  17.        
  18. class Timer
  19. {
  20. public:
  21.     Timer(void);
  22.     void set_max_delay(unsigned long v);
  23.     void set(void);
  24.     boolean check(void);
  25. private:
  26.     unsigned long max_delay;
  27.     unsigned long last_set;
  28. };
  29.  
  30. Timer::Timer(void)
  31. {
  32.     max_delay = 3600000UL; // default 1 hour
  33. }
  34.  
  35. void Timer::set_max_delay(unsigned long v)
  36. {
  37.     max_delay = v;
  38.     set();
  39. }
  40.  
  41. void Timer::set()
  42. {
  43.     last_set = millis();
  44. }
  45.  
  46. boolean Timer::check()
  47. {
  48.     unsigned long now = millis();
  49.     if (now - last_set > max_delay) {
  50.         last_set = now;
  51.         return true;
  52.     }
  53.     return false;
  54. }
  55.  
  56. Timer timer;
  57.  
  58. void setup()
  59. {
  60.    timer.set_max_delay(60000); // 1 minute
  61. }
  62.  
  63. void loop()
  64. {
  65.    boolean some_condition = false;
  66.    if (some_condition) {
  67.        timer.set();
  68.    }
  69.    if (timer.check()) {
  70.       // nothing happened for a long time
  71.    }
  72.    delay(500);
  73. }