Hallo zusammen,
ich habe ein Problem mit dem Abfragen mehrerer Taster.
Und zwar ich möchte, dass wenn Taster 1 oder Taster 2 gedrückt wird, dass LED1 angeht und wenn einer der beiden Taster gedrückt wird, soll LED1 wieder ausgehen.
Wenn Taster3 gedrückt wird, soll LED1 und LED2 angehen, aber Taster3 soll keine LED ausschalten, sondern wenn ich Taster1 oder Taster2 dann drücke, sollen beide LEDs ausgehen.
Der Teil mit Taster1 und 2 funktioniert, nur der Teil mit Taster3 geht nicht.
Kann mir da einer helfen?
#include <SPI.h>
#include <avr/wdt.h>
int taste1 = 9;
int taste2 = 10;
int taste3 = 11;
int led1 = 12;
int led2 = 13;
int aktion_status = LOW;
int taster_status = LOW;
int status_taste1;
int vorheriger_status_taste1 = HIGH;
int status_taste2;
int vorheriger_status_taste2 = HIGH;
int status_taste3;
int vorheriger_status_taste3 = HIGH;
long letztes_prellen = 0;
long entprellzeit = 30;
void setup() {
// Tasten
pinMode(taste1, INPUT_PULLUP);
pinMode(taste2, INPUT_PULLUP);
pinMode(taste3, INPUT_PULLUP);
// LEDs
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
// WDTO_4S, WDTO_2S, WDTO_1S
wdt_enable(WDTO_8S);
}
void taster() {
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
}
void standby() {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
}
void aktion() {
if (aktion_status == HIGH) {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
}
else {
standby();
}
}
void loop() {
int aktueller_status_taste1 = digitalRead(taste1);
int aktueller_status_taste2 = digitalRead(taste2);
int aktueller_status_taste3 = digitalRead(taste3);
if (aktueller_status_taste1 != vorheriger_status_taste1) {
letztes_prellen = millis();
}
if (aktueller_status_taste2 != vorheriger_status_taste2) {
letztes_prellen = millis();
}
if (aktueller_status_taste3 != vorheriger_status_taste3) {
letztes_prellen = millis();
}
if ((millis() - letztes_prellen) > entprellzeit) {
if (aktueller_status_taste1 != status_taste1) {
status_taste1 = aktueller_status_taste1;
if (status_taste1 == LOW) {
taster_status = !taster_status;
}
}
if (aktueller_status_taste2 != status_taste2) {
status_taste2 = aktueller_status_taste2;
if (status_taste2 == LOW) {
taster_status = !taster_status;
}
}
if (aktueller_status_taste3 != status_taste3) {
status_taste3 = aktueller_status_taste3;
if (status_taste3 == LOW) {
aktion_status = !aktion_status;
}
}
}
if (taster_status == HIGH) {
taster();
}
if (taster_status == LOW) {
standby();
}
if (aktion_status == HIGH) {
aktion();
}
vorheriger_status_taste1 = aktueller_status_taste1;
vorheriger_status_taste2 = aktueller_status_taste2;
vorheriger_status_taste3 = aktueller_status_taste3;
wdt_reset();
}
Schon mal vielen Dank.