Introduction
Introduction
One of the problems with the simple version of the robot control code is that if the ambient light changes from one day to the next then the values for the high (when the LDR is over white) and low(when the LDR is over black) then you will have to change your program code to make it work with the new light values.
A simple solution to this is to create calibration code that allows you to set the high and low values when the program first starts.
This algorithm works by:
- Put both sensors over a white area and then press the A button. This records the high value for the 0 and 1 pins
- Put both sensors over the black and then press the B button. This records the low values.
- Calculate the half-way point between the high and low values for each sensor and save them in a middle value variable
- Start the main loop by calling the ‘Go’ function.
- If Pin1 is less than pin1 middle value, turn left
- Else if Pin0 is less than pin1 middle value, turn right
- Else move forward.
Blocks
Makecode Blocks
Python Code
Python Code
pin0high = 0 pin1high = 0 pin0low = 0 pin1low = 0 middle0 = 0 middle1 = 0 def on_button_pressed_a(): global pin0high, pin1high pin0high = pins.analog_read_pin(AnalogPin.P0) pin1high = pins.analog_read_pin(AnalogPin.P1) input.on_button_pressed(Button.A, on_button_pressed_a) def on_button_pressed_b(): global pin0low, pin1low, middle0, middle1 pin0low = pins.analog_read_pin(AnalogPin.P0) pin1low = pins.analog_read_pin(AnalogPin.P1) middle0 = (pin0high - pin0low) / 2 + pin0low middle1 = (pin1high - pin1low) / 2 + pin1low go() input.on_button_pressed(Button.B, on_button_pressed_b) def go(): while True: if pins.analog_read_pin(AnalogPin.P1) < middle1: pins.analog_write_pin(AnalogPin.P2, 80) pins.analog_write_pin(AnalogPin.P8, 0) elif pins.analog_read_pin(AnalogPin.P0) < middle0: pins.analog_write_pin(AnalogPin.P2, 0) pins.analog_write_pin(AnalogPin.P8, 60) else: pins.analog_write_pin(AnalogPin.P2, 80) pins.analog_write_pin(AnalogPin.P8, 70) basic.pause(50)