from astirrer import AStirrer import serial import time class Pololu1376(AStirrer): def __init__(self, params, com_port='/dev/ttyUSB0', com_baud=9600): self.params = params self.speed = 0 self.cycleTime = 1 self.dutyCycle = 1 self.cycleCounter = 0 self.isOn = 0 self.isMasterOn = 0 self.ser = serial.Serial(com_port, com_baud) self.ser.set_output_flow_control(False) try: self.ser.open() except: self.ser.close() self.ser.open() self.ser_send('V') print(self.ser_recv()) def ser_send(self, cmd): self.ser.write((cmd + '\r\n').encode()) def ser_recv(self): s = self.ser.readline().decode("utf-8").replace("\n", '').replace("\r", '') return s def process(self): dt = self.params["dt"] self.cycleCounter -= dt if self.cycleCounter <= 0: self.cycleCounter = self.cycleTime if self.cycleCounter <= (self.cycleTime * self.dutyCycle): if not self.isOn: self.__setMotorSpeed(self.speed) self.log ("Stirrer: On") self.isOn = 1 else: if self.isOn: self.__setMotorSpeed(0) self.log ("Stirrer: Off") self.isOn = 0 def setSpeed(self, speed): self.log ("Stirrer: Set speed to {} %".format(speed)) self.speed = speed if self.isOn: self.__setMotorSpeed(speed) def setCycleTime(self, time): self.log ("Stirrer: Set cycle time to {} s".format(time)) self.cycleTime = time def setDutyCycle(self, dutyCycle): self.log ("Stirrer: Set duty cycle to {} %".format(100*dutyCycle)) self.dutyCycle = dutyCycle def getSpeed(self): if self.isOn and self.isMasterOn: return self.speed return 0 def start(self): self.isMasterOn = 1 self.log("Stirrer: switched On") self.ser_send("go") def stop(self): self.isMasterOn = 0 self.log("Stirrer: switched Off") self.ser_send("x") def __setMotorSpeed(self, speed): self.ser_send("F" + str(speed) + "%") if __name__ == '__main__': s = Pololu1376(None, "/dev/ttyACM0", "115200") s.start() s.setSpeed(1000) time.sleep(2) s.setSpeed(2000) time.sleep(2) s.setSpeed(3000) time.sleep(2) s.setSpeed(2000) time.sleep(2) s.setSpeed(1000) time.sleep(2) s.stop()