Skip to content
Snippets Groups Projects
motordriver.py 1.96 KiB
Newer Older
  • Learn to ignore specific revisions
  • bartejac's avatar
    bartejac committed
    import RPi.GPIO as GPIO
    
    LEFT_MOTOR_EN = 0
    RIGHT_MOTOR_EN = 1
    
    LEFT_MOTOR_LPWM = 3
    LEFT_MOTOR_RPWM = 4
    
    RIGHT_MOTOR_LPWM = 5
    RIGHT_MOTOR_RPWM = 6
    
    class driver:
        LM_LPWM = GPIO.PWM(LEFT_MOTOR_LPWM, 8000)
        LM_RPWM = GPIO.PWM(LEFT_MOTOR_RPWM, 8000)
        RM_LPWM = GPIO.PWM(RIGHT_MOTOR_LPWM, 8000)
        RM_RPWM = GPIO.PWM(RIGHT_MOTOR_RPWM, 8000)
    
        def setupMotors(self):
            GPIO.setup(LEFT_MOTOR_EN, GPIO.OUT)
            GPIO.setup(RIGHT_MOTOR_EN, GPIO.OUT)
            
            GPIO.setup(LEFT_MOTOR_LPWM, GPIO.OUT)
            GPIO.setup(LEFT_MOTOR_RPWM, GPIO.OUT)
            self.LM_LPWM.start(0)
            self.LM_RPWM.start(0)
            
            GPIO.setup(RIGHT_MOTOR_LPWM, GPIO.OUT)
            GPIO.setup(RIGHT_MOTOR_RPWM, GPIO.OUT)
            self.RM_LPWM.start(0)
            self.RM_RPWM.start(0)
            
        def enableMotors() :
            GPIO.output(LEFT_MOTOR_EN, GPIO.HIGH)
            GPIO.output(RIGHT_MOTOR_EN, GPIO.HIGH)
            
        def disableMotors() :
            GPIO.output(LEFT_MOTOR_EN, GPIO.LOW)
            GPIO.output(RIGHT_MOTOR_EN, GPIO.LOW)
            
        #input range 0.0-1.0; 0.5 = no forward no reverse
        def writeLeftPWM(self, dutycycle) :
            if dutycycle > 0.5 :
                self.LM_LPWM.ChangeDutyCycle(0)
                self.LM_RPWM.ChangeDutyCycle((dutycycle - 0.5)*100)
            elif dutycycle < 0.5 :
                self.LM_LPWM.ChangeDutyCycle((dutycycle - 0.5)*100)
                self.LM_RPWM.ChangeDutyCycle(0)
            else :
                self.LM_LPWM.ChangeDutyCycle(0)
                self.LM_RPWM.ChangeDutyCycle(0)
        
        #input range 0.0-1.0; 0.5 = no forward no reverse
        def writeRightPWM(self, dutycycle) :
            if dutycycle > 0.5 :
                self.RM_LPWM.ChangeDutyCycle(0)
                self.RM_RPWM.ChangeDutyCycle((dutycycle - 0.5)*100)
            elif dutycycle < 0.5 :
                self.RM_LPWM.ChangeDutyCycle((dutycycle - 0.5)*100)
                self.RM_RPWM.ChangeDutyCycle(0)
            else :
                self.RM_LPWM.ChangeDutyCycle(0)
                self.RM_RPWM.ChangeDutyCycle(0)