python初学者在这里。我正在使用 Rapsberry Pi 和 Arduino 使用距离传感器。传感器数据的输出是连续的,直到程序停止。这是输出的一个片段:4 5 5 0 0 4484 5 5 0 0 04 5 5 0 0 04 5 5 0 0 04 5 5 0 0 04 5 5 0 0 04 5 5 0 0 448我的问题是将每列数据保存到自己的变量中的最佳方法是什么?每列都是由空格分隔的自己的传感器,我需要对每个传感器执行操作。我曾尝试使用,.split()但无法使其正常运行。这是将从 Arduino 获取串行数据的 Python 代码。如果我不使用.decode(),.strip()然后输出将在每个换行符的开头和每个换行符/r/n的末尾都有 ab' 。import datetimeimport serialdatetime.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 回答
万千封印
TA贡献1891条经验 获得超3个赞
如果我不使用 .decode() 和 .strip() ,那么输出将在每个换行符的开头有 ab' ,在每个换行符的末尾有一个 /r/n 。
read_serial=ser.readline()
这一行正在返回字节。在 Python 3 中,decode 函数默认将字节字符串解码为 UTF-8。看起来您正在处理整数,因此不需要解码。
val.strip()
这会从两端删除换行符和其他空白字符。简单地使用 rstrip 可能更好,因为这是换行符所在的位置。
一旦您阅读了该行并删除了换行符,您就可以使用 split 为您的值创建一个数组。例子:
val = b'4 5 5 0 0 448' row = [int(x) for x in val.split()]
row 变量现在包含 6 个值,您可以使用 row[i] 访问这些值,其中 i 是值的位置(从 0 开始)。
希望这是有道理的。
添加回答
举报
0/150
提交
取消