This repository has been archived on 2024-01-26. You can view files and clone it, but cannot push or open issues or pull requests.
space_status/arduino/door_status.ino
2020-02-02 20:20:41 +01:00

72 lines
1.7 KiB
C++

// door status on arduino
// arduino is Duemilanove
// sensor is a reed sensor
#define REED_SWITCH_INPUT_PIN 13
#define SPACE_STATUS_RED_PIN 12
#define SPACE_STATUS_YELLOW_PIN 11
#define SPACE_STATUS_GREEN_PIN 10
void setup(){
Serial.begin(9600);
pinMode(REED_SWITCH_INPUT_PIN, INPUT);
pinMode(SPACE_STATUS_RED_PIN, OUTPUT);
pinMode(SPACE_STATUS_YELLOW_PIN, OUTPUT);
pinMode(SPACE_STATUS_GREEN_PIN, OUTPUT);
}
int threshold = 20;
int space_status = threshold / 2;
int space_status_b4 = 0;
int delay_time = 1000;
void loop(){
int pin_status = 0;
pin_status = digitalRead(REED_SWITCH_INPUT_PIN);
Serial.print(" ");
Serial.print(space_status_b4);
Serial.print(" ");
Serial.println(space_status);
delay(delay_time);
// pin check of the reed sensor and low pass filter
if (pin_status == 0){
if (space_status > 0){
space_status -= 1;
}
} else if (pin_status == 1){
if (space_status < threshold){
space_status += 1;
}
}
// status check if we can switch the status.
// low pass prevents waggling a bit
if (space_status >= threshold-3) {
// closed
space_status_b4 = 1;
} else if (space_status <= 3) {
// open
space_status_b4 = 0;
}
// ampel / traffic light signals
if (space_status_b4 == 1) {
// closed
digitalWrite(SPACE_STATUS_RED_PIN, HIGH);
digitalWrite(SPACE_STATUS_GREEN_PIN, LOW);
} else if (space_status_b4 == 0) {
// open
digitalWrite(SPACE_STATUS_RED_PIN, LOW);
digitalWrite(SPACE_STATUS_GREEN_PIN, HIGH);
}
if (space_status > 3 && space_status < threshold - 3) {
digitalWrite(SPACE_STATUS_YELLOW_PIN, HIGH);
} else {
digitalWrite(SPACE_STATUS_YELLOW_PIN, LOW);
}
}