将串行接口数据转换为整数

Posted

技术标签:

【中文标题】将串行接口数据转换为整数【英文标题】:Converting serial interface data to integer 【发布时间】:2016-07-11 05:15:07 【问题描述】:

我正在编写一些代码以从串行接口读取并返回接收到的数据的整数值。

看来我需要从中删除"\r\n"。我试过分裂,但它不起作用。

这是我的代码:

import time
import serial
import string         

ser = serial.Serial(
    port='/dev/ttyACM1',
    baudrate = 9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1
)
counter = 0

while 1:
    x = ser.readline()

    if "t" in x:
        print x
        x = int(x)
        print x
        print "temp"
    elif "h" in x:
        print  "hum "
    elif "g" in x:
        print  "gas "
    else:
        pass

    time.sleep(1)

然后我有这个错误:

 Traceback (most recent call last):
  File "/home/pi/read.py", line 26, in <module>
    x=int(x)
ValueError: invalid literal for int() with base 10: 't0\r\n'

有人可以帮忙吗?

【问题讨论】:

您需要删除字母,t 是导致您的问题的原因 错误很清楚 - 输入字符串无法转换为 int (由于字符串中有“t”,您如何将其明确转换为 int?)您需要对t 在尝试转换之前。什么样的加工?我会让你自己想办法。 【参考方案1】:

试试这样:

import time
import serial
import string         

ser = serial.Serial(
    port='/dev/ttyACM1',
    baudrate = 9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1
)
counter = 0

while True:
    line = ser.readline().rstrip()
    if not line:
        continue

    resultType = line[0]
    data = int(line[1:])

    if resultType == 't':
        print "Temp: ".format(data)
    elif resultType == 'h':
        print "Hum: ".format(data)
    elif resultType == 'g':
        print "Gas: ".format(data)
    else:
        pass

    time.sleep(1)

第一个更改是str.rstrip() 我们从串行接口读取的行。这将删除字符串末尾的任何 "\r\n" 字符或空格。第二个更改是将行拆分为“类型”字母(line[0])和数据(行的其余部分)。

【讨论】:

回溯(最近一次调用最后一次):文件“/home/pi/read.py”,第 18 行,在 resultType = line[0] IndexError: string index out of range跨度> 完全相同的错误?你能告诉我错误信息吗? “类型”总是一个字母吗?

以上是关于将串行接口数据转换为整数的主要内容,如果未能解决你的问题,请参考以下文章

什么电路将串行数据转换为并行数据?

C# 串口编程,扫码枪使用

如何在lpBuffer中转换和连接位置以最终打印为整数的十六进制数?

C#开发串口通信实例及串口基础

FT232RL为接口转换芯片,可以实现USB到串行UART接口的转换

串行通信与并行通信