Hi,
my new project is to communicate about an RS232 port with an Ergometer from Kettler (like an Velosimulators <-- don’t know if this the right word) to Blender’s BGE to simulate some routs for training.
and this Project called “Ergotours”
first I setup some serial python scripts:
that is an modified version from the official py_serial documentation
import serial
#Can be Downloaded from this Link
#https://pypi.python.org/pypi/pyserial
#Function to Initialize the Serial Port
class Ergometer_Com:
def __init__(self):
COMNUM = 3 #Enter Your COM Port Number Here.
self.ser = 0 #Must be declared in Each Function
self.ser = serial.Serial()
self.ser.baudrate = 9600
self.ser.stopbits = serial.STOPBITS_ONE
self.ser.bytesize = serial.EIGHTBITS
self.ser.port = COMNUM - 1 #COM Port Name Start from 0
#ser.port = '/dev/ttyUSB0' #If Using Linux
#Specify the TimeOut in seconds, so that SerialPort
#Doesn't hangs
self.ser.timeout = 10
self.ser.open() #Opens SerialPort
# print port open or closed
if self.ser.isOpen():
print('Open: ' + self.ser.portstr)
self.loop()
#Function Ends Here
#Call the Serial Initilization Function, Main Program Starts from here
#init_serial()
def loop(self):
readin = ''
while self.ser.isOpen():
'''if not 'ACK' in readin or not 'RUN' in readin:
#temp = input('Type what you want to send, hit enter:
')
self.ser.write(b'CM
') #Writes to the SerialPort
print(self.ser.write) #Writes to the SerialPort
loopstate = 1'''
#else:
self.ser.write(b'ST
') #Writes to the SerialPort
print(self.ser.write) #Writes to the SerialPort
loopstate = 1
while loopstate == 1:
bytes = self.ser.readline() #Read from Serial Port
readin = str(bytes)
print(readin) #Print What is Read from Port
loopstate = 0
ergometer_com = Ergometer_Com()
def main():
ergometer_com.loop()
that is the final version
#from the_cannibal
from bge import logic
import serial
class Ergometer_Com:
def __init__(self):
COMNUM = 3
self.ser = 0
self.ser = serial.Serial()
self.ser.baudrate = 9600
self.ser.stopbits = serial.STOPBITS_ONE
self.ser.bytesize = serial.EIGHTBITS
self.ser.port = COMNUM - 1
self.ser.timeout = 10
self.ser.open()
if self.ser.isOpen():
print('Open: ' + self.ser.portstr)
#self.ser.write(b'RS
')
self.ser.write(b'CM
')
cm_recieve = self.ser.readline().decode('ascii').strip()
print(cm_recieve)
if "ACK" in cm_recieve:
print("CM_Setup_OK")
self.loop()
elif "RUN" in cm_recieve:
print("CM_Setup_OK")
self.loop()
else:
print("error to send CM")
self.loop()
def loop(self):
own = logic.getCurrentController().owner
obj = logic.getCurrentScene().ojects
loopstate = 0
readin = ""
data_list = []
step_raw = str(own["new_step"])
step_power = str.encode("PW " + step_raw + "
")
#print(step_power)
self.pulse = 0
self.rpm = 0
self.speed = 0.000
self.distance = 0.000
self.power = 0
self.energy = 0
self.time = ""
self.power_actuell = 0
if loopstate == 0:
self.ser.write(b'ST
')
loopstate = 1
if loopstate == 1:
data = self.ser.readline()
readin = data.decode('ascii').strip()
data_list = readin.split(' ')
print(data_list)
self.pulse = data_list[0]
self.rpm = data_list[1]
self.speed = float(data_list[2])
self.newspeed = float(self.speed/10)
self.distance = float(data_list[3])
self.newdistance = float(self.distance/10)
self.power = data_list[4]
self.energy = data_list[5]
self.time = data_list[6]
self.power_actuell = data_list[7]
own["newspeed"] = self.newspeed
print("pulse: " + str(self.pulse))
print("rpm: " + str(self.rpm))
print("speed: " + str(self.newspeed))
print("distance: " + str(self.newdistance))
print("power: " + str(self.power))
print("energy: " + str(self.energy))
print("time: " + str(self.time))
print("power_current: " + str(self.power_actuell))
#self.ser.close()
loopstate = 2
if loopstate == 2:
self.ser.write(step_power)
loopstate = 3
if loopstate == 3:
data1 = self.ser.readline()
readin1 = data.decode('ascii').strip()
loopstate = 0
obj['HUD_Text_Pulse']['Text'] = self.pulse
obj['HUD_Text_RPM']['Text'] = self.rpm
obj['HUD_Text_Speed']['Text'] = own["newspeed"]/10
obj['HUD_Text_Distance']['Text'] = self.distance
obj['power_frame_step']['power_frame_step'] = 1*own["new_step"]/80
print(obj['power_frame_step']['power_frame_step'])
obj['HUD_Text_Energy']['Text'] = self.energy
obj['HUD_Text_Time']['Text'] = self.time
ergometer_com = Ergometer_Com()
def main():
ergometer_com.loop()
image from blender will follow soon:D