#define LED_GREEN 2 // Grüne LED ist an GPIO 2 angeschlossen
#define LED_RED 15 // Rote LED ist an GPIO 15 angeschlossen
#define SWITCH 12 // Schalter ist an GPIO 12 angeschlossen
#define BUTTON 13 // Taster ist an GPIO 13 angeschlossen
#define TIME_DEBOUNCE 20 // Entprellzeit für Taster 20ms
#define TIME_INTERVAL 1000 // Zeitintervall für Startkommando in ms
#define TIME_COUNT 250 // Zähldauer Wert * TIME_DEBOUNCE 250 * 20ms = 5s
boolean do_once = true; // Variable do_once vom Datentyp boolean deklarieren und mit true initialisieren
boolean button_before = HIGH; // Variable button_before vom Datentyp boolean deklarieren und mit HIGH initialisieren
unsigned char counter_button = 0; // Variable counter_button vom Datentyp unsigned char deklarieren und mit 0 initialisieren
unsigned int counter_time_steps = 0; // Variable counter_time_steps vom Datentyp unsigned int deklarieren und mit 0 initialisieren
void setup() {
pinMode(LED_GREEN, OUTPUT); // Grüne LED als Ausgang konfigurieren
pinMode(LED_RED, OUTPUT); // Rote LED als Ausgang konfigurieren
pinMode(SWITCH, INPUT_PULLUP); // Schalter als Eingang mit Pullup-Widerstand konfigurieren
pinMode(BUTTON, INPUT_PULLUP); // Taster als Eingang mit Pullup-Widerstand konfigurieren
digitalWrite(LED_GREEN, LOW); // Ausgang für grüne LED definieren => soll nicht leuchten
digitalWrite(LED_RED, HIGH); // Ausgang für rote LED definieren => soll leuchten (noch keine Freigabe)
// Serielle Schnittstelle konfigurieren und Titel ausgeben
Serial.begin(115200); // Übertragungsgeschwindigkeit für Serial Monitor
Serial.println("Projekt: Frag mal einen Schalter und einen Taster ab");
Serial.println("----------------------------------------------------");
// Startkommando ausgeben => Text auf Bildschirm und bei los rote LED aus- und grüne LED einschalten
Serial.print("Auf die Plätze ... ");
delay(TIME_INTERVAL);
Serial.print("fertig ... ");
delay(TIME_INTERVAL);
Serial.println("los ");
digitalWrite(LED_GREEN, HIGH);
digitalWrite(LED_RED, LOW);
}
void loop() {
// Tasterbetätigungen zählen solange Zeit nicht abgelaufen ist
while (counter_time_steps < TIME_COUNT) {
// Feststellen, wenn Taster gedrückt wird und Zähler um 1 erhöhen
if ((digitalRead(BUTTON) == LOW) && (button_before == HIGH)) {
button_before = LOW;
counter_button = counter_button + 1;
}
// Feststellen, wenn Taster losgelassen wird
if ((digitalRead(BUTTON) == HIGH) && (button_before == LOW)) {
button_before = HIGH;
}
delay(TIME_DEBOUNCE);
counter_time_steps++;
}
// Die Zeit ist abgelaufen => LED-Anzeige einmal aktualisieren und Zählwert ausgeben
if (do_once == true) {
do_once = false;
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_RED, HIGH);
Serial.print("Du hast den Taster ");
Serial.print(counter_button);
Serial.println(" Mal betätigt");
}
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
led1:A
led1:C
led2:A
led2:C
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
sw1:1
sw1:2
sw1:3