Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino I2C onReceive处理程序只调用一次_Arduino_I2c - Fatal编程技术网

Arduino I2C onReceive处理程序只调用一次

Arduino I2C onReceive处理程序只调用一次,arduino,i2c,Arduino,I2c,我在I2C上的Arduino之间通讯有问题。由于某些原因,onReceive处理程序只调用一次 主代码(发送方): #include <Wire.h> #include "i2csettings.h" // defines address void setup() { Wire.begin(I2C_MASTER_ADDRESS); }

我在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!");
}
#包括
#包括“i2csettings.h”//defined address
无效设置()
{
连线开始(I2C_主地址);
}
void循环()
{                   
线路起始传输(I2C_从站地址);
线写入(0x11);
导线端传动();
延迟(1000);
}
从代码(接收器):

#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!");
}
#包括
#包括“i2csettings.h”
无效行动(int);
无效设置()
{
Serial.begin(9600);
连线开始(I2C_从_地址);
电报接收(采取行动);
}
void循环()
{} 
无效操作(整数字节)
{
Serial.println(“Action!”);
}
此测试设置中的想法是让发送方每秒发送一个字节,并让接收方通过打印消息对此进行操作。但是,该消息只打印一次。当我重置从机时,它会再次打印,但只打印一次


这可能来自哪里?您必须确保读取流中的所有字节。 另一方面,它似乎会阻碍。 使事件处理程序如下所示。所以你可以多次调用它

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

谢谢很高兴知道,尽管项目不久前已经结束。我会记住这一点以备将来参考,当我有机会确认时,我会接受答案。你有机会确认吗?乔伦,我的兄弟。你确认那家伙了吗?Joren,好久不见了。我们应该做一些特别的事情来纪念我们没有选择这个作为正确答案的5周年