情况:
有两个传感器,我想在某个文件中保存每个传感器的值数据。但它不起作用。我正在使用linux系统,文件仍然是空的。 我的代码出了什么问题?有什么建议吗?
我的代码是:
--Header file
require("TIMER")
require("TIMESTAMP")
require("ANALOG_IN")
function OnExit()
print("Exit code...do something")
end
function main()
timer = "TIMER"
local analogsensor_1 = "AIR_1"
local analogsensor_2 = "AIR_2"
local timestr = os.data("%Y-%m-%d %H:%M:%S")
-- open the file for writing binary data
local filehandle = io.open("collection_of_data.txt", "a")
while true do
valueOfSensor_1 = ANALOG_IN.readAnalogIn(analogsensor_1);
valueOfSensor_2 = ANALOG_IN.readAnalogIn(analogsensor_2);
if (valueOfSensor_1 > 0 and valueOfSensor_2 > 0) then
-- save values of sensors
filehandle:write(timestr, " -The Value of the Sensors: ", tostring(valueOfSensor_1), tostring(valueOfSensor_2)"\n");
end
TIMER.sleep(timer,500)
end
-- close the file
filehandle:close()
end
print("start main")
main()
答案 0 :(得分:1)
我不知道这个libs究竟做了什么。 但是这段代码不正确; 1)你没有关闭while声明。 如果在实际代码中你在文件句柄之前关闭它:close()然后尝试调用filehandle:flush() 2)你忘了逗号: filehandle:write(timestr,“ - 传感器的值:”,tostring(valueOfSensor_1),tostring(valueOfSensor_2)“\ n”) (它应该像attemt那样调用一个数字值)。 3)尝试打印valueOfSensor_1和valueOfSensor_2值。可能没有数据。
答案 1 :(得分:1)
除了@moteus指出的错别字,不应该这样:
if (valueOfSensor_1 and valueOfSensor_2 > 0) then
是这样的吗?
if (valueOfSensor_1 > 0 and valueOfSensor_2 > 0) then
修改 ,以回应您对其他答案的评论:
仍然是错误..它说“尝试调用字段'数据'(零值)
如果没有堆栈跟踪,我无法确定,但最有可能的是,ANALOG_IN
库代码中发生了一些不好的事情。您可能没有正确使用它。
尝试转变:
valueOfSensor_1 = ANALOG_IN.readAnalogIn(analogsensor_1);
valueOfSensor_2 = ANALOG_IN.readAnalogIn(analogsensor_2);
进入这个:
success, valueOfSensor_1 = pcall(ANALOG_IN.readAnalogIn, analogsensor_1);
if not success then
print("Warning: error reading the value of sensor 1:\n"..valueOfSensor_1)
valueOfSensor_1 = 0
end
success, valueOfSensor_2 = pcall(ANALOG_IN.readAnalogIn, analogsensor_2);
if not success then
print("Warning: error reading the value of sensor 2:\n"..valueOfSensor_2)
valueOfSensor_2 = 0
end
如果ANALOG_IN
中的失败不是系统性的,它将解决它。如果系统调用失败,您将收到一个巨大的警告日志,并且会显示空的collection_of_data.txt
。
请注意ANALOG_IN
不是标准的Lua库。您应该检查其文档,并注意其使用的详细信息。