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


    5 Gedanken zu „Viele Buttons mit Arduino auslesen“

    1. Pingback: Arduino print – Daten anzeigen mit der serielle Ausgabe

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

      1. Hallo Klaus, ich kenne Bascom leider nicht. Von daher wäre mir das leider nicht möglich. Bisher ist mir das im Zusammenhang mit Arduino auch noch nicht unter gekommen.
        Trotzdem lieben Dank für deine Nachricht. Liebe Grüße Stefan

    3. Marcus Willmeroth

      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

      1. Hi Marcus, das Verhalten, dass du beobachtest ist schon richtig so. Beim Arduino setzen die internen Pull-Ups die Buttons auf HIGH, wenn die Buttons nicht gedrückt sind. Wenn man sie drückt, sind sie LOW. Wenn man das, wie im Beispiel, 1:1 auf die LEDs anwendet sind sie an, wenn die Taster nicht gedrückt sind. Das kannst du ändern, indem du die Ausgaben invertierst. Also wenn du den Code von:

        if (buttonStates[i]==1) digitalWrite(ledPins[i],HIGH);
        else digitalWrite(ledPins[i],LOW);
        }

        zu

        if (buttonStates[i]==1) digitalWrite(ledPins[i],LOW);
        else digitalWrite(ledPins[i],HIGH);
        }

        änderst. Ich hoffe, das hilft dir weiter.

        Liebe Grüße

        Stefan

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht.

     

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