feat: add motor impl
This commit is contained in:
parent
ae9b468be7
commit
32019e8b29
1 changed files with 63 additions and 0 deletions
63
motor.py
Normal file
63
motor.py
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
from i2c_handler import I2CSlaveHandler, Packet
|
||||||
|
from machine import Pin
|
||||||
|
|
||||||
|
# -high + low -> nach vorne
|
||||||
|
# andersrum nach hinten
|
||||||
|
|
||||||
|
in1_1 = Pin(18, Pin.OUT) # front right -
|
||||||
|
in1_2 = Pin(19, Pin.OUT) # front right +
|
||||||
|
in1_3 = Pin(20, Pin.OUT) # front left -
|
||||||
|
in1_4 = Pin(21, Pin.OUT) # front left +
|
||||||
|
|
||||||
|
in2_1 = Pin(13, Pin.OUT) # back right -
|
||||||
|
in2_2 = Pin(12, Pin.OUT) # back right +
|
||||||
|
in2_3 = Pin(11, Pin.OUT) # back left -
|
||||||
|
in2_4 = Pin(10, Pin.OUT) # back left +
|
||||||
|
|
||||||
|
def set_motor(direction, pin1, pin2):
|
||||||
|
if direction == 0x00: # off
|
||||||
|
pin1.value(0)
|
||||||
|
pin2.value(0)
|
||||||
|
elif direction == 0x01: # forward
|
||||||
|
pin1.value(1)
|
||||||
|
pin2.value(0)
|
||||||
|
elif direction == 0x02: # backward
|
||||||
|
pin1.value(0)
|
||||||
|
pin2.value(1)
|
||||||
|
|
||||||
|
class MotorHandler(I2CSlaveHandler):
|
||||||
|
def process_packet(self, packet: Packet):
|
||||||
|
"""
|
||||||
|
Example: Override process_packet to perform actions based on packet command/type.
|
||||||
|
"""
|
||||||
|
if packet[0] == 0x01:
|
||||||
|
# Motor directions
|
||||||
|
fl, fr, bl, br = packet[2], packet[3], packet[4], packet[5]
|
||||||
|
|
||||||
|
# Map motors to their control pins
|
||||||
|
motors = {
|
||||||
|
'fl': (fl, in1_3, in1_4),
|
||||||
|
'fr': (fr, in1_1, in1_2),
|
||||||
|
'bl': (bl, in2_3, in2_4),
|
||||||
|
'br': (br, in2_1, in2_2)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set each motor
|
||||||
|
for name, (direction, pin1, pin2) in motors.items():
|
||||||
|
set_motor(direction, pin1, pin2)
|
||||||
|
|
||||||
|
else:
|
||||||
|
print("Unknown command")
|
||||||
|
|
||||||
|
# Usage example
|
||||||
|
def main():
|
||||||
|
handler = MotorHandler(i2c_id=0, sda=0, scl=1, slave_addr=0x41)
|
||||||
|
print("MotorHandler I2C slave started")
|
||||||
|
try:
|
||||||
|
handler.handle()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
handler.deinit()
|
||||||
|
print("I2C slave stopped")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Add table
Add a link
Reference in a new issue