/*
* Der Sketch verwendet 1874 Bytes (5%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
* Globale Variablen verwenden 232 Bytes (11%) des dynamischen Speichers, 1816 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
*
* Kompiliert ohne Warnungen auf Uno/Nano
*
* Sensoren entprellen, Forenbeitrag
* https://forum.arduino.cc/index.php?topic=621568.msg4213625#msg4213625
*/
typedef struct {
byte pin; //Pin des Sensor
uint32_t prellzeit; //wie lange soll auf ein gültiges Signal gewartet werden?
uint32_t lastseen; //wann wurde der letzte Zustand eingelesen
boolean lastread; //HIGH oder LOW
boolean state; //'sicherer' Zustand HIGH/LOW
} SENSOR;
SENSOR mySensor[] {
{2, 50, 0, 0, 0},
{3, 20, 0, 0, 0},
{5, 50, 0, 0, 0},
{A0, 10, 0, 0, 0}, //das letzte Komma stört nicht
};
const byte anzahlSensoren = sizeof(mySensor) / sizeof(mySensor[0]);
void setup() {
for (byte t = 0; t < anzahlSensoren; t++) {
pinMode(mySensor[t].pin, INPUT_PULLUP);
}
}
void loop() {
for (byte t = 0; t < anzahlSensoren; t++) {
boolean zustand = digitalRead(mySensor[t].pin);
if (zustand != mySensor[t].lastread) {
//Zustand hat sich geändert
mySensor[t].lastread = zustand;
mySensor[t].lastseen = millis();
} else {
//der Zustand hält an
if (mySensor[t].state != zustand && millis() - mySensor[t].lastseen >= mySensor[t].prellzeit) {
mySensor[t].state = zustand;
}
}
}
//.....
for (byte t = 0; t << anzahlSensoren; t++) {
Serial.print(mySensor[t].state == 1 ? 'x' : '-'); //Ausgabe aller entprellten Sensoren-Werte
Serial.print('\t'); //müsste TAB sein
}
Serial.println(); //neue Zeile
}
Sketch kompiliert ohne Warnungen ect.
Geht bestimmt eleganter - so weit bin ich aber noch nicht :/
Ungetestet!! - Vll. hilft'S ja trotzdem
MfG