Differences
This shows you the differences between two versions of the page.
de:arduino:switch [2022/04/21 15:00] |
de:arduino:switch [2022/04/21 15:00] () |
||
---|---|---|---|
1: | 1: | ||
+ | {{ : | ||
+ | ====== Schalter, Drucktasten ====== | ||
+ | |||
+ | ===== Hardwareanschlüsse von Schaltern und Drucktasten ===== | ||
+ | |||
+ | ==== 5V HI aktiver Schalter ==== | ||
+ | {{anchor: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Das Bild oben zeigt eine HI-Aktive-Switch-Verbindung. Im offenen Ruhezustand des Stromkreises ist der Arduino über einen 10-kΩ-Widerstand (Stripper) mit Masse verbunden, sodass er sich im Zustand " | ||
+ | |||
+ | {{: | ||
+ | forrás: https:// | ||
+ | |||
+ | Das folgende Beispielprogramm schaltet die eingebaute LED basierend auf dem Status der Drucktaste ein. Unten finden Sie ein Beispielprogramm für einfaches Threading: \\ | ||
+ | <hidden Klicken Sie hier, um den Code zu entsperren> | ||
+ | <code c> | ||
+ | /* | ||
+ | Button | ||
+ | |||
+ | Turns on and off a light emitting diode(LED) connected to digital pin 13, | ||
+ | when pressing a pushbutton attached to pin 2. | ||
+ | |||
+ | The circuit: | ||
+ | - LED attached from pin 13 to ground | ||
+ | - pushbutton attached to pin 2 from +5V | ||
+ | - 10K resistor attached to pin 2 from ground | ||
+ | |||
+ | - Note: on most Arduinos there is already an LED on the board | ||
+ | attached to pin 13. | ||
+ | |||
+ | created 2005 | ||
+ | by DojoDave < | ||
+ | modified 30 Aug 2011 | ||
+ | by Tom Igoe | ||
+ | |||
+ | This example code is in the public domain. | ||
+ | |||
+ | http:// | ||
+ | */ | ||
+ | |||
+ | // constants won't change. They' | ||
+ | const int buttonPin = 2; // the number of the pushbutton pin | ||
+ | const int ledPin = 13; // the number of the LED pin | ||
+ | |||
+ | // variables will change: | ||
+ | int buttonState = 0; // variable for reading the pushbutton status | ||
+ | |||
+ | void setup() { | ||
+ | // initialize the LED pin as an output: | ||
+ | pinMode(ledPin, | ||
+ | // initialize the pushbutton pin as an input: | ||
+ | pinMode(buttonPin, | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | // read the state of the pushbutton value: | ||
+ | buttonState = digitalRead(buttonPin); | ||
+ | |||
+ | // check if the pushbutton is pressed. If it is, the buttonState is HIGH: | ||
+ | if (buttonState == HIGH) { | ||
+ | // turn LED on: | ||
+ | digitalWrite(ledPin, | ||
+ | } else { | ||
+ | // turn LED off: | ||
+ | digitalWrite(ledPin, | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | Das alles prägnanter: | ||
+ | |||
+ | <hidden Klicken Sie hier, um den Code zu entsperren> | ||
+ | <code c> | ||
+ | const int buttonPin = 2; // the number of the pushbutton pin | ||
+ | |||
+ | // variables will change: | ||
+ | int buttonState = 0; // variable for reading the pushbutton status | ||
+ | |||
+ | void setup() { | ||
+ | // initialize the pushbutton pin as an input: | ||
+ | pinMode(buttonPin, | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | // read the state of the pushbutton value: | ||
+ | buttonState = digitalRead(buttonPin); | ||
+ | |||
+ | if (buttonState == HIGH) { | ||
+ | // button state on: | ||
+ | ; | ||
+ | } else { | ||
+ | // button state off: | ||
+ | ; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== 5V LO aktiver Schalter ==== | ||
+ | |||
+ | {{de: | ||
+ | |||
+ | Das Bild oben zeigt eine aktive LO-Schalterverbindung. Wenn der Stromkreis offen und in Ruhe ist, wird der Arduino über einen 10-kΩ-Widerstand (Pull-up-Widerstand) an die Stromversorgung angeschlossen (es wird empfohlen, einen 100-k-Widerstand im Voraus anzuschließen), | ||
+ | |||
+ | ==== Interner Pull-up-Widerstand ==== | ||
+ | {{anchor: | ||
+ | |||
+ | Die Arduinoes haben auch einen internen Pull-up-Widerstand, | ||
+ | |||
+ | Offiziell wie folgt: | ||
+ | <hidden Klicken Sie hier, um den Code zu entsperren> | ||
+ | |||
+ | <code c> | ||
+ | pinMode(pin, | ||
+ | </ | ||
+ | Dies funktioniert jedoch nicht immer. Auf mehr Boards macht der Compiler einen Fehler. In diesem Fall lautet die Lösung: | ||
+ | < | ||
+ | pinMode(pin, | ||
+ | digitalWrite(pin, | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Natürlich kann mit diesem Verfahren im Vergleich zu einem aktiven 5-V-HI-Schalter mindestens ein Widerstand eingespart werden. Wenn jedoch der Draht zum Schalter lang ist oder große Störungen durch die Umgebung erwartet werden, kann ein hoher Widerstand zu fehlerhaften Erkennungen führen. | ||
+ | |||
+ | ==== 12V / 24V HI aktiver Schalter ==== | ||
+ | |||
+ | {{de: | ||
+ | |||
+ | Natürlich kann der aktive Arduino 5V HI-Schalter auch bei höheren Versorgungsspannungen verwendet werden, indem Eingangswiderstände installiert werden. Der Kondensator und der 100 Ω-Eingangswiderstand sind optional. Bei einem " | ||
+ | |||
+ | Schalten mit 24V Stromversorgung: | ||
+ | \\ | ||
+ | |||
+ | {{de: | ||
+ | |||
+ | ==== 5V 8 Parallelschalter ==== | ||
+ | Das folgende Beispiel zeigt das Lesen von 8 Drucktasten über einen Analogeingang. Die Eingangswiderstände der Drucktasten sind um 100 kΩ voneinander getrennt. Wenn diese Taste gedrückt wird, gibt der Eingang einen anderen Wert aus. Standardmäßig ist der Eingangspin über einen halben Megaohm-Widerstand (Scraper) mit Masse verbunden. | ||
+ | |||
+ | {{de: | ||
+ | |||
+ | Im folgenden Code zeigen das zweizeilige I2C-LCD-Display und der serielle Monitor auch den Code der gedrückten Taste an, wie auf dem Foto gezeigt. | ||
+ | |||
+ | Bei ungenauem Betrieb müssen die minimalen Analogwerte (min Array) für die Drucktasten eingestellt werden! | ||
+ | |||
+ | Standardausgabe (ohne Knopfdruck): | ||
+ | |||
+ | {{: | ||
+ | |||
+ | <hidden Klicken Sie hier, um den Code zu entsperren> | ||
+ | <code c> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | #define I2C_ADDR | ||
+ | #define BACKLIGHT_PIN | ||
+ | #define En_pin | ||
+ | #define Rw_pin | ||
+ | #define Rs_pin | ||
+ | #define D4_pin | ||
+ | #define D5_pin | ||
+ | #define D6_pin | ||
+ | #define D7_pin | ||
+ | |||
+ | int sw = 0; | ||
+ | int mins[] = {1024, 1000, 800, 740, 640, 560, 520, 480, 400, -100}; | ||
+ | |||
+ | LiquidCrystal_I2C | ||
+ | |||
+ | int sensorPin = A0; | ||
+ | int sensorValue = 0; | ||
+ | int ledPin = 13; // select the pin for the LED | ||
+ | |||
+ | void setup() { | ||
+ | pinMode(ledPin, | ||
+ | Serial.begin(9600); | ||
+ | while (!Serial) ; // wait for serial | ||
+ | delay(200); | ||
+ | lcd.begin (16,2); | ||
+ | | ||
+ | // Switch on the backlight | ||
+ | lcd.setBacklightPin(BACKLIGHT_PIN, | ||
+ | lcd.setBacklight(HIGH); | ||
+ | lcd.home (); // go home | ||
+ | lcd.print(" | ||
+ | lcd.setCursor ( 0, 1 ); // go to the 1nd line | ||
+ | lcd.print(" | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | // read the value from the sensor: | ||
+ | sensorValue = analogRead(sensorPin); | ||
+ | sw = 0; | ||
+ | for (int i = 1; sw == 0; i++) { | ||
+ | if (sensorValue > mins[i]) { | ||
+ | sw = i; | ||
+ | } | ||
+ | } | ||
+ | Serial.print (sensorValue); | ||
+ | Serial.print (" >> button pressed: "); | ||
+ | Serial.print (sw); | ||
+ | Serial.println (" (9: none) " | ||
+ | | ||
+ | lcd.setCursor ( 0, 1 ); // go to the 1nd line | ||
+ | lcd.print(sw); | ||
+ | |||
+ | delay(1000); | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== 5V 3-Positionen Wahlschalter ==== | ||
+ | Ich wollte den Dreistellungsschalter sofort nach einem der Programme durchsuchen und nicht nach einem, sondern nach vier, aber ich hatte nicht mehr so viele freie digitale Pins. Es gab jedoch 4 weitere freie Analogeingänge, | ||
+ | |||
+ | {{de: | ||
+ | |||