我有一个有趣的问题,它可能或不可能仅适用于 Due。我没有资源在 2 个 Arduino ATMegas 上测试 I2C。这是问题:
我有两个Due:主人有一个以太网盾,以后会用到;现在用于轻松区分主从。I2C 工作正常,但设置如下: 1 块 12V 电池连接到与主机相连的 Due 的 DC“圆形”输入:3.3V 和 GND 在两块板之间连接在一起:1 条用于上传草图的 USB 电缆。
当我从主设备上拔下 USB 以在从设备上上传草图时,两个板在 USB 拔出阶段都保持开启 - 由于 12 DC。草图已上传,USB 停留在从机端进行串行监控。
THE ISSUE:当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;
}