Ich möchte mit möglichst wenig Aufwand 3 Tasten einlesen. Dazu werden die analogen Eingänge verwendet.
3 Tasten werden einseitig an GND geschaltet und die andere Seite kommt an A0, A1 und A2.
Die Analogeingänge werden als Eingang geschaltet und mit digitalWrite(A0,HIGH); wird der interne Pullup Widerstand von 20kOhm zu +5V eingeschaltet. Dann wird immer 5V oder der Digitalwert 1023 gelesen. Nur wenn der Taster gedrückt ist, wird 0V oder der digitale Wert 0 gelesen.
Meine Schwelle lege ich auf 500, darunter ist die Taste gedrückt, darüber nicht.
Dann warte ich noch ein wenig um ein zufälliges Berühren auszuschliessen und nur richtige Tastendrücke anzunehmen.
Die Schaltung
Die rechten Pins der Schalter sind alle mit schwarz zusammengeführt und auf GND gelegt. Die linken Pins der Schalter gehen zum Arduino an A0 (weiss), A1 (orange) und A2 (gelb).
Das Programm
// 3 Taster einlesen und die LED verschieden oft blinken lassen // // Matthias Busse Version 1.0 vom 17.10.2014 int LED=13, festgedrueckt=150, t=200;; void setup() { pinMode(LED, OUTPUT); // LED Ausgang pinMode(A0,INPUT); // Taste 0 digitalWrite(A0,HIGH); // interner pullup Widerstand pinMode(A1,INPUT); // Taste 1 digitalWrite(A1,HIGH); pinMode(A2,INPUT); // Taste 2 digitalWrite(A2,HIGH); } void loop() { if(readButton(0)) blink(2); // bei Taste 0 2x blinken if(readButton(1)) blink(3); // bei Taste 1 3x blinken if(readButton(2)) blink(4); // bei Taste 2 4x blinken } int readButton(int pin) { // Taste einlesen if(analogRead(pin) < 500) { // Analog Eingang abfragen delay(festgedrueckt); if(analogRead(pin) < 500) return 1; // war gedrückt } return 0; // war nicht gedrückt } void blink(int anz) { // LED x-mal blinken lassen for(int i=0; i < anz; i++) { digitalWrite(LED, HIGH); // LED an delay(t); // warten digitalWrite(LED, LOW); // LED aus delay(t); } }
Das ist nur ein kleines Programm. Es ermöglicht mir später aber eine einfache Menüsteuerung mit den 3 Tasten: auswählen, hoch und runter. Und es werden nur die Analog Pins verwendet, die häufig nicht weiter benötigt werden.
von Matthias Busse
Pingback: 3 Tasten: Einen Wert einstellen und im EEPROM ablegen | Shelvin – Elektronik ausprobiert und erläutert
bedeutet return1 gehe auf das Programm void blink und
bedeutet return0 gehe auf das Programm void loop ?
Wie würde es aussehen mit 2 weiteren Schaltern ein return2 anzusteuern , wo die LED unterschiedlich fadet.
Wenn ich im Programm rumexperimentiere erhalte ich immer die Fehlermeldung blink ist nicht deklariert.