Mehrere Taster zum Schalten

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.. :frowning:

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]

{ reading = digitalRead(Taster2);

Das "{" ist zuviel. Zeitgleich muss der unterste im Sketch auch weg. Teste dann mal.

So hatte ich es auch schon, habe aber nochmal probiert... nein, selbes Ergebnis... beide LEDs schalten, egal welcher Taster..

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.

Ansonsten kannst du die Bounce Library verwenden:

Die kapselt das alles intern

Noch wichtiger als zwei time Variable -- die sind ja nur fürs debounce :wink: -- sind zwei verschiedene "previous" Variable .

Natürlich.....!
Habe jetzt je INPUT bzw Taster/Led eine eigene previous und reading variable.... schon gehts...
Danke Michael

hier nochmal neu:

int Taster1 = 2;         
int LED1 = 13; 

int Taster2 = 3;         
int LED2 = 12; 

int state1 = HIGH;
int state2 = HIGH;
int reading1; 
int previous1 = LOW;
int reading2; 
int previous2 = LOW;


long time = 0;         
long debounce = 1000;  

void setup()
{
  pinMode(Taster1, INPUT);
  pinMode(LED1, OUTPUT);
  
  pinMode(Taster2, INPUT);
  pinMode(LED2, OUTPUT);
}

void loop()
{
  reading1 = digitalRead(Taster1);
  
  if (reading1 == HIGH && previous1 == LOW && millis() - time > debounce) {
    if (state1 == HIGH)
      state1 = LOW;
    else
      state1 = HIGH;

    time = millis();    
  }

  digitalWrite(LED1, state1);
  previous1 = reading1;
  
  
 reading2 = digitalRead(Taster2);
  if (reading2 == HIGH && previous2 == LOW && millis() - time > debounce) {
    if (state2 == HIGH)
      state2 = LOW;
    else
      state2 = HIGH;

    time = millis();    
  }

 
  digitalWrite(LED2, state2);
  previous2 = reading2;
 }

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.

muss dann beide ändern auf:
unsigned long time = 0;
unsigned long debounce = 1000;
?

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 :wink: