NXT Logo Examples: A simple interactive control of NXT-G program from Imagine using files

From RoboWiki
Jump to: navigation, search

back to list of tutorials

In this project, we build a robot that has an ultrasonic distance sensor on the front and keeps a required distance from the wall: when the distance is lower, the robot moves back, when it is larger, it moves forward. In this way, the robot is also able to follow a person in a required distance, or go back when somebody approaches the robot...

Keep distance with slider robot.png We would like to make the program in such a way that we can interactively regulate this distance using a slider. Thus in Imagine Logo, we create a slider (it will get a name s1):

Keep distance with slider imagine slider.png

Whenever we move the slider to the left or right, we will change the distance of the empty buffer that the robot keeps in front of it: Imagine will write this value (in cm) directly to a file in NXT's flash memory using the following function, which is triggered when the slider s1 changes its value:

to change_file

 let "d1 (div s1'value 10)
 let "d2 (mod s1'value 10)
 ignore nxt_delete "MyFile.txt
 let "handle last (nxt_openwrite "MyFile.txt 2)
 ignore nxt_write :handle (word :d1 :d2) 128
 ignore nxt_close :handle
 wait 1000

end

Finally, we need some program for the robot so that it will keep the distance according to the value in the file. This time, we make that program using standard NXT-G programming environment, and it will look as follows:


Keep distance with slider nxt g program.png


The robot repeats a loop: read a value from file, close the file, then read the value of the ultrasonic distance sensor on port 4, and finally compare the sensor readings with the value that was read from the file. Depending on the result of the comparison, the robot moves forward or backs up.

Note: be very careful when using a technique like this. NXT Flash memory has a limited number of write/read cycles. You can easily ruin your NXT brick by writing to the memory too many times! Therefore note the "wait 1000" command above, which will prevent the program from changing the value more often than once per second. You can use this technique for setting up some configuration parameters that do not change very often.'

A better way of interactive control is by sending a BlueTooth message to NXT brick, see the following tutorial.