# File: WHAM.py # Motor object to control 1 motor through L293D # updated 13/11/2021 # Use Motor("L") or Motor("R") to choose which motor # left/front/right wall snors # 2/12/21 from machine import Pin, PWM, ADC import time, utime ##################### IO PORTS##################### # buttons Button1 = Pin(15, Pin.IN, Pin.PULL_DOWN) #Hw20 Left button Button3 = Pin(20, Pin.IN, Pin.PULL_DOWN) #Hw26 Right Button Button = Button3 #switches SW1 = Pin(16, Pin.IN, Pin.PULL_DOWN) #Hw21 1st switch SW2 = Pin(17, Pin.IN, Pin.PULL_DOWN) #Hw22 2nd switch SW3 = Pin(18, Pin.IN, Pin.PULL_DOWN) #Hw24 3rd switch SW4 = Pin(19, Pin.IN, Pin.PULL_DOWN) #Hw25 4th switch led = Pin(25, Pin.OUT) # inbuilt LED R_led = Pin(2, Pin.OUT) # HW4 Right LED M_led = Pin(3, Pin.OUT) # HW5 Middle led L_led = Pin(4, Pin.OUT) # HW6 Left LED # sensors IntSense = ADC(Pin(26)) # HW31 Line sensor LWall = ADC(Pin(27)) # HW31 Left wall sensor FWall = ADC(Pin(26)) # HW31 Front wall sensor RWall = ADC(Pin(28)) # HW31 Right wall sensor Wheel = Pin(5, Pin.IN) # HW7 Wheel sensor # provides pin numbers (fwd,rev,pwm)for each motor #LeftMotor = Motor("L") # uses 7,6,9 to set up left motor object #RightMotor = Motor("R") # uses 8,11,10 to set up right motor object class Motor: # Handles pin numbers and fwd reverse # Drives an L293D motor driver chip Pinfwd = 0 Pinback = 0 Pinspeed = 0 # constructor def __init__(self,type): #tye="L" or "R" if ((type=="L")or(type=="l")): fwd = 7 # pin number for forwards motion back = 6 # pin number for backwards motion spd = 9 # pin number for speed control else: fwd = 8 # pin number for forwards motion back = 11 # pin number for backwards motion spd = 10 # pin number for speed control self.Pinfwd = Pin(fwd, Pin.OUT) # forward pin object self.Pinback = Pin(back, Pin.OUT) # reverse pin object self.Pinspeed = PWM(Pin(spd)) # PWM pin object self.Pinspeed.freq(1000) # PWM frequency fixed at 1000 # sets motor speed and direction range -100 to +100 def speed(self,spd): #spd = int(spd) if (spd > 0): self.Pinfwd.on() # sets pin high to go forward self.Pinback.off() # set pin high to go backward else: self.Pinfwd.off() # set pin high to go forward self.Pinback.on() # sets pin high to go backward spd =-spd spd = spd *655 self.Pinspeed.duty_u16(int(min(spd,65535))) # set speed to speed def stop(self): # provides braking self.Pinfwd.on() # sets pin high to go forward self.Pinback.on() # sets pin high to go backward self.Pinspeed.duty_u16(65535)