AskSin++
PushButton.h
1 //- -----------------------------------------------------------------------------------------------------------------------
2 // AskSin++
3 // 2017-03-20 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
4 //- -----------------------------------------------------------------------------------------------------------------------
5 
6 #ifndef __PUSHBUTTON_H__
7 #define __PUSHBUTTON_H__
8 
9 #include <AlarmClock.h>
10 
11 namespace as {
12 
13 template <uint8_t PRESSEDSTATE>
14 class PushButton : public Alarm {
15 private:
16  uint8_t pin;
17 public:
18  PushButton () : Alarm(0), pin(0) { async(true); }
19  virtual ~PushButton () {}
20 
21  virtual void trigger (AlarmClock& clock) {
22  digitalWrite(pin,PRESSEDSTATE==HIGH ? LOW : HIGH);
23  }
24 
25  void init (uint8_t p) {
26  pin = p;
27  pinMode(p,OUTPUT);
28  digitalWrite(pin,PRESSEDSTATE==HIGH ? LOW : HIGH);
29  }
30 
31  void press (uint16_t millis) {
32  digitalWrite(pin,PRESSEDSTATE==HIGH ? HIGH : LOW);
33  sysclock.cancel(*this);
34  set(millis2ticks(millis));
35  sysclock.add(*this);
36  }
37 };
38 
39 }
40 
41 #endif
as::Alarm
Definition: Alarm.h:15
as::PushButton
Definition: PushButton.h:14
as::AlarmClock
Definition: AlarmClock.h:32