# file "UKMARS.py" # 24/9/2021 22:51 JF # All the includes within 1 file # all parameters in a seprate file params.py from machine import Pin, UART, PWM, ADC import time #uart = UART(0, 9600, timeout=1000) # init with given baudrate 0 = TX/RX pins 100ms uart = UART(0, 9600) # init with given baudrate 0 = TX/RX pins 100ms ##################### IO PORTS##################### # buttons Button = Pin(22, Pin.IN) #Hw29 UKmars function select back left #switches SW1 = Pin(2, Pin.IN, Pin.PULL_DOWN) #Hw4 1st switch SW2 = Pin(3, Pin.IN, Pin.PULL_DOWN) #Hw5 1st switch SW3 = Pin(4, Pin.IN, Pin.PULL_DOWN) #Hw6 1st switch SW4 = Pin(5, Pin.IN, Pin.PULL_DOWN) #Hw7 1st switch led = Pin(25, Pin.OUT) # inbuilt LED led2 = Pin(20, Pin.OUT) # side LED ledR = Pin(6, Pin.OUT) # HW9 Sensor board Right LED ledL = Pin(11, Pin.OUT) # HW14 Sensor board Left LED # sensors rfront = ADC(Pin(26)) # right front sensor lfront = ADC(Pin(27)) # left front sensor stopsense = Pin(21, Pin.IN) # HW27 QTR side stop sensor ####################### Motors ##################### # Motor object to control 1 motor through UKMars motor controller # updated 18/6/2021 John Fisher # Use "L" or "R" to choose which motor # provides pin numbers (fwd,rev,pwm)for each motor #LeftMotor = Motor("L") # uses 7,9 to set up left motor object #RightMotor = Motor("R") # uses 8,10 to set up right motor object class Motor: # Handles pin numbers and fwd reverse # Drives the Sparkfun motor driver board via the XOR invertion chip Pindir = 0 Pinspeed = 0 # constructor def __init__(self,type): #tye="L" or "R" if ((type=="L")or(type=="l")): dir = 7 # pin number for forwards motion spd = 9 # pin number for speed control else: dir = 8 # pin number for forwards motion spd = 10 # pin number for speed control self.Pindir = Pin(dir, Pin.OUT) # forward 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): if (spd >= 0): self.Pindir.off() # sets pin low to go forward else: self.Pindir.on() # set 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.Pindir.off() # sets pin high to go forward self.Pinspeed.duty_u16(0) ############## Sample program ############### ############ # sensor # ############ # prints to bluetooth and USB minr= 65000 minl= 65000 maxr = 0 maxl = 0 def calibl(val): global minl,maxl global ledL,ledR outval = val if (valmaxl): led.on() time.sleep(0.01) else: led.off() minl = min(val,minl) maxl = max(val,maxl) if (minl 20): ledL.on() else: ledL.off() return outval def calibr(val): global minr,maxr global ledL,ledR outval = val if (valmaxr): led.on() time.sleep(0.01) else: led.off() minr = min(val,minr) maxr = max(val,maxr) if (minr 20): ledR.on() else: ledR.off() return outval