如何分离串口读取到的数值并分别赋值给不同变量?
如何将串口返回的分割字符串赋值给多个变量?
嘿,这个需求其实很容易实现,咱们可以利用Python的字符串分割和类型转换来完成,下面给你一步步拆解:
步骤1:处理串口返回的字符串
首先,串口读取的字符串可能带有换行符或者空格,所以第一步先把这些多余的字符去掉,然后按-分割成子字符串列表:
# 假设你从串口读到的字符串是这个 response = '15.80-14-18.00-14.24' # 先去除首尾的空白字符(比如换行符) cleaned_response = response.strip() # 按'-'分割成列表 value_parts = cleaned_response.split('-')
执行后value_parts会变成:['15.80', '14', '18.00', '14.24']
步骤2:转换类型并赋值给变量
接下来把每个子字符串转换成对应的数值类型(浮点数或整数),然后直接赋值给变量就行:
# 根据你的需求,var2是整数,其他是浮点数 var1 = float(value_parts[0]) var2 = int(value_parts[1]) var3 = float(value_parts[2]) var4 = float(value_parts[3]) # 验证一下结果 print(f"var1: {var1}, var2: {var2}, var3: {var3}, var4: {var4}")
运行后就能得到你想要的:var1=15.80、var2=14、var3=18.00、var4=14.24
结合你的原程序修改
把上面的逻辑整合到你原来的串口程序里,修改后的代码大概是这样:
#!/usr/bin/env python # -*- coding: utf-8 -*- import serial import time import sys ser = serial.Serial('/dev/ttyACM0', 9600) time.sleep(4) while True: mdp = raw_input("Enter Number :") print mdp ser.write(mdp) # 处理串口返回的字符串 response = ser.readline().strip() try: value_parts = response.split('-') if len(value_parts) != 4: print("警告:返回的格式不符合预期,请检查串口输出") continue var1 = float(value_parts[0]) var2 = int(value_parts[1]) var3 = float(value_parts[2]) var4 = float(value_parts[3]) print(f"解析结果:var1={var1}, var2={var2}, var3={var3}, var4={var4}") except ValueError: print("错误:无法将返回的字符串转换为数值,请检查串口输出内容") time.sleep(1)
这里加了try-except和长度检查,能避免因为串口返回格式异常导致程序崩溃。
补充说明
- 如果所有变量都需要浮点数,把
var2 = int(...)改成var2 = float(...)就行 - 如果你的Python版本是3.x,记得把
raw_input改成input,print mdp改成print(mdp)
内容的提问来源于stack exchange,提问作者TS2IR 2018
相关产品推荐
相关产品推荐

