我尝试使用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()可能会这样做,但它确实没有任何效果。
答案 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
看起来更干净。这总是很好。