Truly weird problem!
Posted: Tue Dec 12, 2017 1:38 pm
The project I am working on is a water level sensor using ultrasonic detectors. That side of things is working fine; the problem is with the web page display.
In order to demonstrate the problem, I have cut the program down to the minimum. Here's the listing:
After initialising a couple of variables I open up the serial2 comms and call the routine to display the web page. In this cut down example, this is simply a text box, containing the time, and a button to exit the program.
Then a timer call runs the [doit] routine every five seconds. This calls the [gettime] routine, to update the time and the [getdata] routine to get the sensor data. Again, I have cut down the [getdata] routine to a minimum, and it doesn't actually do anything. The normal operation is that I write a "U" character to the ultrasonic controller to trigger the sensor and then read the data that is returned. BUT...
...if I comment out the second line - serial2input v$ - the program works as expected. The web page displays with a text box showing the time immediately followed by a green Exit button. The time updates every five seconds and when I click the Exit button, the program terminates. Of course it does!
With that second line in place, however, things are quite different. The web page displays as before and, after five seconds, the time updates. But that's as far as it goes. The time then stays exactly the same and the green Exit button is inoperative. On the serial1 port, it then starts displaying "0 winsock connected 192.168.1.180" every second! The only way I can interrupt the program is to get back to the edit page and do a Save.
The question is, why on earth should reading the serial2 input cause this effect?
Before anyone asks, the actual routine to read the data and calculate the level works fine and I can output this information via the serial1 port - I just can't get round this web page display problem.
Any ideas?
In order to demonstrate the problem, I have cut the program down to the minimum. Here's the listing:
Code: Select all
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
After initialising a couple of variables I open up the serial2 comms and call the routine to display the web page. In this cut down example, this is simply a text box, containing the time, and a button to exit the program.
Then a timer call runs the [doit] routine every five seconds. This calls the [gettime] routine, to update the time and the [getdata] routine to get the sensor data. Again, I have cut down the [getdata] routine to a minimum, and it doesn't actually do anything. The normal operation is that I write a "U" character to the ultrasonic controller to trigger the sensor and then read the data that is returned. BUT...
...if I comment out the second line - serial2input v$ - the program works as expected. The web page displays with a text box showing the time immediately followed by a green Exit button. The time updates every five seconds and when I click the Exit button, the program terminates. Of course it does!
With that second line in place, however, things are quite different. The web page displays as before and, after five seconds, the time updates. But that's as far as it goes. The time then stays exactly the same and the green Exit button is inoperative. On the serial1 port, it then starts displaying "0 winsock connected 192.168.1.180" every second! The only way I can interrupt the program is to get back to the edit page and do a Save.
The question is, why on earth should reading the serial2 input cause this effect?
Before anyone asks, the actual routine to read the data and calculate the level works fine and I can output this information via the serial1 port - I just can't get round this web page display problem.
Any ideas?