I2C onReceive-handler仅调用一次

Jor*_*eit 5 arduino i2c

我在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)

这个测试设置的想法是让发送者每秒发送一个字节,让接收者通过打印消息来对此进行操作.但是,该消息仅打印一次.当我重置奴隶时,它再次打印,但只打印一次.

有什么想法可能来自哪里?

the*_*ser 5

您必须确保从流中读取所有字节.其他明智的似乎是阻止.使您的事件处理程序看起来像这样.所以你可以多次调用它.

void takeAction(int nBytes)
{
  Serial.println("Action!");
  while(Wire.available())
  {
    Wire.read();
  }
  return;
}
Run Code Online (Sandbox Code Playgroud)