# Filename to be printed Thisfile = "BASIC LF.py" # History # - uses Motor object # - calibrate sensors # - sensor fall-off code # SWs can generate speed #### imports from machine import Pin, PWM, ADC,UART import time, utime from UKMARS import * # SW1, Button, lfront , rfront, Motor ############# # Data # ############# from params import * # fetch speed etc from params.py # Tuned parameters in params.py: #basespeed = 0 # range 0 up to 100 #efactor = 0 # efactor range 0-100 #dfactor = 0 # 0-100 #Tlength = 0 # wheelcount to stop at ( 1 = 94mm approx) efactorc = 100 dfactorc = dfactor/10 state = 0 oldsense = 0 # used to detect changes in error # motors LeftMotor = Motor("L") # set up left motor object RightMotor = Motor("R") # set up right motor object #### start here ========================================== print(Thisfile) swval = SW1.value() *10 swval += SW2.value() *20 swval += SW3.value() *40 swval += SW4.value() *80 if (swval >100): swval = 99 if swval >0 : basespeed = swval print("Speed="+str(basespeed)) RightMotor.stop() LeftMotor.stop() state = 0 # 0 = stopped 1 = running error = 0 average = 0 # average error loop = 0 while True: if Button.value()==1: # Start button back left length=0 while Button.value()==1: # wait for Start button button released time.sleep(0.01) length=length+1 #print("Length="+str(length)) # invert state if (state == 1): state = 0 led.off() else: state = 1 led.on() olderr = error lsense = calibl(lfront.read_u16()) # read left front sensor rsense = calibr(rfront.read_u16()) # read right front sensor # if (state == 0): # print(str(efactor)+" "+str(int(average))+" "+str(error) + " " + str(lsense) + " " + str(rsense)) if ((lsense > 15)and(rsense>15)): error = lsense - rsense average = average *.7 + error eval = (error * efactor)/efactorc eval = eval + (error-olderr)*dfactorc else: if (average > 0): eval = 55 * efactor/efactorc else: eval = (0-55) * efactor/efactorc if (state == 1): bs = basespeed #if (SW1.value() == 1): # switch 1 is on, slow if fallen off # if ((error >30) or (error <-30)): # bs = max((basespeed-5),0) else: bs = 0 # lspeed = bs - eval rspeed = bs + eval if error > 0 : led2.off() if error < 0 : led2.on() loop = loop + 1 if (loop>1000): loop = 0 print(int(lsense)," ",int(rsense)," ",int(lspeed)," ",int(rspeed)) LeftMotor.speed(int(lspeed)) # set left speed RightMotor.speed(int(rspeed)) # set right speed time.sleep(0.001) # end of loop LeftMotor.speed(0) # set left speed RightMotor.speed(0) # set right speed