我有一个有趣的问题,对于Due而言可能是也可能不是。我没有资源在2个Arduino ATMegas上测试I2C。这是问题所在:
我有两个Due:主机有一个以太网屏蔽,以后会用到;现在用于轻松区分主站和从站。 I2C正在工作,但设置为:1个12V电池连接到Due的DC“圆形”输入连接到主机:3.3V和GND连接在两块板之间:1条USB电缆用于上传草图。
当我从主设备上拔下USB以在从设备上上传草图时,由于12 DC,两个主板在USB拔出阶段都保持打开状态。 草图已上传,USB保留在从属设备上以进行串行监控。
问题:当12V电池未校正到主机时;在USB拔出阶段,两块板都关闭。将相同的草图上传到从站时,串行监视器显示从站没有收到任何信息。
我认为I2C设置和上传草图是相互矛盾的。我怎样才能解决这个问题,所以我不需要一直给Dues上电。以下是使用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;
}