Python将列中的数据保存到变量中

时间:2018-12-28 23:11:14

标签: python

Python的入门者。我正在使用Rapsberry Pi和Arduino处理距离传感器。
传感器数据的输出一直持续到程序停止。这是输出的代码段:

4 5 5 0 0 448
4 5 5 0 0 0
4 5 5 0 0 0
4 5 5 0 0 0
4 5 5 0 0 0
4 5 5 0 0 0
4 5 5 0 0 448

我的问题是将每一列数据保存到其自己的变量中的最佳方法是什么?每列都是其自己的传感器,之间用空格隔开,我需要对每个传感器执行操作。我尝试使用.split(),但无法使其正常运行。

这是将从Arduino获取串行数据的python代码。如果我不使用.decode().strip(),那么输出将在每个换行的开头都有一个b',在每个换行的结尾上都有一个/r/n

import datetime
import serial
datetime.datetime.now()
ser=serial.Serial('/dev/ttyACM0',115200)

while True:
    read_serial=ser.readline()
    val= read_serial.decode()
    print (val.strip())

这是Arduino代码:

#include <NewPing.h>
#define SONAR_NUM 6    // Number of sensors.
#define MAX_DISTANCE 500 // Maximum distance (in cm) to ping.


NewPing sonar[SONAR_NUM] = {   // Sensor object array.
  NewPing(12, 13, MAX_DISTANCE), // Each sensor's trigger pin, echo pin, and max distance to ping. 
  NewPing(10, 11, MAX_DISTANCE), 
  NewPing(8, 9, MAX_DISTANCE),
  NewPing(6, 7, MAX_DISTANCE),
  NewPing(4, 5, MAX_DISTANCE),
  NewPing(2, 3, MAX_DISTANCE)
};

void setup() {
  Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
}

void loop() { 
  for (uint8_t i = 0; i < SONAR_NUM; i++) { // Loop through each sensor and display results.
    delay(15); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings    
    Serial.print(" "); 
    Serial.print(sonar[i].ping_in());
  }
  Serial.println();
}

1 个答案:

答案 0 :(得分:2)

  

如果我不使用.decode()和.strip(),那么输出将在每个换行的开头都有一个b',在每个换行的末尾都有一个/ r / n。

read_serial=ser.readline()

此行返回字节。在Python 3中,默认情况下,解码函数会将字节字符串解码为UTF-8。看起来您正在处理整数,因此不需要解码。

val.strip()

这将从两端删除换行符和其他空格字符。最好使用rstrip,因为这是换行符所在的位置。

一旦您阅读了该行并去除了换行符,就可以使用split为您的值创建一个数组。示例:

val = b'4 5 5 0 0 448'
row = [int(x) for x in val.split()]

行变量现在包含6个值,您可以使用row [i]访问,其中i是值的位置(从0开始)。

希望如此。