NodeMCU中的ds18b20.lua模块出现问题

时间:2019-07-07 08:43:04

标签: lua nodemcu

在整数固件版本中,十进制数字(tL)的四舍五入不为10(tH)。

我想在温度转换中使用固定格式(包括符号),因此该值可以为+23.8或-23.8。分析代码时,我意识到当舍入部分达到10时,小数部分的舍入不会添加到单位中。 因此,如果要转换的值为199999,则四舍五入后的转换为19.10,应为20.0

这是原始代码

local sgn = t<0 and -1 or 1
local tA = sgn*t
local tH=tA/10000
local tL=(tA%10000)/1000 + ((tA%1000)/100 >= 5 and 1 or 0)

if tH and (t~=850000) then
   temp[addr]=(sgn<0 and "-" or "")..tH.."."..tL
   debugPrint(to_string(addr),(sgn<0 and "-" or "")..tH.."."..tL)
   status[i] = 2
end

此代码解决了问题

local sign = t<0 and -1 or 1
local tA = sgn*t
local tH=tA/10000
local tL=(tA%10000)/1000 + ((tA%1000)/100 >= 5 and 1 or 0)

if tL==10 then
    tH = tH+1
    tL = 0
end

if tH and (t~=850000) then
    temp[addr]=(sgn<0 and "-" or "")..tH.."."..tL
    debugPrint(to_string(addr),(sgn<0 and "-" or "")..tH.."."..tL)
    status[i] = 2
end


if t= -199999, with the original code
tH = 19
tL =10
temp = -19.10

包括更正

tH = 20
tL = 0
temp = -20.0

我还对数字格式进行了更改,因此位数始终是相同的,为了便于在接收函数中进行处理,因此将5.6转换为+05.6,我认为更好,但这是一个个人选择。

0 个答案:

没有答案