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
C++ arduino due和arduino mega 2560之间的I2C连接_C++_Arduino_I2c_Serial Communication_Arduino Due - Fatal编程技术网

C++ arduino due和arduino mega 2560之间的I2C连接

C++ arduino due和arduino mega 2560之间的I2C连接,c++,arduino,i2c,serial-communication,arduino-due,C++,Arduino,I2c,Serial Communication,Arduino Due,我正在尝试将一个mega与一个due per I2C接口。我已经做了: 场地是共用的 mega 2560(非20/21)上的SCL/SDA连接至到期的SCL1/SDA1。到期(20/21)的SCL/SDA连接至工作正常的imu bno055 未连接上拉电阻器 关于mega,我会: #包括 #包括 #包括 #包括 #包括 易于传输GPS数据; 结构发送数据结构{ 双GPS_-la; 双GPS_-lo; 双GPS_alt; }; 发送数据结构GPS数据; #定义I2C_从_地址9 软件串行myS

我正在尝试将一个mega与一个due per I2C接口。我已经做了:

  • 场地是共用的
  • mega 2560(非20/21)上的SCL/SDA连接至到期的SCL1/SDA1。到期(20/21)的SCL/SDA连接至工作正常的imu bno055
  • 未连接上拉电阻器
关于mega,我会:

#包括
#包括
#包括
#包括
#包括
易于传输GPS数据;
结构发送数据结构{
双GPS_-la;
双GPS_-lo;
双GPS_alt;
};
发送数据结构GPS数据;
#定义I2C_从_地址9
软件串行mySerial(引脚发送、引脚接收);
DFRobot_SIM808 SIM808(&mySerial);
双GPS_la=0.0;
双GPS_lo=0.0;
双GPS_alt=0.0;
#定义GPS\u采样时间\u毫秒20
无符号长电流毫欧GPS=0;
无符号长前毫秒GPS=0;
void getGPS();
无效设置(){
mySerial.begin(9600);
Wire.begin();
//*******初始化sim808模块*************
而(!sim808.init())
{
延迟(1000);
}
延迟(3000);
if(sim808.attachGPS()){
//Serial.println(“打开GPS电源成功”);
}否则{
//Serial.println(“打开GPS电源故障”);
}
ET_GPS_数据。开始(详细信息(GPS_数据)和连线);
}
void循环(){
当前毫秒GPS=毫秒();
如果(当前毫秒GPS-以前的毫秒GPS>GPS采样时间毫秒){
getGPS();
sim808.detachGPS();
以前的毫秒GPS=当前的毫秒GPS;
发送数据(I2C从站地址);
}
GPS_data.GPS_la=GPS_la;
GPS_data.GPS_lo=GPS_lo;
GPS\u data.GPS\u alt=GPS\u alt;
}
void getGPS(){
而(!sim808.attachGPS()){}
延迟(80);
而(!sim808.getGPS()){}
GPS_la=sim808.GPSdata.lat;
GPS_lo=sim808.GPSdata.lon;
GPS_alt=sim808.GPSdata.alt;
}
到期时:

#包括
#包括
#包括
易于传输GPS数据;
结构接收数据结构{
双GPS_-la;
双GPS_-lo;
双GPS_alt;
};
接收数据结构GPS数据;
双GPS_la=0.1;
双GPS_lo=0.1;
双GPS_alt=0.1;
#定义GPS\u采样时间\u毫秒100
无符号长电流毫欧GPS=0;
无符号长前毫秒GPS=0;
无效设置(){
序列号。开始(57600);
Wire1.开始(I2C_从站地址);
ET_GPS_数据。开始(详细信息(GPS_数据)和连线1);
有线1.onReceive(接收);
}
void循环(){
if(ET_GPS_data.receiveData()){
GPS_la=GPS_数据。GPS_la;
GPS_lo=GPS_数据。GPS_lo;
GPS_alt=GPS_数据。GPS_alt;
串行打印LN(GPS\U alt);
}
}
如果没有i2c,两块板都可以正常工作。我做错了什么?这只是因为我没有上拉电阻吗?如果是,我应该如何添加它/它们


编辑:我采用了另一种方式,改用串行连接。

首先,尝试在任何I2C连接中安装上拉电阻,
其次,您应该注意到,3.3V的到期运行和5V的超大运行。因此,在这两个I2C设备之间应该有一个电压电平移位器(3.3V到5V)。当然,我注意到串行连接更符合我的要求,并改为它。@ AttooVISI仍然应该考虑一个电平转换器,因为你的两个板在不同的工作电压下运行。你可以永久性地破坏你应得的。