Sketch funktioniert nur, wenn Serial.println ???

Hallo,
ich habe ein merkwürdiges Problem.

Ich habe zwei Taster um einen Ausgang zu schalten. Bei einem möchte ich, dass nach einer Sekunde drücken der Ausgang wieder abfällt, bei dem anderen soll er geschaltet sein, solange ich den Taster drücke.

Das funktioniert soweit auch, aber nur, wenn ich mir mein Ergebnis aus der Funktion wie lange der Taster schon gedrückt ist per Serial.println ausgebe.
Wenn ich die serielle Ausgabe deaktiviere funktioniert die Funktion mit dem Taster nach einer Sekunde abfallen nur ein Mal.

Hat jemand eine Idee woran das liegen könnte?

Danke.

int LichtAnOut = 26;
int Alarmeingang = 22;
int LichtAnTaster = 28;
int LichtAusTaster = 30;
int LichtAusOut = 32;

int TasterAnStatus = 0;
int TasterAusStatus = 0;
int AlarmeingangStatus = 0;

void setup()
{
  pinMode(LichtAnOut, OUTPUT);
  pinMode(LichtAusOut, OUTPUT);
  pinMode(Alarmeingang, INPUT);
  pinMode(LichtAnTaster, INPUT);
  pinMode (LichtAusTaster, INPUT);
  Serial.begin(9600);
}

void loop()
{
  Serial.println(eineSekundenGedrueckt());
  
  LichtAn();

    TasterAusStatus = digitalRead(LichtAusTaster);
  if (TasterAusStatus == HIGH) {
    digitalWrite(LichtAusOut, HIGH);
  }
  else
  {
    digitalWrite(LichtAusOut, LOW);
  }

}
void LichtAn()
{
  TasterAnStatus = digitalRead(LichtAnTaster);
  AlarmeingangStatus = digitalRead(Alarmeingang);
  if ((AlarmeingangStatus == HIGH && eineSekundenGedrueckt() == 0) || TasterAnStatus == HIGH) {
    digitalWrite(LichtAnOut, HIGH);
  }
  else
  {
    digitalWrite(LichtAnOut, LOW);
  }
}

bool eineSekundenGedrueckt() {

  static unsigned long startZeit = 0;

  if (!digitalRead(Alarmeingang)) {
    startZeit = 0; 
    return false; 
  }

  if (startZeit == 0) {
    startZeit = millis();
    return false;
  }

  return (millis() - startZeit >= 1000);
}

Du rufst die Funktion eineSekundenGedrueckt() ja auch nur in der seriellen Ausgabe auf.

 Serial.println(eineSekundenGedrueckt());

Gruß Tommy

Du hast Deinen Anfangsbeitrag bearbeitet.
Jetzt weiß man nicht was Du geändert hast.
Funktioniert es jetzt?

Grüße Uwe

Tommy56:
Du rufst die Funktion eineSekundenGedrueckt() ja auch nur in der seriellen Ausgabe auf.

 Serial.println(eineSekundenGedrueckt());

Gruß Tommy

Oh man...

Danke. :smiley:

Für den eigenen Code wird man sehr schnell betriebsblind. Das haben wir alle schon erlebt.

Gruß Tommy