【发布时间】:2014-04-29 09:22:45
【问题描述】:
您好,我正在尝试通过 USB 连接在 arduino 和树莓派之间建立通信,但我遇到了一些我似乎无法理解的奇怪问题。我想将一些数据从 python 脚本发送到 arduino,然后让 arduino 点亮 LED。
编辑*我已经解决了这个问题,但我把问题留在这里,以防它帮助别人。问题是串行初始化时间。见下文
Python 代码。
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600, timeout=3)
ser.open()
ser.write('1')
arduino 代码
char serialRecieved;
/*output*/
int ledOne=8;
int ledTwo=12;
int ledThree=13;
/*input pins*/
int thermistor=1;
void setup(){
pinMode(ledOne, OUTPUT);
pinMode(ledTwo, OUTPUT);
pinMode(ledThree, OUTPUT);
Serial.begin(9600);
}
void loop(){
if (Serial.available() > 0) {
serialRecieved=Serial.read();
if(serialRecieved=='1'){lightLed(8,1000);}
if(serialRecieved=='2'){lightLed(12, 1000);}
if(serialRecieved=='3'){lightLed(13 , 1000);}
if(serialRecieved=='4'){sendTemp();}
delay(1);
}
}
void lightLed(int led, int time){
digitalWrite(led, HIGH);
delay(time);
digitalWrite(led, LOW);
}
void sendTemp(){
int temp=analogRead(thermistor);
Serial.print(temp);
}
当我运行 python 脚本时,我可以看到引脚 8 上的 LED 应该亮起,但它没有。奇怪的是,如果我运行一个循环(见下面的代码),它工作正常,只是循环的第一次迭代中的串行数据没有被处理。
除了第一次循环迭代之外,此脚本有效
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600, timeout=3);
ser.open();
i=0
while i < 5:
ser.write('1')
ser.write('2')
ser.write('3')
ser.write('4')
time.sleep(1)
serial_data = ser.readline()
print("temperature")
print serial_data
i=i+1
有没有人知道为什么串行数据的第一部分丢失或无法读取?顺便说一句,如果你不知道我是 python、linux pi 和 arduino 的新手,对不起!
编辑,问题解决
好的,我刚刚发现了问题,这是由于在 pi 和 arduino 之间建立串行连接所花费的时间。如果有人遇到同样的问题,请点击此处的链接。
http://playground.arduino.cc/interfacing/python
现在我只需要了解如何知道串行连接何时准备好开始发送和接收数据。
【问题讨论】:
标签: serialization arduino raspberry-pi