Zum Inhalt springen
Arduino viele Buttons auslesen Titel

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ückgreifen. 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 Buttons 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.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    Alle Buttons werden per INPUT_PULLUP deklariert. Somit benötigt man keine externen Pull-up-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.


    Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

    • Die beliebtesten Arduino-Projekte von StartHardware
    • Inklusive Schaltplan, Beschreibung und Code
    • Arduino-Schnellstart-Kapitel
    • Kompakter Programmierkurs


    0 0 votes
    Article Rating
    Abonnieren
    Benachrichtige mich bei

    Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..

    4 Comments
    Newest
    Oldest Most Voted
    Inline Feedbacks
    Alle Kommentare anzeigen
    Klaus Eyssel
    4 Jahre zuvor

    Ich bin in Bascom und teilweise auch in Assembler tätig und einigermaßen drin.
    Leider ist mir C fremd.
    Wäre es nicht möglich parallel C und Bascom auf zu führen, dann fällt das Lernen viel leichter ?
    freundliche Grüße
    Klaus Eyssel

    Eure Reihe hier ist toll. Habe lange nach so etwas gesucht und gleich beim ersten Mal einiges verstanden

    Marcus Willmeroth
    5 Jahre zuvor

    Hallo, finde das Tutorial „Viele Buttons mit Arduino auslesen“ echt interessant – besonders desswegen, weil ich genau diese Funktion für mein Projekt (ca.20 Schalter + Touchscreen Buttons) benötige.
    Leider bin ich vollkommener Anfänger – aber hoffentlich noch lernfähig ;)
    Ich habe die Schaltung mit meinem Uno einmal nachgebaut und den Sketch von euch hochgeladen.
    Grundsätzlich hätte ich damit gerechnet, dass die LEDs nach dem Einschalten Status LOW hätten und bei Tasterdruck einschalten. Bei mir leuchten allerdings die LEDs sofort und schalten sich nur aus, wenn man den Taster gedrückt hält. Nach loslassen leuchten sie sofort wieder.
    Ich würde den Sketch gerne genau verstehen und so umstellen können, dass er so funktioniert wie ich mir es erhofft hatte.
    Würde mich riesig freuen wenn ihr mir helfen könntet.
    VG… Marcus

    4
    0
    Ich würde mich über deine Meinung freuen.x