Если кому надо:
на Pin 0 светодиод. он помигивает в такт с единицей с датчика СО2
на Pin 5 PWM от mh-z19 ВНИМАНИЕ у меня стабильно заводится схема только если этот pin на esp12-f заземлить резистором 10к.
gpio.mode(0, gpi
UTPUT)
tm=0
th=0
tl=0
ts=0
t11=0
t00=0
tss=0
ppm=0
gpio.mode(5,gpio.INT,gpio.PULLUP)
gpio.trig(5, "both",function(level) -- вешаем триггер на pin 5. Будем по каждому фронту фиксировать время с таймера
tm=tmr.now()
if tmr.now()-tm<0 then tm=tm+2147483647 end
if gpio.read(5) == 1 then -- если сигнал единица, то период до нее был нулем.
th=tmr.now()
--print ("th="..th.."");
t0=th-tl;
if (t0-(t0/1000*1000)) > 500 then t00=(t0/1000+1) else t00=(t0/1000) end --округляем до целого значения, приводим в мс
-- print ("t0="..t0.." t00="..t00.."" );
gpio.write(0, gpio.HIGH)
end
if gpio.read(5) == 0 then
tl=tmr.now()
-- print ("tl="..tl.."");
t1=tl-th;
if (t1-(t1/1000*1000)) > 500 then t11=(t1/1000+1) else t11=(t1/1000) end
-- print ("t1="..t1.." t11="..t11.."");
ts=(t1+t0);
if (ts-(ts/1000*1000)) > 500 then tss=(ts/1000+1) else tss=(ts/1000) end
---print ("ts="..ts.." tss="..tss.."");
print ("");
ppm=5000*(t11-2)/(t11+t00-4); --в даташите почему то стоит множитель 2000, но это явно ошибка. должно быть 5000.
print ("ppm="..ppm.." ("..tss.."="..t11.."+"..t00..")");
print ("");
gpio.write(0, gpio.LOW)
end
end)
код прекрасно работает и не зависит от wi-fi. Кстати есть значение tss которое равняется 1004 мс - по нему можно проверять корректность данных. Если true то верить.
* код не причесывал, не пинайте за кривизну.