0

我有一个 STM32 连接到一个指示房间温度的热传感器,我编写了这个程序来从我的 com 端口读取这个温度。现在我需要一个程序来从我的 com 端口读取多个值。谢谢你帮我解决这个问题。

import serial

serport = 'COM3'
serbaudrate = 38400
ser = serial.Serial(port = serport, baudrate = serbaudrate, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, timeout=2)
try:
    ser.isOpen()
except:
    print("Error")
    exit()

if ser.isOpen():
    try:
        while 1:
            if ser.inWaiting() > 0:
                #print(ser.readline())
                response = ser.readline()
                print(response.decode("utf-8"))

            else:
                ser.write(b"1")
    except Exception as e:
        print(e)

@Tarmo 谢谢你回答我的问题。这是我为微控制器编程而编写的代码:

while (1)
      {
  // Test: Set GPIO pin high
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);

    // Get ADC value
    HAL_ADC_Start(&hadc1);
    HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
    raw = HAL_ADC_GetValue(&hadc1);
    raw = ((raw*0.000244*3.3) - 0.25)/0.028;
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_RESET);

    // Convert to string and print
    sprintf(msg, "%hu\r\n", raw);
    HAL_UART_Transmit(&huart2, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);
    // Pretend we have to do something else for a while
    HAL_Delay(100);  
    }

在这种情况下,我只读取一个值,因为热传感器只给出一个值。如果我有多个值,我该如何用分号分隔它们?

4

2 回答 2

0

如果您已经采用了将数值作为文本发送的方式,则可以对其进行扩展。假设您想同时发送 3 个整数值,只需用分号分隔它们。例如123;456;789\n

然后,您的微控制器应该以这种格式输出数据,并且您的 Python 程序可以像现在一样读取整行。您可以使用正则表达式将此行解析为单个值:

import re
...
    response = ser.readline()
    needles = re.match("(\d+);(\d+);(\d+)", response)
    if needles:
        print("Got: {} {} {}".format(needles[0], needles[1], needles[2]))

于 2021-01-11T16:00:00.900 回答
0

假设您有 3 个来自 ADC 的值,分别位于变量raw1raw2raw3。然后你可以用sprintf()它们来格式化一条消息,并使用 Tarmo 的建议来阅读它们。

sprintf(msg, "%hu;%hu;%hu\r\n", raw1, raw2, raw3);

请在变量中提供足够的内存msg

于 2021-01-13T14:01:03.210 回答