我正在从uart向pc发送串行数据并尝试绘制从函数发生器通过MSP430F5438A的ADC12发送的正弦波(使用Python )。 我可以将波形绘制为较低的采样频率(<120Hz),但是当我增加采样频率时,数字会连接,即如果通过uart发送两个值2563,2879,则python将它们读为25632879.因此,我不是能够绘制图表,因为值不正确。 我发送它们之间没有新行的值,如果我发送新行,那么值没有正确读取 - python读取它们之间的空间所以然后再次我得到另一个错误:无法将字符串转换为浮点数。 我尝试了data = ser.readline()但没有运气 我附上下面的代码。请看看是否可以采取任何措施来解决这个问题。
import sys
import serial
import numpy as np
import matplotlib.pyplot as plt
from collections import deque
port = "COM11"
baud = 9600
timeout=1
ser = serial.Serial()
ser.port = port
ser.baudrate = baud
ser.timeout = timeout
a1 = deque([0.0]*100)
#ax = plt.axes(xlim=(0, 100), ylim=(0, 1000))
line, = plt.plot(a1)
plt.ion()
plt.ylim([0,1000])
try:
ser.open()
except:
sys.stderr.write("Error opening serial port %s\n" % (ser.portstr) )
sys.exit(1)
#ser.setRtsCts(0)
while 1:
# Read from serial port, blocking
data = ser.read(1)
# If there is more than 1 byte, read the rest
n = ser.inWaiting()
data = data + ser.read(n)
#sys.stdout.write(data)
print(a1)
a1.appendleft((data))
datatoplot = a1.pop()
line.set_ydata(a1)
plt.draw()
由于
答案 0 :(得分:0)
我可以想到两种可靠的方法:
使用分隔符。您只需要正确解析值:
line = serial.readline()
reading = int(line)
如果您不想使用分隔符,请从msp发送格式化的读数:
uint8_t buffer[5];
snprintf(buffer, 4, "%04d", reading);
uart_print(buffer);
这样你总是每次读取4个字符,所以你可以在python代码中这样做:
line = serial.read(4)
reading = int(line)
但我仍然会选择第一种选择。