import RPi.GPIO as GPIO import time class AlphaBot(object): def __init__(self,in1=13,in2=12,ena=6,in3=21,in4=20,enb=26): self.IN1 = in1 self.IN2 = in2 self.IN3 = in3 self.IN4 = in4 self.ENA = ena self.ENB = enb self.PA = 50 self.PB = 50 GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(self.IN1,GPIO.OUT) GPIO.setup(self.IN2,GPIO.OUT) GPIO.setup(self.IN3,GPIO.OUT) GPIO.setup(self.IN4,GPIO.OUT) GPIO.setup(self.ENA,GPIO.OUT) GPIO.setup(self.ENB,GPIO.OUT) self.PWMA = GPIO.PWM(self.ENA,500) self.PWMB = GPIO.PWM(self.ENB,500) self.PWMA.start(self.PA) self.PWMB.start(self.PB) self.stop() def forward(self): self.PWMA.ChangeDutyCycle(self.PA) self.PWMB.ChangeDutyCycle(self.PB) GPIO.output(self.IN1,GPIO.HIGH) GPIO.output(self.IN2,GPIO.LOW) GPIO.output(self.IN3,GPIO.HIGH) GPIO.output(self.IN4,GPIO.LOW) def stop(self): self.PWMA.ChangeDutyCycle(0) self.PWMB.ChangeDutyCycle(0) GPIO.output(self.IN1,GPIO.LOW) GPIO.output(self.IN2,GPIO.LOW) GPIO.output(self.IN3,GPIO.LOW) GPIO.output(self.IN4,GPIO.LOW) def backward(self): self.PWMA.ChangeDutyCycle(self.PA) self.PWMB.ChangeDutyCycle(self.PB) GPIO.output(self.IN1,GPIO.LOW) GPIO.output(self.IN2,GPIO.HIGH) GPIO.output(self.IN3,GPIO.LOW) GPIO.output(self.IN4,GPIO.HIGH) def left(self): self.PWMA.ChangeDutyCycle(30) self.PWMB.ChangeDutyCycle(30) GPIO.output(self.IN1,GPIO.LOW) GPIO.output(self.IN2,GPIO.HIGH) GPIO.output(self.IN3,GPIO.HIGH) GPIO.output(self.IN4,GPIO.LOW) def right(self): self.PWMA.ChangeDutyCycle(30) self.PWMB.ChangeDutyCycle(30) GPIO.output(self.IN1,GPIO.HIGH) GPIO.output(self.IN2,GPIO.LOW) GPIO.output(self.IN3,GPIO.LOW) GPIO.output(self.IN4,GPIO.HIGH) def setPWMA(self,value): self.PA = value self.PWMA.ChangeDutyCycle(self.PA) def setPWMB(self,value): self.PB = value self.PWMB.ChangeDutyCycle(self.PB) def setMotor(self, left, right): if((right >= 0) and (right <= 100)): GPIO.output(self.IN1,GPIO.HIGH) GPIO.output(self.IN2,GPIO.LOW) self.PWMA.ChangeDutyCycle(right) elif((right < 0) and (right >= -100)): GPIO.output(self.IN1,GPIO.LOW) GPIO.output(self.IN2,GPIO.HIGH) self.PWMA.ChangeDutyCycle(0 - right) if((left >= 0) and (left <= 100)): GPIO.output(self.IN3,GPIO.HIGH) GPIO.output(self.IN4,GPIO.LOW) self.PWMB.ChangeDutyCycle(left) elif((left < 0) and (left >= -100)): GPIO.output(self.IN3,GPIO.LOW) GPIO.output(self.IN4,GPIO.HIGH) self.PWMB.ChangeDutyCycle(0 - left) if __name__=='__main__': Ab = AlphaBot() Ab.forward() try: while True: time.sleep(1) except KeyboardInterrupt: GPIO.cleanup()