/* Testprogramm für den Hardware-Timer des ESP32                *
 * Timer-Grundtakt 80 MHz, Teilerfaktor 80 => 1 µs Taktperiode  */

//***** 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;

//***** globale Variablen *************************************************
hw_timer_t *ErsterTimer = NULL;
uint64_t Alarmwert;
unsigned long LastTime;
bool TuWas;

// ***** Initialisierung **************************************************
void setup() {
  Serial.begin(115200);
  pinMode(LED_rot, OUTPUT);
  digitalWrite(LED_rot, HIGH);
  ErsterTimer = timerBegin ( 0, 80, true ); // Vorteiler :80, Aufwärts
  // Alarmwert in µs,                                   Stunden                    Minuten
	timerAlarmWrite ( ErsterTimer, (uint64_t)1000*1000*60*60*0  + (uint64_t)1000*1000*60*5 , true );  // Timer zählt in µs => 60 Millionen Takte = 1 Minute
	timerAttachInterrupt ( ErsterTimer, Wecker, true );
	timerAlarmEnable( ErsterTimer );
	timerStart ( ErsterTimer );
  TuWas = false;
  LastTime = millis( );
}
// ***** Endlosschleife ***************************************************
void loop() {
  if(TuWas == true) {
    digitalWrite(LED_rot, !digitalRead(LED_rot));
    delay(1000);
  }

  // Timer-Stand auslesen und ausgeben (zur Demo)
  if( millis() - LastTime >= 5000 ) {
    LastTime = millis();
    uint64_t TimerIst = timerRead(ErsterTimer);
    Serial.printf("Timer-Wert %lu us\n", TimerIst);
  }
}

// ***** Interrupt-Service Routinen ***************************************
void Wecker ( ) {
  TuWas = true;
}
Loading
ssd1306
Taster2
Taster4
LED32
LED33
ESP32 Schulboard mit LEDs und Tastern, I2C-Bus mit Standard-Belegung
SSD1306 Display
WS2812 an Pin26