Advertisement
heimi

patch for Arduino Timer

Dec 5th, 2013
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 2.69 KB | None | 0 0
  1. diff -u Timer-master/Event.cpp Timer/Event.cpp
  2. --- Timer-master/Event.cpp  2013-10-20 03:24:16.000000000 +0200
  3. +++ Timer/Event.cpp 2013-09-28 23:49:09.270507800 +0200
  4. @@ -34,7 +34,7 @@
  5.     eventType = EVENT_NONE;
  6.  }
  7.  
  8. -void Event::update(void)
  9. +uint8_t Event::update(void)
  10.  {
  11.     unsigned long now = millis();
  12.     if (now - lastEventTime >= period)
  13. @@ -52,9 +52,20 @@
  14.         }
  15.         lastEventTime = now;
  16.         count++;
  17. -   }
  18. +
  19.     if (repeatCount > -1 && count >= repeatCount)
  20.     {
  21.         eventType = EVENT_NONE;
  22.     }
  23. +   return true;
  24. +   }
  25. +   return false;
  26. +}
  27. +
  28. +unsigned long Event::next(void) {
  29. +   unsigned int next = lastEventTime + period - millis();
  30. +   /* In der Callback Methode selbst ist lastEventtime noch nicht aktualisiert.
  31. +   */
  32. +   if (next == 0) { next = period; }
  33. +   return next;
  34.  }
  35. diff -u Timer-master/Event.h Timer/Event.h
  36. --- Timer-master/Event.h    2013-10-20 03:24:16.000000000 +0200
  37. +++ Timer/Event.h   2013-09-28 23:48:58.965820300 +0200
  38. @@ -34,7 +34,7 @@
  39.  
  40.  public:
  41.    Event(void);
  42. -  void update(void);
  43. +  uint8_t update(void);
  44.    int8_t eventType;
  45.    unsigned long period;
  46.    int repeatCount;
  47. @@ -43,6 +43,7 @@
  48.    void (*callback)(void);
  49.    unsigned long lastEventTime;
  50.    int count;
  51. +  unsigned long next(void);
  52.  };
  53.  
  54.  #endif
  55. diff -u Timer-master/Timer.cpp Timer/Timer.cpp
  56. --- Timer-master/Timer.cpp  2013-10-20 03:24:16.000000000 +0200
  57. +++ Timer/Timer.cpp 2013-11-20 21:51:41.577148400 +0100
  58. @@ -109,15 +109,17 @@
  59.     }
  60.  }
  61.  
  62. -void Timer::update(void)
  63. +uint8_t Timer::update(void)
  64.  {
  65. +   boolean fired = false;
  66.     for (int8_t i = 0; i < MAX_NUMBER_OF_EVENTS; i++)
  67.     {
  68.         if (_events[i].eventType != EVENT_NONE)
  69.         {
  70. -           _events[i].update();
  71. +           fired |= _events[i].update();
  72.         }
  73.     }
  74. +   return fired;
  75.  }
  76.  
  77.  int8_t Timer::findFreeEventIndex(void)
  78. @@ -131,3 +133,16 @@
  79.     }
  80.     return NO_TIMER_AVAILABLE;
  81.  }
  82. +
  83. +unsigned long Timer::next(void) {
  84. +   unsigned long min = 0;
  85. +   unsigned long next;
  86. +   for (int8_t i = 0; i < MAX_NUMBER_OF_EVENTS; i++) {
  87. +       if (_events[i].eventType != EVENT_NONE) {
  88. +           next = _events[i].next();
  89. +           if (min == 0) { min = next; }
  90. +           else if (next < min) { min = next; }
  91. +       }
  92. +   }
  93. +   return min;
  94. +}
  95. \ No newline at end of file
  96. diff -u Timer-master/Timer.h Timer/Timer.h
  97. --- Timer-master/Timer.h    2013-10-20 03:24:16.000000000 +0200
  98. +++ Timer/Timer.h   2013-09-28 23:50:27.280273400 +0200
  99. @@ -55,8 +55,8 @@
  100.     */
  101.    int8_t pulseImmediate(uint8_t pin, unsigned long period, uint8_t pulseValue);
  102.    void stop(int8_t id);
  103. -  void update(void);
  104. -
  105. +  uint8_t update(void);
  106. +  unsigned long next(void);
  107.  protected:
  108.    Event _events[MAX_NUMBER_OF_EVENTS];
  109.    int8_t findFreeEventIndex(void);
  110. Common subdirectories: Timer-master/examples and Timer/examples
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement