0

情况 :

有两个传感器,我想将每个传感器的值的数据保存在某个文件中。但它不起作用。我在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()
4

2 回答 2

1

我不知道这个库真正做了什么。但是这段代码是不正确的;1)你没有关闭while语句。如果在实际代码中你在 filehandle:close() 之前关闭它,然后尝试调用 filehandle:flush() 2) 你忘记了逗号:filehandle:write(timestr, " -The Value of the Sensors: ", tostring(valueOfSensor_1), tostring( valueOfSensor_2)"\n") (它应该类似于 attemt call a number value)。3) 尝试打印出 valueOfSensor_1 和 valueOfSensor_2 值。可能没有数据。

于 2013-04-29T11:49:11.730 回答
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 库。你应该查看它的文档,并注意它的使用细节。

于 2013-04-29T11:55:25.217 回答