/* Uhrzeit mit millis() erzeugen
 * Die Abfrage von millis() und previousMillis gibt eine Ausführung in der if-Abfrage
 * im Sekundentakt. Mit einem Module-60-Zähler werden Sekunden und Minuten erzeugt
 */
//***** Taster und LEDs wie auf bleuer Platine **********************
const int LED_rot=32, LED_gruen=33, Taster2=2, Taster4=4;

//***** Globale Variablen *******************************************
unsigned long Ausschaltzeit_rot, Ausschaltzeit_gruen;
unsigned long Laufzeit_rot, Laufzeit_gruen;

//***** Setup, wird 1x ausgeführt ***********************************
void setup() {
  Serial.begin(115200);
  pinMode(LED_rot, OUTPUT);
  pinMode(LED_gruen, OUTPUT);
  pinMode(Taster2, INPUT_PULLUP);
  pinMode(Taster4, INPUT_PULLUP);
  
  Laufzeit_rot = 10000; // 10 Sekunden
  Laufzeit_gruen = 15000; // 15 Sekunden
}

//***** Loop wird immer wieder ausgeführt ****************************
void loop() {
	unsigned long currentMillis = millis ( );
	// nachtriggerbar, wenn der Taster bei leuchtender LED
	// wieder gedrückt wird, wird die Zeit verlängert
	if ( digitalRead ( Taster2 ) == LOW ) {
		digitalWrite ( LED_rot, LOW );     // EINschalten mit LOW
		Ausschaltzeit_rot = currentMillis + Laufzeit_rot;
	}
	
	if ( currentMillis >= Ausschaltzeit_rot ) {
		digitalWrite ( LED_rot, HIGH );     // AUSschalten mit HIGH
	}
	
	// nicht nachtriggerbar => wenn die LED bereits an ist, soll die
	// Zeit NICHT verlängert werden => prüfe, ob LED noch aus ist 
	if ( (digitalRead ( Taster4 ) == LOW) && (digitalRead(LED_gruen)==HIGH ) ) {
		digitalWrite ( LED_gruen, LOW );     // EINschalten mit LOW
		Ausschaltzeit_gruen = currentMillis + Laufzeit_gruen;
	}

  	if ( currentMillis >= Ausschaltzeit_gruen ) {
		digitalWrite ( LED_gruen, HIGH );     // AUSschalten mit HIGH
	}
	
}

Taster2
Taster4
LED32
LED33
ESP32 Schulboard mit LEDs und Tastern, I2C-Bus mit Standard-Belegung
SSD1306 Display
WS2812 an Pin26