Was ist in diesem C++-Arduino-Programm falsch?

2 Antworten

Ich würde prüfen, ob Du ggf. besser INPUT_PULLUP benutzt. Das von Dir verwendete INPUT benötigt eine echte Spannung. Ein nicht gedrückter Taster funktioniert so nicht. Durch den Pullup-Widerstand wird das möglich gemacht.

  if (digitalRead(1) == HIGH && on_out == 0) {
    on_out = 1;
  }
  if (digitalRead(1) == HIGH && on_out == 1) {
    on_out = 0;
  }

Dieser Code setzt on_out auf 1 und gleich wieder auf 0. Daher ändert sich der Wert auf PIN 12 nie. Es fehlt ein "else". Der Code muss so lauten:

  if (digitalRead(1) == HIGH && on_out == 0) {
    on_out = 1;
  }
  else if (digitalRead(1) == HIGH && on_out == 1) {
    on_out = 0;
  }

Du kannst das aber auch einfach verkürzen zu:

  if (digitalRead(1) == HIGH {
    on_out = 1 - on_out;
  }
ntechde  20.12.2023, 19:27

Sehr gut! Ich hab eine Weile rätseln müssen, aber Du hast vollkommen recht!

on_out = 1 - on_out;

Sehr elegant! Kompliment! Ich vergesse zu leicht, dass man mit logischen Variablen auch rechnen kann!

0