您好我试图通过usb连接设置arduino和raspberry pi之间的通信,但我遇到了一些我似乎无法理解的奇怪问题。我想将一些数据从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
现在我只需要了解如何知道串口连接何时开始发送和接收数据。
答案 0 :(得分:0)
连接到串行线可能会触发器件复位(这取决于使用的串行转换器)...来调用引导加载程序;
此功能用于将新草图加载到电路板中...通常电路板在引导加载程序中停留约1秒,如果没有命令则启动主应用程序 - 或者它们无效。
如果你想禁用此功能..断开串口转换器上的dtr线 - 但在这种情况下你也将失去上传草图的能力......你必须在每个上传周期中手动按下重置按钮
哇...这个主题有一个有趣的文档:http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection