Was ist in diesem C++-Arduino-Programm falsch?
int on_out = 0;
void setup()
{
pinMode(1, INPUT);
pinMode(12, OUTPUT);
}
void loop()
{
if (digitalRead(1) == HIGH && on_out == 0) {
on_out = 1;
}
if (digitalRead(1) == HIGH && on_out == 1) {
on_out = 0;
}
if (on_out == 1) {
digitalWrite(12, HIGH);
}
else {
digitalWrite(12, LOW);
}
delay(10); // Delay a little bit to improve simulation performance
}
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;
}
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!