使arduino只在发信号时写入(串行)

时间:2014-04-23 00:09:47

标签: serial-port arduino raspberry-pi

我尝试使用USB串口在Raspberry Pi和Arduino之间进行通信,但我只想在RPI发送信号时写入Arduino。

我的arduino代码如下:

int sensorPin = A0;  
int sensorValue = 0;

void setup(){
  Serial.begin(9600);
}

void loop(){
  sensorValue = analogRead(sensorPin);
  if (Serial.available() > 0) {
    Serial.read();
    Serial.println(sensorValue,DEC);
    Serial.flush();
  }    
}

一旦我从RPI做了一个电话:

serial.write('hey')

arduino反复写道。我认为Serial.available大部分时间都会返回0,因为缓冲区被读取清除,但似乎它永远不会被清除。我认为flush()可能会这样做,但它确实没有任何效果。

1 个答案:

答案 0 :(得分:3)

这很奇怪.. Serial.read()应该在读取后从缓冲区中删除字节。

注意:请注意,Serial.read()一次只读取一个字节,这可能是您的问题,因为您从Raspberry Pi发送'hey' ll循环的3次迭代完全清空缓冲区。

如果这不是问题,您可以尝试serialEvent()函数,每次通过序列到达时都会调用该函数。

您的代码将是这样的:

int sensorPin = A0;  
int sensorValue = 0;

void setup(){
    Serial.begin(9600);
}

void loop(){
     //Any other logic here   
}

void serialEvent() {
    sensorValue = analogRead(sensorPin);
    Serial.read();
    Serial.println(sensorValue,DEC);
}

通过使用serialEvent()事件,您的loop看起来更干净。这总是很好。