/* 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
ssd1306
Taster2
Taster4
LED32
LED33
ESP32 Schulboard mit LEDs und Tastern, I2C-Bus mit Standard-Belegung
SSD1306 Display
WS2812 an Pin26