Arduino-Programmierung: Denkfehler?
Ich habe einen Testcode geschrieben, den ich im tinkercad-Simulator laufen lassen möchte.
Zwei Schalter sollen mit den Zuständen 000 bis 1111 vier Ausgänge schalten.
Dafür dieser Code:
const int input1 = 2; // Digitaleingang 1
const int input2 = 3; // Digitaleingang 2
const int output1 = 8; // Digitaler Ausgang 1
const int output2 = 9; // Digitaler Ausgang 2
const int output3 = 10; // Digitaler Ausgang 3
const int output4 = 11; // Digitaler Ausgang 4
void setup() {
// Konfiguration der Pins als Eingänge und Ausgänge
pinMode(input1, INPUT);
pinMode(input2, INPUT);
pinMode(output1, OUTPUT);
pinMode(output2, OUTPUT);
pinMode(output3, OUTPUT);
pinMode(output4, OUTPUT);
}
void loop() {
// Lesen des Zustands der Eingänge
int input1Value = digitalRead(input1);
int input2Value = digitalRead(input2);
// Berechnen der Ausgangswerte
int output1Value = (input1Value == 0) && (input2Value == 0);
int output2Value = (input1Value == 0) && (input2Value == 1);
int output3Value = (input1Value == 1) && (input2Value == 0);
int output4Value = (input1Value == 1) && (input2Value == 1);
// Schreiben der Ausgangswerte
digitalWrite(output1, output1Value);
digitalWrite(output2, output2Value);
digitalWrite(output3, output3Value);
digitalWrite(output4, output4Value);
}
Das funktioniert aber nicht. Die Logik wird nicht wie erwartet im Simulator umgesetzt. Ist der Code fehlerhaft oder mag der Simulator nicht richtig arbeiten?
2 Antworten
Tausch mal den 5V-Anschluss und GND-Anschluss gegeneinander.. Dann sollte es eig passen... Natürlich auch die LEDs drehen, da ja Masse dann am anderen Pin ist...
Ich habe im Code wie folgt verändert
// Berechnen der Ausgangswerte
int output1Value = (input1Value == 0) && (input2Value == 0);
int output2Value = (input1Value == 1) && (input2Value == 0);
int output3Value = (input1Value == 0) && (input2Value == 1);
int output4Value = (input1Value == 1) && (input2Value == 1);
und es passt.
Ja, stimmt. Im Prinzip ist der Ausgang negiert. Tausche ich die Polarität, so ergeben die Eingänge 00 und 11 die erwarteten Ausgangspegel. Aber es ist trotzdem ein Fehler in der Logik : 01 und 10 sind vertauscht. Gemini ist eben nicht fehlerfrei ...
So wie die Schalter aktuell geschalten sind (beide ziehen auf GND), passt das doch.
input1Value und input2Value sind beide 0. Damit wird output1Value TRUE und das schreibst du an den digitalen Ausgang 1. Da die LEDs aber nur leuchten, wenn der Ausgang FALSE, also auf Ground gezogen wird, leuchtet die LED 1 nicht, die anderen 3 aber.
Was passiert denn nun, wenn du einen der Schalter veränderst?
Die Zustände sind wie folgt:
Schalter LED soll sein LED ist-Zustand
S 1 S 2 1 2 3 4 1 2 3 4
0 0 1 0 0 0 0 1 1 1
1 0 0 1 0 0 1 1 0 1
0 1 0 0 1 0 1 0 1 1
1 1 0 0 0 1 1 1 1 0
Die Schaltung verhält sich wie folgt: Sie reagiert erst mal negiert, aber trotzdem nicht richtig, irgendwie durcheinander.