为什么在raspberry pi和arduino之间缓慢连续启动?

时间:2014-04-29 09:22:45

标签: serialization arduino raspberry-pi

您好我试图通过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

现在我只需要了解如何知道串口连接何时开始发送和接收数据。

1 个答案:

答案 0 :(得分:0)

连接到串行线可能会触发器件复位(这取决于使用的串行转换器)...来调用引导加载程序;

此功能用于将新草图加载到电路板中...通常电路板在引导加载程序中停留约1秒,如果没有命令则启动主应用程序 - 或者它们无效。

如果你想禁用此功能..断开串口转换器上的dtr线 - 但在这种情况下你也将失去上传草图的能力......你必须在每个上传周期中手动按下重置按钮

哇...这个主题有一个有趣的文档:

http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection