Я пишу простой сценарий на языке луа. Если светодиод включен, счетчик будет увеличиваться на 1. Если светодиод выключен более чем на 1 секунду, он сбрасывает счетчик.
Итак, как именно мы рассчитываем такое событие в Луа?
Это то, что я имею и до сих пор тестировал несколько способов.
function ReadADC1()
local adc_voltage_value = 0
adc_voltage_value = tonumber(adc.readadc()) * 2 -- 0.10 --get dec number out of this -- need to know where package adc come from
--convert to voltage
adc_voltage_value = adc_voltage_value *0.000537109375 --get V
adc_voltage_value = math.floor(adc_voltage_value *1000 +0.5) --since number is base off resolution
--print (adc_voltage_value)
return adc_voltage_value
end
-- end of readADC1() TESTED
function interval()
local counter1 =0
ledValue = ReadADC1()
if (ledValue >= OnThreshHold) then
ledStatus = 1
t1=os.time()
else
ledStatus = 0
t2 = os.time()
end
--counter1 =0
for i=1,20 do
if (ledStatus == 1) then -- if led is off for more than 1 second, reset counter = 0
counter1 = counter1 + 1
elseif ((ledStatus ==0 and ((os.difftime(os.time(),t2)/100000) > 1000))) then -- increment counter when led is on
counter1 = 0
end
end
print (counter1)
конец
Я точно знаю, что логика для интервала неверна, так как os.time возвращает огромное число (я предполагаю, что это в секундах, а не секундах).
Любое предложение или решение приветствуется. Я пробовал vmstarttimer и vmstoptimmer до этого, но не уверен, как это работает.
EDIT:
function counter()
local ledValue = ReadADC1()
local t1 = os.clock()
while true do
local t2 = os.clock()
local dt = t2 - t1
t1 = t2
if ((ledValue < OnThreshHold) and (dt < 1)) then -- if led is off for less than 1 second
ledCounter = ledCounter + 1
elseif ((ledValue < OnThreshHold) and (dt > 1)) then-- if led is off for more than 1 second
ledCounter = 0;
else
ledCounter = ledCounter
end
print (ledCounter)
end
end
В конечном итоге будет возвращено значение ledCounter вместо счетчика печати, поскольку я подключу значение счетчика к другой функции, которая будет печатать сообщение, соответствующее номеру счетчика