Added serial communication class that can succesfully communicate with the arduino. Started work on pygame GUI but I've decided to switch direction to using Flexx instead.
60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
import serial
|
|
from time import sleep
|
|
|
|
class Comm:
|
|
current_pressure = -1
|
|
target_pressure = -1
|
|
motor_speed = -1
|
|
def __init__(self, port, baud_rate):
|
|
# Setup serial
|
|
self.comm = serial.Serial(port, baud_rate)
|
|
#read a line from the serial bus to sync arduino with python script
|
|
for x in range(0,5):
|
|
self.comm.readline()
|
|
self.getPID()
|
|
return
|
|
|
|
def getPID(self):
|
|
message = self.comm.readline().decode().strip()
|
|
#message = 'Current Pressure: 80, Target Pressure: 15, Motor Speed: 255'
|
|
#print(message)
|
|
if message[0:7] == 'Current':
|
|
startIndex = message.find(':')
|
|
endIndex = message.find(',')
|
|
self.current_pressure = float(message[startIndex+1:endIndex])
|
|
startIndex = message.find(':', endIndex)
|
|
endIndex = message.find(',', endIndex+1)
|
|
self.target_pressure = float(message[startIndex+1:endIndex])
|
|
startIndex = message.find(':', endIndex)
|
|
self.motor_speed = float(message[startIndex+1:len(message)])
|
|
#print("1", self.current_pressure, "2", self.target_pressure, "3", self.motor_speed)
|
|
return (self.current_pressure, self.target_pressure, self.motor_speed)
|
|
else:
|
|
return (self.current_pressure, self.target_pressure, self.motor_speed)
|
|
|
|
def setPressure(self, pressure):
|
|
pressure = float(pressure)
|
|
msg = 'PRSR ' + str(pressure) + '\r\n'
|
|
while self.getPID()[1] != pressure:
|
|
self.comm.write(msg.encode())
|
|
return
|
|
|
|
def setHeartRate(self, BPM):
|
|
msg = 'BEAT ' + str(BPM) + '\r\n'
|
|
response = 'Heart Rate set to ' + str(BPM) + ' BPM.'
|
|
ans = ''
|
|
while ans != response:
|
|
self.comm.write(msg.encode())
|
|
ans = self.comm.readline().decode().strip()
|
|
return
|
|
|
|
def fill(self, time):
|
|
msg = 'FILL ' + str(time) + '\r\n'
|
|
response = 'Filling for ' + str(time) + ' seconds.'
|
|
ans = ''
|
|
while ans != response:
|
|
self.comm.write(msg.encode())
|
|
ans = self.comm.readline().decode().strip()
|
|
return
|
|
|
|
#comm = Comm('COM11', 115200) |