HOWTO · Arduino
Erstellen Sie einen Zähler in Arduino
Man kann einen Zähler mit einer Schleife in Arduino erstellen.
Auf dieser Seite
Für einen Arduino-Zähler verbinden Sie einen Taster mit einem digitalen Eingang und GND, erfassen jeden Tastendruck einmal, erhöhen eine Variable und geben ihren Wert im Serial Monitor aus. Das folgende Beispiel ist für ein Uno-kompatibles Board gedacht und setzt den Zähler nach einem einstellbaren Grenzwert zurück. Eine integrierte oder externe LED signalisiert Tastendrücke, zeigt aber nicht den Zahlenwert an.
So funktioniert ein Arduino-Zähler
Ein Zähler ist eine Variable, die eine Zahl speichert und sich ändert, wenn ein Ereignis eintritt. In diesem Projekt ist das Ereignis ein Tastendruck. Der Arduino führt wiederholt loop() aus, prüft den Eingang und erhöht den Zähler einmal, wenn der Taster von losgelassen zu gedrückt wechselt. Ein kurzes Entprellintervall filtert die schnellen elektrischen Änderungen, die beim Schließen eines mechanischen Schalters auftreten können.
Eine Schleife kann auch eine festgelegte Anzahl von Vorgängen wiederholen. Eine for-Schleife kann beispielsweise eine LED fünfmal blinken lassen und dann enden. Das ist eine endliche Schleife, während loop() des Arduino fortlaufend ausgeführt wird. Das Haupt-Sketch verwendet diese fortlaufende Schleife, um den Taster zu überwachen.
Taster und LED anschließen
Bei INPUT_PULLUP verbinden Sie einen Anschluss des Tasters mit dem digitalen Pin 2 und den anderen mit GND. Der interne Pull-up-Widerstand des Boards hält den Eingang auf HIGH, solange der Taster nicht gedrückt ist. Beim Drücken wird der Pin mit GND verbunden und LOW gelesen. Für diese Schaltung ist kein externer Pull-up-Widerstand erforderlich.
Für eine externe LED verbinden Sie den digitalen Pin 13 über einen Vorwiderstand mit der Anode der LED (langes Bein) und deren Kathode (kurzes Bein) mit GND. Die integrierte LED des Uno ist üblicherweise mit Pin 13 verbunden. Prüfen Sie bei anderen Boards die Pinbelegung. Das Sketch verwendet LED_BUILTIN, damit es den für das Board festgelegten Pin der integrierten LED nutzen kann. Achten Sie darauf, dass der LED-Strom die Grenzwerte des Pins nicht überschreitet.
Tasterzähler-Sketch schreiben und hochladen
Der folgende vollständige C++-Quelltext lässt sich in der Arduino IDE als Sketch verwenden. Bei einem C++-Build auf dem Desktop stellt der enthaltene Test-Harness drei Tastendrücke bereit, sodass das Verhalten des Zählers sichtbar wird. Legen Sie mit resetAt den ersten Zählerstand fest, bei dem der Zähler auf null zurückgesetzt werden soll. Das Entprellintervall beträgt 30 Millisekunden.
#ifdef ARDUINO
#include <Arduino.h>
#else
// Desktop harness for a deterministic button sequence.
#include <iostream>
using byte = unsigned char;
const int HIGH = 1, LOW = 0, INPUT_PULLUP = 2, OUTPUT = 3;
const int LED_BUILTIN = 13;
unsigned long mockNow = 0;
void pinMode(byte, int) {}
void digitalWrite(byte, int) {}
unsigned long millis() { return mockNow; }
int digitalRead(byte) {
bool pressed = (mockNow >= 10 && mockNow < 50) ||
(mockNow >= 100 && mockNow < 140) ||
(mockNow >= 190 && mockNow < 230);
return pressed ? LOW : HIGH;
}
struct MockSerial {
void begin(int) {}
void println(int value) { std::cout << value << '\n'; }
void println(const char* value) { std::cout << value << '\n'; }
} Serial;
#endif
const byte buttonPin = 2;
const byte ledPin = LED_BUILTIN;
const unsigned long debounceMs = 30;
const int resetAt = 3;
int counter = 0;
int lastRawReading = HIGH;
int stableReading = HIGH;
unsigned long lastChangeTime = 0;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int reading = digitalRead(buttonPin);
unsigned long now = millis();
if (reading != lastRawReading) {
lastRawReading = reading;
lastChangeTime = now;
}
if (now - lastChangeTime >= debounceMs && reading != stableReading) {
stableReading = reading;
if (stableReading == LOW) {
counter++;
digitalWrite(ledPin, HIGH);
Serial.println(counter);
if (counter >= resetAt) {
counter = 0;
Serial.println("Counter reset");
}
} else {
digitalWrite(ledPin, LOW);
}
}
}
#ifndef ARDUINO
int main() {
setup();
for (mockNow = 0; mockNow <= 230; mockNow += 10) loop();
}
#endif
1
2
3
Counter reset
Im Desktop-Harness erreichen die drei vorgegebenen Tastendrücke resetAt. Daher zeigt die Ausgabe jeden Zählerstand und anschließend die Rücksetzmeldung. Die Meldung Counter reset bleibt im unveränderten Codebeispiel englisch.
Wählen Sie in der Arduino IDE das angeschlossene Board und den passenden Port aus und laden Sie das Sketch hoch. Öffnen Sie anschließend Tools > Serial Monitor und stellen Sie die Baudrate auf 9600 ein. Drücken Sie den Taster für jeden Zählschritt einmal und lassen Sie ihn wieder los. Der Monitor gibt 1, 2 und 3 aus; nach dem dritten Tastendruck erscheint Counter reset, beim nächsten Tastendruck wieder 1. Die LED leuchtet, solange der Tastendruck stabil erkannt wird, und erlischt nach dem Loslassen. Auf der Hardware verwenden setup() und loop() den Arduino-Core. Der Desktop-Harness stellt für dieselbe Zählerlogik eine feste Folge von Eingaben bereit.
Zählerstand anzeigen und zurücksetzen
In diesem Beispiel dient der Serial Monitor als numerische Anzeige. Eine einzelne LED kann signalisieren, dass ein Tastendruck erkannt wurde, aber sie kann den Zählerstand nicht anzeigen. Für eine Ziffernanzeige am Gerät benötigen Sie ein 7-Segment-Modul oder ein LCD samt erforderlicher Verdrahtung und Bibliothek. Diese Anzeigen sind im Sketch nicht implementiert.
Der Zähler wird bei resetAt automatisch zurückgesetzt: Das Sketch gibt den Grenzwert aus, setzt den gespeicherten Zählerstand auf null und läuft weiter. Ändern Sie resetAt auf einen anderen positiven Zählerstand, um einen anderen Grenzwert festzulegen. Der Code verwendet keinen separaten Rücksetztaster. Wenn Sie einen solchen ergänzen, weisen Sie ihm einen eigenen Eingang zu und legen Sie Verdrahtung und Verhalten ausdrücklich fest, statt einen ungenutzten Pin vorauszusetzen.
Häufig gestellte Fragen
Welche Komponenten brauche ich?
Ein Uno-kompatibles Board, ein Taster, Jumperkabel und ein USB-Kabel genügen, um Tastendrücke zu zählen und die Werte am Computer anzuzeigen. Nutzen Sie die integrierte LED oder ergänzen Sie eine externe LED mit Vorwiderstand als optische Rückmeldung.
Kann ich eine andere Anzeige verwenden?
Ja. Ein LCD oder eine 7-Segment-Anzeige kann den Zahlenwert darstellen. Dafür benötigen Sie jeweils passende Anschlüsse und Anzeigecode. Das Beispiel oben sendet die Zahl an den Serial Monitor und verwendet die LED nur als Anzeige für einen Tastendruck.
Wie ändere ich den Rücksetzgrenzwert?
Ändern Sie resetAt am Anfang des Sketches. Der Zähler wird unmittelbar zurückgesetzt, nachdem der Zählerstand ausgegeben wurde, der den Grenzwert erreicht.
Kann der Zähler herunterzählen?
Ja. Ziehen Sie bei einem erkannten Tastendruck eins ab und legen Sie fest, was beim Erreichen des unteren Grenzwerts geschehen soll. Diese Änderung ist im obigen Sketch nicht enthalten.
Kann ich weitere Taster hinzufügen?
Ja. Weisen Sie jedem zusätzlichen Taster einen Pin zu, konfigurieren Sie dessen Eingang und legen Sie eine eigene Aktion fest, zum Beispiel Herunterzählen oder manuelles Zurücksetzen. Verdrahten Sie jeden Taster passend zum gewählten Eingangsmodus. Das Hauptbeispiel verarbeitet nur einen Taster.