Files
brewpi/components/actor/stirrerpololu1376.py
T
2020-12-22 10:26:56 +01:00

96 lines
1.9 KiB
Python

from contextlib import contextmanager
from components import AStirrer
import time
import serial
class StirrerPololu1376(AStirrer):
def name(self):
return "Pololu1376"
def __init__(self, dt, params):
AStirrer.__init__(self, dt)
self.isMasterOn = 0
self.ser_speed = params['speed']
self.ser_port = params['port']
self.ser = serial.Serial(self.ser_port, self.ser_speed)
self.ser.set_output_flow_control(False)
try:
self.ser.open()
except serial.SerialException:
self.ser.close()
self.ser.open()
self.ser_send('V')
self.ser_recv()
self.activate(False)
@contextmanager
def remote_open(self):
try:
self.activate(True)
yield None
finally:
self.activate(False)
def ser_send(self, cmd):
self.ser.write((cmd + '\r\n').encode())
def ser_recv(self):
data = self.ser.readline().decode("utf-8").replace("\n", '').replace("\r", '')
return data
def get_speed(self):
if self.isOn and self.is_activated():
return self.speed
return 0
def activate(self, enable):
print("activate {}".format(enable))
if enable:
self.ser_send("go")
else:
self.ser_send("X")
def on_set_speed(self, speed):
self.ser_send("F" + str(int(speed)) + "%")
print("Set speed to {} %".format(speed))
if __name__ == '__main__':
s = StirrerPololu1376({'dt': 1.0, 'port': "/dev/ttyACM0", 'speed': 115200})
with s.remote_open():
print("Set some speeds")
s.set_speed(50)
time.sleep(2)
s.set_speed(20)
time.sleep(2)
s.set_speed(50)
time.sleep(2)
print("Pulsed operation, duty cycle = 50%")
s.set_duty_cycle(0.5)
s.set_cycle_time(10)
for i in range(1, 30):
s.process()
time.sleep(1)
print("Pulsed operation, duty cycle = 20%")
s.set_duty_cycle(0.2)
s.set_cycle_time(10)
for i in range(1, 30):
s.process()
time.sleep(1)
print("Continious operation")
s.set_duty_cycle(1.0)
s.set_speed(50)
time.sleep(3.0)
print("Leaving context")