3 Tasten einlesen im Arduino

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).

drei Tasten

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

2 Gedanken zu „3 Tasten einlesen im Arduino

  1. Pingback: 3 Tasten: Einen Wert einstellen und im EEPROM ablegen | Shelvin – Elektronik ausprobiert und erläutert

  2. Horst Rietzscher

    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.

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.