我正在从事的项目是使用超声波检测器的水位传感器。事情的那一面工作正常;问题出在网页显示上。
为了演示这个问题,我把程序缩减到最少。这是清单:
代码:
全选memclear
v$ = \"\"
dtg$ = \"\"
serial2begin 9600, 12, 13
gosub [paintscreen]
timer 5000, [doit]
wait
[doit]
gosub [gettime]
gosub [getdata]
wait
[gettime]
dtg$ = time(\"day month year hour:min:sec\")
return
[getdata]
serial2print \"U\"
serial2input v$
return
[paintscreen]
cls
textbox dtg$
cssid htmlid(), \"left: 0px; top: 0px; width: 140px;\"
button \"Exit\", [TestExit]
cssid htmlid(), \"background-color: green; color: white; left: 370px;\"
gosub [gettime]
return
[TestExit]
serialprintln \"Exit pressed!\"
end
初始化几个变量后,我打开 serial2 通讯并调用例程来显示网页。在这个缩减示例中,这只是一个包含时间的文本框和一个退出程序的按钮。
然后计时器调用每五秒运行一次 [doit] 例程。这会调用 [gettime] 例程来更新时间,并调用 [getdata] 例程来获取传感器数据。同样,我已将 [getdata] 例程缩减到最少,它实际上什么也不做。正常的操作是我写一个“U”字符到超声波控制器触发传感器,然后读取返回的数据。但是...
...如果我注释掉第二行 - serial2input v$ - 该程序按预期工作。该网页显示一个显示时间的文本框,紧接着是一个绿色的退出按钮。时间每五秒更新一次,当我单击“退出”按钮时,程序终止。当然可以!
然而,有了第二条线,情况就大不相同了。网页显示如前,五秒后时间更新。但仅此而已。然后时间保持完全相同,绿色退出按钮不起作用。在 serial1 端口上,它开始
显示“0 winsock connected 192.168.1.180” !我可以中断程序的唯一方法是返回编辑页面并执行
。
问题是,到底为什么读取 serial2 输入会导致这种效果?
在任何人询问之前,读取数据和计算电平的实际例程工作正常,我可以通过 serial1 端口输出此信息 - 我无法解决此网页显示问题。
有任何想法吗?