You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何分离串口读取到的数值并分别赋值给不同变量?

如何将串口返回的分割字符串赋值给多个变量?

嘿,这个需求其实很容易实现,咱们可以利用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:34:33