我在Arduino之间通过I2C进行通信时遇到了麻烦.出于某种原因,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);
}
Run Code Online (Sandbox Code Playgroud)
奴隶代码(接收者):
#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!");
}
Run Code Online (Sandbox Code Playgroud)
这个测试设置的想法是让发送者每秒发送一个字节,让接收者通过打印消息来对此进行操作.但是,该消息仅打印一次.当我重置奴隶时,它再次打印,但只打印一次.
有什么想法可能来自哪里?
您必须确保从流中读取所有字节.其他明智的似乎是阻止.使您的事件处理程序看起来像这样.所以你可以多次调用它.
void takeAction(int nBytes)
{
Serial.println("Action!");
while(Wire.available())
{
Wire.read();
}
return;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1320 次 |
最近记录: |