picoslave/usage.py

40 lines
No EOL
1.2 KiB
Python

from i2c_handler import I2CSlaveHandler, Packet
class MyRobotHandler(I2CSlaveHandler):
def process_packet(self, packet: Packet):
"""
Example: Override process_packet to perform actions based on packet command/type.
"""
cmd = packet[0]
target = packet[1]
speed = (packet[2] << 8) | packet[3]
# Convert speed from unsigned to signed if needed
if speed & 0x8000:
speed -= 0x10000
print(f"Custom handler: Command 0x{cmd:02X}, Target 0x{target:02X}, Speed {speed}")
# Example: Perform a motor action for command 0x01
if cmd == 0x01: # Set Motor Speed
print(f"Setting motor {target} speed to {speed}")
# TODO: Add your motor control code here
elif cmd == 0xFF: # Emergency Stop
print("Emergency stop received!")
# TODO: Add your emergency stop code here
else:
print("Unknown command")
# Usage example
def main():
handler = MyRobotHandler(i2c_id=0, sda=0, scl=1, slave_addr=0x41)
print("MyRobotHandler I2C slave started")
try:
handler.handle()
except KeyboardInterrupt:
handler.deinit()
print("I2C slave stopped")
if __name__ == "__main__":
main()