This commit is contained in:
Wolfgang Hottgenroth
2015-05-27 11:16:03 +02:00
commit bdc2c905cf
10 changed files with 899 additions and 0 deletions

114
hardware.cpp Normal file
View File

@ -0,0 +1,114 @@
/*
* hardware.cpp
*
* Created on: 27.05.2015
* Author: wn
*/
#include <Arduino.h>
#include "hardware.h"
#include <Streaming.h>
Switch::Switch() : m_state(false), m_feedbackState(false), m_stateConflict(false),
m_lastButtonState(false), m_buttonEngineState(0), m_buttonTimestamp(0),
m_ledEngineState(0), m_ledState(false), m_ledTimestamp(0)
{
}
void Switch::begin(const uint8_t feedbackPin, const uint8_t buttonPin, const uint8_t relayPin, const uint8_t ledPin) {
m_feedbackPin = feedbackPin;
m_buttonPin = buttonPin;
m_relayPin = relayPin;
m_ledPin = ledPin;
pinMode(m_feedbackPin, INPUT_PULLUP);
pinMode(m_buttonPin, INPUT_PULLUP);
pinMode(m_relayPin, OUTPUT);
pinMode(m_ledPin, OUTPUT);
}
void Switch::toggle() {
m_state = ! m_state;
action();
}
void Switch::on() {
m_state = true;
action();
}
void Switch::off() {
m_state = false;
action();
}
void Switch::action() {
digitalWrite(m_relayPin, m_state);
}
void Switch::exec() {
uint32_t now = millis();
bool buttonState = digitalRead(m_buttonPin);
switch (m_buttonEngineState) {
case 0:
if (! buttonState) {
m_lastButtonState = buttonState;
m_buttonTimestamp = now;
m_buttonEngineState = 1;
}
break;
case 1:
if (m_buttonTimestamp + BUTTON_TIME < now) {
m_buttonEngineState = 2;
}
if (m_lastButtonState != buttonState) {
m_buttonEngineState = 0;
}
break;
case 2:
toggle();
m_buttonTimestamp = now;
m_buttonEngineState = 3;
break;
case 3:
if (m_buttonTimestamp + BUTTON_COOL_TIME < now) {
m_buttonEngineState = 0;
}
break;
default:
m_buttonEngineState = 0;
break;
}
m_feedbackState = ! digitalRead(m_feedbackPin);
if (m_feedbackState == m_state) {
digitalWrite(m_ledPin, m_state);
m_stateConflict = false;
} else {
m_stateConflict = true;
switch (m_ledEngineState) {
case 0:
digitalWrite(m_ledPin, m_ledState);
m_ledTimestamp = now;
m_ledEngineState = 1;
break;
case 1:
if (m_ledTimestamp + BLINK_TIME < now) {
m_ledState = ! m_ledState;
m_ledEngineState = 0;
}
break;
default:
m_ledEngineState = 0;
break;
}
}
}