Das Programm demonstriert die Verwendung eines Tasters.
Wird der Taster gedrückt, leuchtet die LED.
// Variablen für die LED und den Taster setzen
int LED = 6;
int TASTER = 7;
// speichert den mit digitalRead gelesenen Wert
int TasterLesen;
void setup()
{
// pinMode LED setzen, Ausgabe = OUTPUT
pinMode(LED, OUTPUT);
/*
pinMode des Tasters setzen
INPUT = Modus Eingabe
INPUT_PULLUP = Modus Eingabe und Eingangspegel auf HIGH setzen
*/
pinMode(TASTER, INPUT_PULLUP);
}
void loop()
{
// Status des Tasters lesen (HIGH/LOW)
TasterLesen = digitalRead(TASTER);
// wenn der Taster gedrückt wurde
if (TasterLesen == LOW)
{
// kurze Pause
delay(200);
// Wert für LED schreiben
// LOW = aus, HIGH = an
digitalWrite(LED, HIGH);
}
}
Wenn der Taster als Ein- und Ausschalter der LED funktionieren soll:
int LED = 6;
int TASTER = 7;
int TasterLesen;
/*
setzt den Status
Status true -> LED an
Status false -> LED aus
beim Start soll die LED ausgeschaltet sein
*/
bool Status = false;
void setup()
{
pinMode(LED, OUTPUT);
pinMode(TASTER, INPUT_PULLUP);
}
void loop()
{
TasterLesen = digitalRead(TASTER);
if (TasterLesen == LOW)
{
delay(200);
// LED ist aus ⇒ Status == false
if (Status == false)
{
digitalWrite(LED, HIGH);
// Status auf true (an) setzen
Status = true;
}
// LED ist an ⇒ Status == true
else if (Status == true)
{
digitalWrite(LED, LOW);
// Status auf false (aus) setzen
Status = false;
}
}
}
Leider verhindert das delay(200) nur sehr unzureichend das sogenannte "Prellen" eines Tasters. Wird der Taster über eine längere Zeit gedrückt gehalten, wechselt das ausgesendete Signal immer wieder zwischen HIGH und LOW. Das führt zu unerwünschten Effekten: im Beispielpogramm blinkt die LED solange der Taster gedrückt wird.
Abhilfe schafft hier die Bibliothek Bounce2.
Bevor sie verwenden kannst, musst du sie zunächst installieren:
Sketch -> Bibliothek einbinden -> Bibliotheken verwalten
// Bibliothek Bounce2 einbinden
#include <Bounce2.h>
// Bounce starten
// Namen des Objekts Bounce (TasterGedrueckt) festlegen
Bounce TasterGedrueckt = Bounce();
int LED = 6;
int TASTER = 7;
/*
setzt den Status
Status true -> LED an
Status false -> LED aus
beim Start soll die LED ausgeschaltet sein
*/
bool Status = false;
void setup()
{
pinMode(LED, OUTPUT);
/*
Namen des Objekts Bounce (TasterGedrueckt) dem Taster zuordnen (attach)
Zeitintervall einstellen
INPUT_PULLUP -> Eingangspegel auf HIGH setzen
*/
TasterGedrueckt.attach(TASTER, INPUT_PULLUP);
TasterGedrueckt.interval(20);
}
void loop()
{
// Tasterstatus abfragen
if (TasterGedrueckt.update())
{
// Taster wurde gedrückt, das Signal ist gefallen
if (TasterGedrueckt.fell())
{
// LED ist aus ⇒ Status == false
if (Status == false)
{
digitalWrite(LED, HIGH);
// Status auf true (an) setzen
Status = true;
}
// LED ist an ⇒ Status == true
else if (Status == true)
{
digitalWrite(LED, LOW);
// Status auf false (aus) setzen
Status = false;
}
}
}
}
Mit der selben Schaltung soll die Leuchtdauer einer LED gemessen werden.
Die Messung startet, wenn der Taster gedrückt wird.
// Bibliothek Bounce2 einbinden
#include "Bounce2.h"
// Bounce starten
// Namen des Objekts Bounce (TasterGedrueckt) festlegen
Bounce TasterGedrueckt = Bounce();
int LED = 7;
int TASTER = 6;
/*
setzt den Status
Status true -> LED an
Status false -> LED aus
beim Start soll die LED ausgeschaltet sein
*/
bool Status = false;
// Startzeit wird mit millis() ermittelt
unsigned long Startzeit;
// verstrichene Zeit in Millisekunden
unsigned long VerstricheneZeit;
float Sekunden;
int Minute;
void setup() {
pinMode(LED, OUTPUT);
/*
Namen des Objekts Bounce (TasterGedrueckt) dem Taster zuordnen (attach)
Zeitintervall einstellen
INPUT_PULLUP -> Eingangspegel auf HIGH setzen
*/
TasterGedrueckt.attach(TASTER, INPUT_PULLUP);
TasterGedrueckt.interval(20);
Serial.begin(9600);
}
void loop()
{
// Tasterstatus abfragen
if (TasterGedrueckt.update())
{
// Taster wurde gedrückt, das Signal ist gefallen
if (TasterGedrueckt.fell())
{
// LED ist aus ⇒ Status == false
if (Status == false) {
digitalWrite(LED, HIGH);
// Status auf true (an) setzen
Status = true;
// wenn Status == true -> Timer starten
if (Status) Startzeit = millis();
}
// LED ist an ⇒ Status == true
else if (Status == true)
{
digitalWrite(LED, LOW);
// Dauer des Einschaltens der LED berechnen
VerstricheneZeit = millis() - Startzeit;
Sekunden = VerstricheneZeit / 1000.0;
String AnzeigeSekunden = String(Sekunden);
AnzeigeSekunden.replace(".", ",");
// Sekunden anzeigen
Serial.println("Leuchtdauer: " + AnzeigeSekunden + " Sekunde(n)");
// Minuten berechnen und anzeigen
Minute = Sekunden / 60;
if (Minute > 0) {
Serial.print(" = " + String(Minute) + " Minute(n): ");
Sekunden = Sekunden - Minute * 60;
Serial.println(String(Sekunden) + " Sekunde(n)");
}
// Status auf false (aus) setzen
Status = false;
}
}
}
}
Letzte Aktualisierung: