The robot code is pretty simple: it continually reads data from the IR receiver and based on what it reads, controls the motor direction and speed.
The robot code is below. Save it to the Circuit Playground Express on the robot as code.py
.
# SPDX-FileCopyrightText: 2018 Dave Astels for Adafruit Industries # # SPDX-License-Identifier: MIT import board import pulseio import adafruit_irremote from adafruit_crickit import crickit # Control debug output: it takes time so don't unless you're debugging DEBUG_LOG = False # Control codes STOP = 0x01 ROTATE_LEFT = 0x02 ROTATE_RIGHT = 0x03 FORWARD = 0x04 FORWARD_LEFT = 0x05 FORWARD_RIGHT = 0x06 REVERSE = 0x07 REVERSE_LEFT = 0x08 REVERSE_RIGHT = 0x09 left_wheel = crickit.dc_motor_1 right_wheel = crickit.dc_motor_2 def log(s): """Optionally output some text. :param string s: test to output """ if DEBUG_LOG: print(s) # These allow easy correction for motor speed variation. # Factors are determined by observation and fiddling. # Start with both having a factor of 1.0 (i.e. none) and # adjust until the bot goes more or less straight def set_right(speed): right_wheel.throttle = speed * 0.9 def set_left(speed): left_wheel.throttle = speed # Uncomment this to find the above factors # set_right(1.0) # set_left(1.0) # while True: # pass # Create a 'pulseio' input, to listen to infrared signals on the IR receiver pulsein = pulseio.PulseIn(board.IR_RX, maxlen=120, idle_state=True) # Create a decoder that will take pulses and turn them into numbers decoder = adafruit_irremote.GenericDecode() while True: # Listen for incoming IR pulses pulses = decoder.read_pulses(pulsein) # Try and decode them try: # Attempt to convert received pulses into numbers received_code = decoder.decode_bits(pulses) except adafruit_irremote.IRNECRepeatException: # We got an unusual short code, probably a 'repeat' signal log("NEC repeat!") continue except adafruit_irremote.IRDecodeException as e: # Something got distorted or maybe its not an NEC-type remote? log("Failed to decode: {}".format(e.args)) continue if received_code == [STOP] * 4: log("STOP") set_left(0.0) set_right(0.0) elif received_code == [ROTATE_LEFT] * 4: log("ROTATE_LEFT") set_left(-0.25) set_right(0.25) elif received_code == [ROTATE_RIGHT] * 4: log("ROTATE_RIGHT") set_left(0.25) set_right(-0.25) elif received_code == [FORWARD] * 4: log("FORWARD") set_left(0.5) set_right(0.5) elif received_code == [FORWARD_LEFT] * 4: log("FORWARD_LEFT") set_left(0.0) set_right(0.5) elif received_code == [FORWARD_RIGHT] * 4: log("FORWARD_RIGHT") set_left(0.5) set_right(0.0) elif received_code == [REVERSE] * 4: log("REVERSE") set_left(-0.5) set_right(-0.5) elif received_code == [REVERSE_LEFT] * 4: log("REVERSE_LEFT") set_left(-0.25) set_right(-0.5) elif received_code == [REVERSE_RIGHT] * 4: log("REVERSE_RIGHT") set_left(-0.5) set_right(-0.25) else: log("UNKNOWN")
Page last edited January 22, 2025
Text editor powered by tinymce.