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();
}
答案 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开始)。
希望如此。