我无法通过 I2C 在 Arduino 之间进行通信。出于某种原因,onReceive
处理程序只调用一次。
主密码(发件人):
#include <Wire.h>
#include "i2csettings.h" // defines address
void setup()
{
Wire.begin(I2C_MASTER_ADDRESS);
}
void loop()
{
Wire.beginTransmission(I2C_SLAVE_ADDRESS);
Wire.write(0x11);
Wire.endTransmission();
delay(1000);
}
从属代码(接收器):
#include <Wire.h>
#include "i2csettings.h"
void takeAction(int);
void setup()
{
Serial.begin(9600);
Wire.begin(I2C_SLAVE_ADDRESS);
Wire.onReceive(takeAction);
}
void loop()
{}
void takeAction(int nBytes)
{
Serial.println("Action!");
}
这个测试设置的想法是让发送方每秒发送一个字节,让接收方通过打印消息来对此采取行动。但是,该消息仅打印一次。当我重置 Slave 时,它会再次打印,但只打印一次。
这可能来自哪里的任何想法?
最佳答案
您必须确保从流中读取所有字节。
否则它似乎会阻止。
使您的事件处理程序看起来像这样。所以你可以多次调用它。
void takeAction(int nBytes)
{
Serial.println("Action!");
while(Wire.available())
{
Wire.read();
}
return;
}
关于arduino - I2C onReceive-handler 只调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27705156/