Hast du das denn schon gebaut und ausprobiert?
Prima. Dann ist in deinem Fall ein Funkempfänger einfacher als echte Taster, Glückwunsch
Trau dich doch einfach, es so zu machen:
const int buttonPin1 = 4;
const int RE1 = 6;
const int buttonPin2 = 5;
const int RE2 = 7;
int merker1=0;
int merker2=0;
void setup()
{
pinMode(RE1, OUTPUT);
pinMode(RE2, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
Serial.begin(9600);
}
void loop()
{
int buttonState = digitalRead(buttonPin1); // braucht nicht global gemerkt zu werden
if ((buttonState == HIGH)&&(merker1==0))
{
digitalWrite(RE1, HIGH);
merker1=1;
}
if ((buttonState == LOW)&&(merker1==1))
{
merker1=2;
}
if ((buttonState == HIGH)&&(merker1==2))
{
digitalWrite(RE1, LOW);
merker1=3;
}
if ((buttonState == LOW)&&(merker1==3))
{
merker1=0;
}
Serial.print("Merker1= ");
Serial.println(merker1);
// Taster 2 -------------------------------------
buttonState = digitalRead(buttonPin2); // buttonstate ist frei für den nächsten Taster
if ((buttonState == HIGH)&&(merker2==0))
{
digitalWrite(RE2, HIGH);
merker2=1;
}
if ((buttonState == LOW)&&(merker2==1))
{
merker2=2;
}
if ((buttonState == HIGH)&&(merker2==2))
{
digitalWrite(RE2, LOW);
merker2=3;
}
if ((buttonState == LOW)&&(merker2==3))
{
merker2=0;
}
Serial.print("Merker2= ");
Serial.println(merker2);
}
Wenn es dir blöd vorkommt, das nochmal zu verdoppeln, hast du natürlich recht.
Vor allem, weil du dich leicht vertippen kannst und das ganz schwer zu findende Fehler werden.
Entweder du machst es trotzdem und hat dein Projekt fertig,
oder du lernst was über Funktionen in C,
und schreibst dann das ganze in eine Funktion um,
die 4 mal aufgerufen wird.
Aber das mach mal selber und melde dich erst, wenn es klemmt.
Ich würde so eine Funktion erfinden:
byte TRelais ( byte PinTaster, byte PinRelais, byte Merker )
{
// liest Taster Zustand und schaltet je nach Merker das Relais
// gibt den neuen Merker-Zustand zurück
// ... und jetzt du ...
}
Du kannst übrigens auch int statt byte nehmen. Da gewöhnst du dir nur ein bisschen Schlamperei an, geht aber eigentlich genauso gut.
Dann wird dich wohl stören, dass Serial.print viel zu viel ausgibt.
Nun wird es knifflig: Nur wenn das Ergebnis von TRelais etwas anderes ist als der alte Merker, ausschreiben. Beim nächsten loop - Durchlauf muss natürlich der neue Merker-Wert mitgegeben werden. ( ... und jetzt du ... )