Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
local function pin1cb(level) -- Функция обработки прерывания
local tt = tmr.now()/1000; -- получаем текущее время
if level == 1 then Если уровень высокий
h = tt;
tl = h - l; -- вычисляем промежуток времени прошедший с предыдущего цикла
ppm = 5000 * (th - 2) / (th + tl - 4) -- вычисляем значение со2 по формуле из даташита.
if ppm>300 then ListTime[3]={time=tmr.time(), data=ppm} end; -- Если данные похожи на правду записываем их в глобальную переменную
else -- если низкий фронт
l = tt; -- сохраняем текущее время
th = l - h; -- вычисляем прошедшее время с предыдущего цикла
end
if c>3 then gpio.mode(1,gpio.INPUT) print('pp1',ppm) return ppm end -- если прошло больше 3 циклов считаем что значение получено
c=c+1
if level == 1 then gpio.trig(1, "down") else gpio.trig(1, "up") end -- переключаем прерывание с повышающегося фронта на понижающий и обратно.
end
gpio.mode(1,gpio.INT) -- устанавливаем 1 пин в режим прерывания
gpio.trig(1, "up",pin1cb) -- настройка прерывания на 1 пине. Если фронт сигнала возрастает вызываем функцию pin1cb
Контроль качества воздуха (со2 и температуры) в офисе и дома, своими руками