ich habe mir einen Drei Wege Schalter bestellt und möchte für mein aktuelles Projekt die Funktion haben, dass ich je nach der Schalterstellung die Signale W_1, W_2 oder W_3 wieder gegeben werden.
Mein Sketch ist wie folgt:
const int schalterPinD2 = 2; // Pin, an dem der Schalter an D2 angeschlossen ist
const int schalterPinD10 = 10; // Pin, an dem der Schalter an D10 angeschlossen ist
void setup() {
Serial.begin(9600);
pinMode(schalterPinD2, INPUT);
pinMode(schalterPinD10, INPUT);
}
void loop() {
int zustandD2 = digitalRead(schalterPinD2);
int zustandD10 = digitalRead(schalterPinD10);
if (zustandD2 == HIGH) {
Serial.println("W1_2");
} else if (zustandD10 == HIGH) {
Serial.println("W1_3");
} else {
Serial.println("W1_1");
}
delay(1000); // Verzögerung, um flackernde Signale zu vermeiden
}
Dein rotes Kabel macht da grad nen feinen Kurzschluss mit GND.
Mach das Ding da ab!
Ändere Deine Pinfunktion auf INPUT_PULLUP
Ändere Deine Zustandsabfrage auf == LOW
const byte schalterPinD2 = 2; // Pin, an dem der Schalter an D2 angeschlossen ist
const byte schalterPinD10 = 10; // Pin, an dem der Schalter an D10 angeschlossen ist
void setup() {
Serial.begin(9600);
pinMode(schalterPinD2, INPUT_PULLUP);
pinMode(schalterPinD10, INPUT_PULLUP);
}
void loop() {
bool zustandD2 = digitalRead(schalterPinD2); // Änderung hier
bool zustandD10 = digitalRead(schalterPinD10); // Änderung hier
if (!zustandD2) { // Änderung hier
Serial.println("W1_2");
delay(100);
}
else if (!zustandD10) { // Änderung hier
Serial.println("W1_3");
delay(100);
}
else {
Serial.println("W1_1");
delay(100);
}
// Änderung hier
}
Und falls Du mehrere 3 Wege-Schalter anschliessen möchtest und Dir die Pin's knapp werden: Mach bei jedem der Schalter vom mittleren Anschluss je einen 1k Widerstand zu den äusseren Anschlüssen , also 1 1k Widerstand vom mitleren Pin zum rechten Anschluss und 1 1k Widerstand zum linken Anschluss. Dann schliesst Du den einen der äusern Aanschlüsse an 5V vom Nano, den anderen äusseren Anschluss an GND vom Nano. der Mitlere Schalteranschluss wird mit einem der ANALOG-Eingänge verbunden. Diesen Pin liesst Du dann mittels analogRead ein. Bei einem Wert um die Mitte von 0 - 1023 also so um die 490 bis 520 ist der Schalter in Mittelstellung. bei einem Wert nahe 0 ist der Schalter in der einen àusseren Stellung, bei einem Wert nahe 1023 ist der Schalten in der anderen äusseren Stellung. So kannst Du alle drei Schaltpositionen über einen einzigen Pin am Nano einlesen und ermitteln.
ja, ist auch ne Möglichkeit.Bei einer Kleinen Menga an Schaltern sparst du jedoch mit der Matrix keine Pin's. Der Spareffekt wirkt sich erst ab einer bestimten mindestanzahl wirklich aus.
wenn man anstatt zwei Widerstände eine Diode nimmt, kann man 40 solche Schalter in Matrix verbinden und mit Keypad.h auswerten;
Charlieplexing erlaubt dann 162 Schalter(324 Knöpfe);
Tucoplexing ist anscheinend noch ertragreicher.