Ausgang schalten wenn zwei Eingänge high und einer low ist

Hallo,
ich habe folgendes Problem.
Ich habe eine Schaltung mit insg. 4 Eingängen (Taster). Taster 1 wird kurz betätigt, wird dann Taster 3 betätigt soll der Ausgang auf High schalten. Wird zwischendurch aber Taster 2 betätigt, resettet sich alles wieder und Taster 1 muss erneut betätigt werden um mit Taster 3 den Ausgang schalten zu können.

Kann mir jemand helfen wie ich den Code erstelle? Der Arduino muss sich ja den Zustand von Taster 1 irgendwie merken und wenn dann Taster 3 auch igh ist den Ausgang schalten. Weiß da nicht so recht wie ich anfangen soll.

Viele Grüße
Norman

nrnrp:
Hallo,
ich habe folgendes Problem.
Ich habe eine Schaltung mit insg. 4 Eingängen (Taster). Taster 1 wird kurz betätigt, wird dann Taster 3 betätigt soll der Ausgang auf High schalten. Wird zwischendurch aber Taster 2 betätigt, resettet sich alles wieder und Taster 1 muss erneut betätigt werden um mit Taster 3 den Ausgang schalten zu können.

Kann mir jemand helfen wie ich den Code erstelle? Der Arduino muss sich ja den Zustand von Taster 1 irgendwie merken und wenn dann Taster 3 auch igh ist den Ausgang schalten. Weiß da nicht so recht wie ich anfangen soll.

Viele Grüße
Norman

Dann sieh dir doch mal die Beispiele in der IDE an, wie du Taster einlesen kannst.
Diese musst du nur nach deinen Wünschen logisch verknüpfen.
Was gespeichert werden muss, legst du temporär in einer Variablen ab.

nrnrp:
Taster 1 wird kurz betätigt, wird dann Taster 3 betätigt soll der Ausgang auf High schalten. Wird zwischendurch aber Taster 2 betätigt, resettet sich alles wieder und Taster 1 muss erneut betätigt werden um mit Taster 3 den Ausgang schalten zu können.

Du suchst sowas:

/*
   Forumsketch:
   https://forum.arduino.cc/index.php?topic=717488.0
*/
const byte inputPIN1 = 4;
const byte inputPIN2 = 5;
const byte inputPIN3 = 6;
const byte inputPIN4 = 7;

bool taste1 = false;


void setup() {
  Serial.begin(115200);
  pinMode(inputPIN1, INPUT_PULLUP);
  pinMode(inputPIN2, INPUT_PULLUP);
  pinMode(inputPIN3, INPUT_PULLUP);
  pinMode(inputPIN4, INPUT_PULLUP);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW); // Aus!
}

void loop() {
  if (!digitalRead(inputPIN1) && !taste1)
  {
    taste1 = true;
    delay(1000); // nicht machen! hier nur zu Zeigezwecken!
  }
  if (!digitalRead(inputPIN2) && taste1)
  {
    // HIER kommt der Code rein, wenn Taste 1 und Taste 2
    // nacheinander gedrückt. Zum Beispiel:
    taste1 = false;
    // löst "Neustart" aus
  }

  if (!digitalRead(inputPIN3) && taste1)
  {
    // HIER kommt der Code rein, wenn Taste 1 und Taste 3 nacheinander gedrückt
    // zum Beispiel:
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // UMSCHALTEN!
    taste1 = false; // und zurücksetzen
    delay(1000); // nicht machen! hier nur zu Zeigezwecken!
  }
}

Kurze Erklärung dazu:
PIN4 wäre Deine Taste 1.
Wenn die kurz gedrückt, wird sich der Status gemerkt.
PIN5 wäre Taste 2.
Wird die gedrückt, wird der Status wieder zurück gesetzt und nichts passiert - Es muss erst wieder Taste 1 gedrückt werden.
PIN6 ist Deine Taste 3.
Wir da kurz die Taste gedrückt, schaltet die interne LED auf dem UNO um.
Beim ersten Mal geht sie an.
Der Status der Taste1 wird wieder gelöscht und alles fängt von Vorne an.
Nur, das beim nächsten Mal richtige Kombi Taste 1 und Taste 3 die LED aus geht...

Wenn Fragen: Frage!

Super, vielen Dank!
Genauso hatte ich mir das vorgestellt.
Jedoch habe ich einen Denkfehler in meiner Schaltung.
Ist mit 4 und 6 die LED eingeschaltet soll sie mit einer anderen Taste wieder ausgeschaltet werden, unabhängig welche Taster gedrückt sind.
Anschließend kann man mit 4 und 6 die LED wieder einschalten.
Ausserdem soll bei 4 und 5 ein zweiter Ausgang auf High geschaltet werden.
Ich werde die Tage mal weiter probieren ob ich selber auf die Lösung komme. Wenn nicht melde ich mich nochmal.

Viele Grüße und nochmals Danke
Norman

nrnrp:
Ist mit 4 und 6 die LED eingeschaltet soll sie mit einer anderen Taste wieder ausgeschaltet werden, unabhängig welche Taster gedrückt sind.

Ausserdem soll bei 4 und 5 ein zweiter Ausgang auf High geschaltet werden.

Dafür gibt es mehrere Wege.
Es ginge weitere Bedingungen festzulegen oder Du löst das && auf und prüfst dann auf nächste Übereinstimmung.

Am Beispiel PIN 5:

  if (!digitalRead(inputPIN2))
  {
    if (taste1) // Ist der Merker gesetzt?
    {
      // Hier könnte digitalWrite für zweiten Ausgang rein
      taste1 = false;  // löst "Neustart" aus
    }
    if (digitalRead(LED_BUILTIN)) // ist die LED an?
    {
      digitalWrite(LED_BUILTIN, LOW); // Aus!
    }
  }

So, ich hatte heute endlich mal Zeit weiter deine Codes auszuprobieren.
Soweit läuft alles sehr gut.
Ich habe für InputPIN4 alles so, das es auf den Ursprungspunkt zurück geht.
Nun habe ich für das Schließen von 1 und 2 bzw. 1 und 3 noch ein Ausgang auf High geschaltet.
Zuerst dachte ich, ich kann die Ausgänge einfach per digitalWrite auf low setzen, aber Ausgang 12 wird nicht auf LOW gesetzt, da ja dir Abfrage nach der BUILTINLED davor ist.
Wie kann ich das denn machen, das wenn Ausgang 12 HIGH ist aber die BUILTINLED aus, ebenfalls über InputPIN4 der Ausgang auf LOW geschaltet wird?

 if (!digitalRead(inputPIN4)) 
  {
    if (taste1) // Ist der Merker gesetzt?
    {
      // Hier könnte digitalWrite für zweiten Ausgang rein
      digitalWrite(12, LOW);
      taste1 = false;  // löst "Neustart" aus
    }
    if (digitalRead(LED_BUILTIN)) // ist die LED an?
    {
      digitalWrite(LED_BUILTIN, LOW); // Aus!
      digitalWrite(11, LOW); //LED rot aus
      digitalWrite(12, LOW); //LED grün aus
      
    }
  }

Viele Grüße
Norman