/*
*/
//***** Portpins für Ein-/Ausgänge ****************************************
const int Enc_A = 34, Enc_B = 35, Enc_Taster = 0, NEO_Pin=26;
const int LED_rot = 32, LED_gruen = 33, Taster2 = 2, Taster4 = 4;
// ***** Datentyp für Zustände ********************************************
enum Zustaende_t { Anz_Info, Einst_Stunden, Einst_Minuten, Einst_Temp};
Zustaende_t Menu; // Variable vom Typ Zustaende_t
// ***** Globale Variablen ************************************************
bool T2_neu, T2_alt, T4_neu, T4_alt; // für Flankenerkennung
unsigned long nextMillis;
bool T_druck;
// ***** Initialisierung **************************************************
void setup() {
Serial.begin(115200); // Serielle Schnittstelle mit 115200Bit/s
pinMode(LED_rot, OUTPUT); // die LEDs beginnen danach
pinMode(LED_gruen, OUTPUT); // zu leuchten!
digitalWrite(LED_rot, HIGH); // also beide ausschalten
digitalWrite(LED_gruen, HIGH);
pinMode(Taster2, INPUT_PULLUP); // Taster brauchen hier den
pinMode(Taster4, INPUT_PULLUP); // Pullup-Widerstand
Menu = Anz_Info;
Serial.printf("Zustand %d\n", Zustand);
}
// ***** Endlosschleife ***************************************************
void loop() {
unsigned long currentMillis = millis( );
if ( currentMillis >= nextMillis ) {
nextMillis = currentMillis + 50; // 20x pro Sekunde
Einlesen( );
SteuerungDisplay( );
Ausgeben( );
}
}
// ***** Eigene Funktionen ************************************************
// ***** Einlesenfunktion: liest alle Eingänge und speichert in globalen Variablen
void Einlesen ( ) {
// Flankenerkennung
T2_neu = digitalRead(Taster2);
if ( T2_neu == 0 && T2_alt == 1) { // fallende Flanke = Tastendruck
T_druck = true;
}
else {
T_druck = false;
}
T2_alt = T2_neu; // für Flankenerkennung
}
// ***** Automaten-Funktion ***********************************************
void SteuerungDisplay ( ) {
switch(Menu) {
case Anz_Info: digitalWrite(LED_rot, HIGH); // Ausschalten
if (T_druck == true) {
Zustand = Z1;
Serial.println("Gehe in Zustand Z1");
}
break;
case Z1: digitalWrite(LED_rot, LOW); // Einschalten
if (T_druck == true) {
Zustand = Z0;
Serial.println("Gehe in Zustand Z0");
}
break;
default: break;
}
}
// ***** Ausgabe-Funktion *************************************************
// ***** Schreibe den Wert der globalen Variablen an die Ausgänge *********
void Ausgeben( ) {
}
Taster2
Taster4
LED32
LED33
ESP32 Schulboard mit LEDs und Tastern, I2C-Bus mit Standard-Belegung
SSD1306 Display
WS2812 an Pin26