trying to learn more about timers and interrupts i made a small example with DHT22 sensor and LDR resistor. My goal is to measure temperature and light in different intervals. First i made a sketch with one timer and everything worked correctly. After I added a second timer and interrupt for LDR readings my temperature interrupt stopped working.
Code: Select all
#include <Arduino.h>
#include <DHT.h>
#define LDR 33
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
volatile bool getTemp = false;
volatile bool getLight = false;
hw_timer_t *tempTimer = NULL;
hw_timer_t *ldrTimer = NULL;
portMUX_TYPE muxTemp = portMUX_INITIALIZER_UNLOCKED;
portMUX_TYPE muxLdr = portMUX_INITIALIZER_UNLOCKED;
void IRAM_ATTR tempInterrupt() {
portENTER_CRITICAL_ISR(&muxTemp);
getTemp = true;
portEXIT_CRITICAL_ISR(&muxTemp);
}
void IRAM_ATTR ldrInterrupt() {
portENTER_CRITICAL_ISR(&muxLdr);
getLight = true;
portEXIT_CRITICAL_ISR(&muxLdr);
}
void setup() {
Serial.begin(115200);
dht.begin();
tempTimer = timerBegin(0, 80, true);
timerAttachInterrupt(tempTimer, &tempInterrupt, true);
timerAlarmWrite(tempTimer, 5000000, true);
ldrTimer = timerBegin(0, 80, true);
timerAttachInterrupt(ldrTimer, &ldrInterrupt, true);
timerAlarmWrite(ldrTimer, 1000000, true);
timerAlarmEnable(ldrTimer);
timerAlarmEnable(tempTimer);
}
void loop() {
if (getTemp) {
portENTER_CRITICAL_ISR(&muxTemp);
getTemp = false;
portEXIT_CRITICAL_ISR(&muxTemp);
Serial.print("Temperature: ");
Serial.println(dht.readTemperature());
}
if (getLight) {
portENTER_CRITICAL_ISR(&muxLdr);
getLight = false;
portEXIT_CRITICAL_ISR(&muxLdr);
Serial.print("LDR adc reading: ");
Serial.println(analogRead(LDR));
}
}
I'm using VS Code with platformio and DOIT esp32 devkit1 board.
Im very new to the esp platform so I feel like I'm missing something obvious here.
Thanks in advance for your help.