我正在为我的项目使用VB-8200振动计。它以16位数格式提供振动测量。例如。 000001 ???? 0004这意味着振动值为0.4 mm / s。我想编写一个python代码,用于在收到后将0.4发送到文本文件。 我写的代码如下:
import string
import time
import serial
ser = serial.Serial(port='/dev/ttyS3', baudrate=9600, parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,bytesize=serial.EIGHTBITS,timeout=0.0005)try:
ser.isOpen()
print("serial port is open")
except:
print("error")
exit()
if(ser.isOpen()):
try:
while(1):
x=ser.readline().rstrip('\0')
print x
y= x[11:]
textdata = str(y)/10
f = open('/home/root/sensor_data.txt','a')
f.write(textdata+'\n')
time.sleep(1)
f.close()
except Exception:
print("error")
else:
print("cannot open serial terminal")
然而它不起作用。你能帮我纠正一下吗?当我没有做/ 10 in,textdata = str(y)/ 10时,它正在工作。但我需要将整数格式的数据发送到文本文件,以便我可以在thingpeak中绘制它。
答案 0 :(得分:0)
在这一行:
textdata = str(y)/10
你试图将字符串除以10,这没有意义。由于y已经是一个字符串(你通过从x中剥离前11个字符来获得它),你首先要将它转换为整数:
iy = int(y)
该功能将为您处理前导零。
你知道iy是以0.1mm / s为单位的流速。要获得实际单位的流量,请执行以下操作:
flow_rate = iy * 0.1
要将整数写入文件,只需执行:
f.write(str(iy) + '\n')
它不会有任何前导零。