Habe ein Funkmodul mit 4 Ausgängen als Taster. Diese sollen 4 Outputs steuern.
Wenn ich nur einen Taster schalten lasse funktioniert alles tadellos, also Taster1 gedrückt, LED an, Taster1 wieder gedrückt , LED aus. Perfekt einen Taster zum Schalter gemacht.
Nun habe ich zwei Taster und zwei LEDs. Jetzt ist es egal welcher Taster gedrückt wird, es schalten alle LEDs an oder aus, je nach dem... zBsp: taster1 ein, beide leds an, taster2 ein, beide leds aus, taster2 wieder ein, leds ein, taster 2 aus leds aus, taster eins ein leds wieder ein usw.... egal welcher taster , es schalten beide LEDs..
int Taster1 = 2;
int LED1 = 13;
int Taster2 = 3;
int LED2 = 12;
int state = HIGH;
int reading;
int previous = LOW;
long time = 0;
long debounce = 200;
void setup()
{
pinMode(Taster1, INPUT);
pinMode(LED1, OUTPUT);
pinMode(Taster2, INPUT);
pinMode(LED2, OUTPUT);
}
void loop()
{
reading = digitalRead(Taster1);
if (reading == HIGH && previous == LOW && millis() - time > debounce) {
if (state == HIGH)
state = LOW;
else
state = HIGH;
time = millis();
}
digitalWrite(LED1, state);
previous = reading;
{ reading = digitalRead(Taster2);
if (reading == HIGH && previous == LOW && millis() - time > debounce) {
if (state == HIGH)
state = LOW;
else
state = HIGH;
time = millis();
}
digitalWrite(LED2, state);
previous = reading;
}
}/code]
Braucht man dafür nicht für jede Taste eine extra Zeit-Variable? Diese sollten übrigens "unsigned long" sein und nicht "long". Daran liegt der Fehler aber nicht.
Serenifly:
Braucht man dafür nicht für jede Taste eine extra Zeit-Variable? Diese sollten übrigens "unsigned long" sein und nicht "long". Daran liegt der Fehler aber nicht.
Änderung auf "unsigned long" wegen der negativen Zählung von "long" oder habe ich hier was falsch verstanden?
Ja, der Wertebereich ist einfach doppelt so groß und millis() gibt einen unsigned long zurück. Wobei du glaube ich erst nach etwa 25 Tagen mal kurz einen Fehler feststellen würdest. Wahrscheinlich fällt es hier gar nicht auf.
time solltest du schon ändern, weil du es ja = millis() setzt. Und das würde 25 Tage nach reset negativ.
Der Vergeichswert debounce ist eine kleine Konstante, wird mit der Differenz verglichen, die immer im Bereich 0 .. 1000 + x bleibt.
Da kannst du "alles" nehmen, was größer als ein byte ist