我正在一个项目中,其中连续数据流通过Arduino进入串行端口,我必须在其中提取所需的信息。 在必填数据的开头添加了“ AA”,在结尾添加了“ 55”。
Arduino串行监视器输出-
AA055
AA155
AA255
AA355
AA455
Arduino代码-
int i=0;
void setup()
{
Serial.begin(9600); // Open serial connection at a baud rate of 9600
}
void loop()
{
Serial.print("AA");
Serial.print(i);
Serial.println("55");
i++;
delay(100);
}
PYTHON代码
import serial
import time
import csv
baudrate = 9600
port = 'COM2' # set the correct port before run it
serial = serial.Serial(port=port, baudrate=baudrate)
serial.flushInput()
with open("test_data.csv","a") as f:
writer = csv.writer(f,delimiter=",")
writer.writerow(["TIME STAMP", "DATA"])
while True:
try:
ser_bytes = serial.readline()
decoded_bytes = float(ser_bytes[0:len(ser_bytes)-2].decode("utf-8"))
print(decoded_bytes)
aq = time.strftime('%a %H:%M:%S')
print(aq)
with open("test_data.csv","a") as f:
writer = csv.writer(f,delimiter=",")
writer.writerow([time.strftime('%a %H:%M:%S'),decoded_bytes])
except:
print("Keyboard Interrupt")
break
我希望python代码通过检测开头的“ AA”和结尾的“ 55”来提取我的信息。
答案 0 :(得分:0)
假设您需要从串行输出中提取信息(以“ AA”开头,以“ 55”结尾),可以对python代码进行如下修改:
...
print(decoded_bytes)
#First check whether the length of the serial output is at least 4.
if len(decoded_bytes) >= 4:
if decoded_bytes[0:2] == "AA" and decoded_bytes[len(decoded_bytes)-2:len(decoded_bytes)] == "55":
print(decoded_bytes) # The information from serial output, between "AA" and "55"
aq = time.strftime('%a %H:%M:%S')
...
假设串行输出如下:
AA155
AA255
AB155
AA235
这段代码将仅打印以“ AA”开头和以“ 55”结尾的输出。那是前两种情况。
我们正在检查长度是否大于4,因为该信息将包含在“ AA”和“ 55”之内。
这里要注意的重要事项是字符串切片运算符。您可以阅读here。基本上,它会在某些索引内返回字符串的一部分。