CO2センサー(MH-Z19B)をESP32のPWMで使用する
#define pwmPin 22 // Change this to the appropriate pin connected to the MH-Z19 PWM output int prevVal = LOW; long th, tl, h, l, ppm; void setup() { Serial.begin(115200); pinMode(pwmPin, INPUT); Serial.println("MH-Z19 is warming up now."); } void loop() { int co2value = co2read(); Serial.println("out:"+String(co2value)); //delay(1000); } int co2read() { int maxAttempts = 5000; int attempts = 0; while (attempts < maxAttempts) { long tt = millis(); int myVal = digitalRead(pwmPin); // Measure pulse width if (myVal == HIGH) { if (myVal != prevVal) { h = tt; tl = h - l; prevVal = myVal; } } else { if (myVal != prevVal) { l = tt; th = l - h; prevVal = myVal; ppm = 5000 * (th - 2) / (th + tl - 4); //Serial.println("CO2 PPM = " + String(ppm)); return ppm; } } delay(10); attempts++; } // If maximum attempts reached, return an error code, e.g., -1 return -1; }
loop内のdelayを取ると挙動がおかしくなります。