diff options
Diffstat (limited to 'Mussel/Mussel.cpp')
-rw-r--r-- | Mussel/Mussel.cpp | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/Mussel/Mussel.cpp b/Mussel/Mussel.cpp index b8cc4da..7cd7cf4 100644 --- a/Mussel/Mussel.cpp +++ b/Mussel/Mussel.cpp @@ -50,6 +50,16 @@ Mussel::Mussel(int attitude, uint8_t pin, uint8_t type) /// Setup function void Mussel::begin() { switch(_attitude) { + case 1: + _boolState = HIGH; + + // reset timer + _time = millis(); + + // use INPUT_PULLDOWN to signal when the button is held down + // (not PULLUP which signals when it is released) + pinMode(_pin, INPUT_PULLDOWN); + break; #ifdef DHT_H case 3: mussel_dht.begin(); @@ -82,7 +92,7 @@ String Mussel::desc() { switch(_attitude) { case 1: - _str = "closed 10 seconds every 50 seconds"; + _str = "closed 10 seconds every 50 seconds and on button push"; break; case 2: _str = "closed 4 seconds every 8 seconds"; @@ -119,11 +129,24 @@ byte Mussel::read() { switch(_attitude) { case 1: - // 42 if current second modulo 60 is below 50, else 2 - _byte = static_cast<byte>( - (static_cast<unsigned long>(millis() / 1000) % 60) < 50 - ? 42 - : 2); + if (digitalRead(_pin) + // TODO: account for rollover + or (millis() - _time) > MUSSEL_NORMAL_PACE * 1000 + ) { + _byte = 2; + _boolState = HIGH; + + // reset timer + _time = millis(); + } else if (_boolState == HIGH + and (millis() - _time) > MUSSEL_STRESS_PACE * 1000 + ) { + _byte = 42; + _boolState = LOW; + + // reset timer + _time = millis(); + } break; case 2: // 42 if current second modulo 12 is below 9, else 2 |