The only thing that needs to be added to the transmitter radio_tilt_transmit_rapid script is an if... block that displays one of two things:
- A diamond if the y-axis tilt is less than +/- 80
- The tilt direction needle if the y-axis reports larger values.
Let’s try it!
Example script: radio_tilt_controller_w_stop_range
- Set your tilt controlled cyber:bot’s 3-position switch to 0 so that it doesn’t move around during this test.
- Make sure you are working in the browser with the micro:bit Python Editor that is connected to the radio tilt controller micro:bit.
- Set the project name to radio_tilt_controller_w_stop_range.
- Update the script in the editor to match the one below.
- If you are in a classroom, make sure the channel= in the script to your assigned channel.
- Click Save, and then click Send to micro:bit.
- Verify that the tilt direction needle still displays, except for when you hold it close to level. Then, it should display a diamond.
# radio_tilt_controller_w_stop_range from microbit import * import math import radio radio.on() radio.config(channel=7, queue=1, length=64) while True: x = accelerometer.get_x() y = accelerometer.get_y() angle = round( math.degrees( math.atan2(y, x) ) ) needle = ( angle + 90 + 15 ) // 30 if abs(y) > 80: display.show(Image.ALL_CLOCKS[needle]) else: display.show(Image.DIAMOND_SMALL) dictionary = { } dictionary['x'] = x dictionary['y'] = y dictionary['needle'] = needle packet = str(dictionary) radio.send(packet) sleep(50)
How radio_tilt_controller_w_stop_range Works
The radio_tilt_controller_w_stop_range script is just radio_tilt_transmit_rapid with an if…else… statement added.
When the absolute value of y is greater than 80, it displays the tilt direction needle, just like it has up to this point. But, if the y value is anywhere in the -80 to 80 range, it instead displays a small diamond to tell you that your forward/backward tilt is pretty close to level.
if abs(y) > 80: display.show(Image.ALL_CLOCKS[needle]) else: display.show(Image.DIAMOND_SMALL)
The if abs(y) function returns the positive-only version of any value y might store. So, if y stores -20, abs(y) returns 20. If y stores 20, abs(y) doesn’t change anything and just returns 20. So, if abs(y) > 80 is a concise way to check if y is outside the -80…80 range. Another way to check if y is outside that range would be if y > 80 or y < -80.