Arduino 在2到期时使用I2C进行程序擦除';s

Arduino 在2到期时使用I2C进行程序擦除';s,arduino,i2c,Arduino,I2c,我有一个有趣的问题,可能是真的,也可能不是真的。我没有资源在2台Arduino ATMegas上测试I2C。问题是: 我有两个原因:主机有一个以太网屏蔽,稍后将使用;现在用于轻松区分主设备和从设备。I2C工作正常,但设置为:1 12V电池连接至Due的直流“圆形”输入,连接至主电路:3.3V和GND连接在两块电路板之间:1条用于上传草图的USB电缆 当我从主机上拔下USB以在从机上上传草图时,由于12 DC,在USB拔出阶段,两块板都保持打开状态。 草图已上载,USB停留在从机侧,用于串行监控

我有一个有趣的问题,可能是真的,也可能不是真的。我没有资源在2台Arduino ATMegas上测试I2C。问题是:

我有两个原因:主机有一个以太网屏蔽,稍后将使用;现在用于轻松区分主设备和从设备。I2C工作正常,但设置为:1 12V电池连接至Due的直流“圆形”输入,连接至主电路:3.3V和GND连接在两块电路板之间:1条用于上传草图的USB电缆

当我从主机上拔下USB以在从机上上传草图时,由于12 DC,在USB拔出阶段,两块板都保持打开状态。 草图已上载,USB停留在从机侧,用于串行监控

问题:当12V电池未向主机进行校正时;在USB拔出阶段,两块板都关闭。将同一草图上传至从机后,串行监视器显示从机未收到任何信息

我假设I2C设置和上传草图是冲突的。我怎样才能解决这个问题,所以我不需要权力的会费所有的时间。以下是使用12V蓄电池电源的代码

/**************************************************************************************************
  MASTER
****************************************************************************************************/
#include <Wire.h>

byte ISend[4];

void setup()
{
   Wire1.begin(); // join i2c bus (address optional for master)
   intToByteA((unsigned long)72992);
}

void loop()
{ 
   Wire1.beginTransmission(4); // transmit to device #4
   for(int i = 0; i < 4; i++)
   {
      Wire1.write(ISend[i]);
   } 
   Wire1.endTransmission();
   delay(500); 
}

void intToByteA(unsigned long num)
{
   for (int i = 0; i < 4; i++)
   {
      ISend[i] = (byte)((num >> (8 * i)) & 0xFF);
   }
}

/*********************************************************************************************/


/************************************************************************************************
 SLAVE
*************************************************************************************************/
#include <Wire.h>

byte IReceive[4];

void setup()
{
  Wire1.begin(4);                // join i2c bus with address #4
  Wire1.onReceive(receiveEvent); // register event
  Serial.begin(9600);           // start serial for output
}

void loop()
{
  delay(223);
}

// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent(int howMany)
{
  unsigned long test = 11;
  for(int i = 0; i < 4; i++)
  {
     IReceive[i] = Wire1.read();
  } 
  test = byteAToInt();
  Serial.println(test);
}

unsigned long byteAToInt()
{
  unsigned long temp = 0;
  for (int i = 0; i < 4; i++)
  {
     temp += (((unsigned long)IReceive[i]) << (8 * i));
  }
  return temp; 
}
/**************************************************************************************************
主人
****************************************************************************************************/
#包括
字节ISend[4];
无效设置()
{
Wire1.begin();//连接i2c总线(主机地址可选)
intToByteA((无符号长)72992);
}
void循环()
{ 
Wire1.beginTransmission(4);//传输到设备#4
对于(int i=0;i<4;i++)
{
1.写入(i发送[i]);
} 
线1.端传动();
延迟(500);
}
void intToByteA(无符号长数值)
{
对于(int i=0;i<4;i++)
{
ISend[i]=(字节)((num>>(8*i))&0xFF);
}
}
/*********************************************************************************************/
/************************************************************************************************
奴隶
*************************************************************************************************/
#包括
字节i接收[4];
无效设置()
{
Wire1.begin(4);//连接地址为#4的i2c总线
Wire1.onReceive(receiveEvent);//注册事件
Serial.begin(9600);//开始串行输出
}
void循环()
{
延迟(223);
}
//每当从主机接收到数据时执行的函数
//此函数已注册为事件,请参阅setup()
无效接收事件(整数多少)
{
无符号长测试=11;
对于(int i=0;i<4;i++)
{
i接收[i]=Wire1.read();
} 
test=byteAToInt();
串行打印LN(测试);
}
unsigned long byteAToInt()
{
无符号长temp=0;
对于(int i=0;i<4;i++)
{
temp+=((无符号长)i接收[i])