/* Blink ohne delay( )
* beide LEDs sollen unabhängig voneinander blinken
*/
//***** Portpins für Ein-/Ausgänge ***************************************
const int LED_rot = 32, LED_gruen = 33, Taster2 = 2, Taster4 = 4;
// ***** Globale Variablen ************************************************
bool ledStateRot, ledStateGruen; // für Umschaltung der LEDs => Merker-Bits
unsigned long previousRot, previousGruen;
unsigned long intervalRot, intervalGruen;
// ***** Initialisierung **************************************************
void setup() {
Serial.begin(115200); // Serielle Schnittstelle mit 115200Bit/s
Serial.println("Blinken mit 2 LEDs");
pinMode(LED_rot, OUTPUT); // die LEDs beginnen danach
pinMode(LED_gruen, OUTPUT); // zu leuchten!
ledStateRot = HIGH;
ledStateGruen = HIGH;
intervalRot = 500; // Zeit für LEDs
intervalGruen = 111; // Periodendauer ist doppelte Zeit
}
// ***** Endlosschleife ***************************************************
void loop() {
unsigned long currentMillis = millis();
// mindestens ein Zeichen empfangen?
if (Serial.available() > 0) {
char Zeichen = Serial.read();
switch(Zeichen) {
case 'r': intervalRot = Serial.parseInt(); break;
case 'g': intervalGruen = Serial.parseInt(); break;
default: break;
}
}
if (currentMillis - previousRot >= intervalRot) {
// wann wurde zuletzt umgeschaltet?
previousRot = currentMillis;
// wenn die LED aus ist, einschalten (und umgekehrt):
if (ledStateRot == LOW) {
ledStateRot = HIGH;
} else {
ledStateRot = LOW;
}
// LED mit dem aktuellen Wert der Variablen ledState setzen:
digitalWrite(LED_rot, ledStateRot);
}
if (currentMillis - previousGruen >= intervalGruen) {
// wann wurde zuletzt umgeschaltet?
previousGruen = currentMillis;
// Umschalten, kürzere Variante
ledStateGruen = !ledStateGruen;
// LED mit dem aktuellen Wert der Variablen ledState setzen:
digitalWrite(LED_gruen, ledStateGruen);
}
}
Taster2
Taster4
LED32
LED33
ESP32 Schulboard mit LEDs und Tastern, I2C-Bus mit Standard-Belegung
SSD1306 Display
WS2812 an Pin26