【发布时间】:2019-08-20 20:08:09
【问题描述】:
在我最近的项目中,我尝试将串行数据从 Arduino 发送到 Python。使用 pyserial 可以完美地完成。但我这里有一个问题。我无法拆分我的数据。所有都存储在 Python coed 中的一个变量中,但我想拆分它。
Aduino 代码:
#define sw1 6
#define sw2 5
#define sw3 4
#define sw4 3
int vote1 = 0;
int vote2 = 0;
int vote3 = 0;
int vote4 = 0;
void setup()
{
Serial.begin(9600);
pinMode(sw1, INPUT);
pinMode(sw2, INPUT);
pinMode(sw3, INPUT);
pinMode(sw4, INPUT);
digitalWrite(sw1, HIGH);
digitalWrite(sw2, HIGH);
digitalWrite(sw3, HIGH);
digitalWrite(sw4, HIGH);
}
void loop()
{
if (digitalRead(sw1) == 0)
{
vote1++;
Serial.print(vote1);
Serial.print(("\t"));
Serial.print(vote2);
Serial.print(("\t"));
Serial.print(vote3);
Serial.print(("\t"));
Serial.print(vote4);
while (digitalRead(sw1) == 0);
}
if (digitalRead(sw2) == 0)
{
vote2++;
Serial.print(vote1);
Serial.print(("\t"));
Serial.print(vote2);
Serial.print(("\t"));
Serial.print(vote3);
Serial.print(("\t"));
Serial.print(vote4);
while (digitalRead(sw2) == 0);
}
if (digitalRead(sw3) == 0)
{
vote3++;
Serial.print(vote1);
Serial.print(("\t"));
Serial.print(vote2);
Serial.print(("\t"));
Serial.print(vote3);
Serial.print(("\t"));
Serial.print(vote4);
while (digitalRead(sw3) == 0);
}
if (digitalRead(sw4) == 0)
{
vote4++;
Serial.print(vote1);
Serial.print(("\t"));
Serial.print(vote2);
Serial.print(("\t"));
Serial.print(vote3);
Serial.print(("\t"));
Serial.print(vote4);
while (digitalRead(sw4) == 0);
}
}
在这里,我尝试使用四个按钮将四个不同的值从 Arduino 发送到 Python。
Python 代码:
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1)
while 1:
arduinoData = ser.readline().decode('utf-8')
data = arduinoData.split("\t")
a = data[0]
b = data[1]
c = data[2]
d = data[3]
我收到如下错误:
Traceback(最近一次调用最后一次):文件 “/home/pi/serialConnection_2.py”,第 11 行,在 b = data[1] IndexError: 列表索引超出范围
如果我像下面这样更改我的 python 代码:
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1)
while 1:
arduinoData = ser.readline().decode('utf-8')
data = arduinoData.split("\t")
print(data)
然后我可以接收所有四个值,如下所示:
['']
['']
['']
['']
['']
['']
['']
['']
['']
['1 , 0 , 0 , 0']
['2 , 0 , 0 , 0']
['3 , 0 , 0 , 0']
['4 , 0 , 0 , 0']
['4 , 1 , 0 , 0']
['4 , 1 , 1 , 0']
['4 , 1 , 2 , 0']
['4 , 1 , 2 , 1']
['4 , 1 , 2 , 2']
['4 , 1 , 2 , 3']
['']
['']
['']
每当我根据该列表的值按下按钮时,都会正确更新。我不知道为什么我无法访问列表的成员。
【问题讨论】:
-
显然你也会得到很多空行。你可以丢弃它们:
if not arduinoData:continue。