Viele Buttons mit Arduino auslesen

Um viele Buttons mit Arduino auszulesen ist es nötig, dass man das Programm nirgends mit Delays aufhält. Um trotzdem zeitabhängige Funktionen zu verwenden, sollte man auf Timer zurück greifen. Dazu habe ich hier schon mal etwas geschrieben: Timer mit Arduino. Ansonsten ist das Auslesen vieler Buttons mit Arduino recht unkompliziert. Es bietet sich an, den Zustand aller Buttons einmal pro Frame (also dem Aufruf der Loop-Funktion) in eine Variable zu schreiben und im weiteren Programmverlauf auf diese Zustandsvariable zuzugreifen.

Schaltplan

Mit Arduino viele Buttons auslesen

Hier sind drei Button mit den digitalen Pins 8 bis 10 verbunden. Zusätzlich sind drei LEDs mit der Kathoden-Seite (kurzes Beinchen) über einen 220 Ohm Widerstand mit dem GND verbunden. Das lange Beinchen (Anode) ist jeweils mit einem digitalen Kanal (2, 3, 4) verbunden.

Code: Viele Buttons mit Arduino auslesen

int ledPins[]={2,3,4};
int buttonPins[]={8,9,10};
int buttonStates[]={0,0,0};


void setup() {
  Serial.begin(9600);
  
  for (int i=0; i<sizeof(buttonPins); i++){
    pinMode(buttonPins[i],INPUT_PULLUP);  
  }
  Serial.println(sizeof(buttonPins));
  for (int i=0; i<sizeof(ledPins); i++){
    pinMode(ledPins[i],OUTPUT);  
  }
  
}

void loop() {
  for (int i=0; i<3; i++){
    if (digitalRead(buttonPins[i])==HIGH) buttonStates[i]=1;
    else buttonStates[i]=0;
  }

  for (int i=0; i<3; i++){
    if (buttonStates[i]==1) digitalWrite(ledPins[i],HIGH);
    else digitalWrite(ledPins[i],LOW);
  }

  delay(10);
}

Im Codebeispiel werden zunächst drei Arrays angelegt. Diese speichern jeweils die digitalen Pins des Arduinos für die LEDs und Buttons, sowie den Zustand der Buttons, der im Loop jeweils festgestellt und zugewiesen wird.

Alle Buttons werden per INPUT_PULLUP deklariert. Somit benötigt man keine externen Pullup-Widerstände.

Im Loop gibt es zwei for-Schleifen. Die erste liest die Buttons aus und speichert ihren Zustand im Array buttonState, die zweite for-Schleife gibt die Werte des State-Arrays als LED-Anzeige aus.

Hast du weitere Fragen? Probier doch mal unser brandneues Forum zu Arduino aus!

Schreibe einen Kommentar

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

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.