Anzeige

Viele Buttons mit Arduino auslesen

Arduino viele Buttons auslesen Titel

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.

Ich würde mich freuen, wenn du diesen Beitrag bewerten würdest :-)

Durchschnittliche Bewertung 4.1 / 5. Anzahl Bewertungen: 8

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Deine Meinung ist mir sehr wichtig!

Lasse uns diesen Beitrag verbessern!

Wie kann ich den Beitrag verbessern? Was würdest du dir wünschen? Was hat dir gefehlt?

Die neuen E-Books von StartHardware:

  • 20 Lektionen
  • Projektbasiert und kurzweilig
  • Aus den Erfahrungen unzähliger Workshops
  • Sofortiger Download

  • Die beliebtesten Projekte von StartHardware
  • Mit Code, Schaltplan und Erklärungen
  • Fachwissen-Kapitel
  • Sofortiger Download


Willst du lieber ein Buch zum Anfassen? Dann werde mit diesem hier zum Arduino-Experten! Arduino: Kompendium: Elektronik, Programmierung und Projekte* – Damit lernst du alle Tricks!

Ich hoffe, der Beitrag hilft dir weiter. Und falls du weitere Fragen hast, stelle sie gern hier im Arduino-Forum.

4 Gedanken zu „Viele Buttons mit Arduino auslesen“

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

  2. 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. Erforderliche Felder sind mit * markiert.

 

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