我正在尝试将大型设备与每个 I2C 的到期接口连接起来。我已经做好了:
- 理由是共享的。
- mega 2560(不是 20/21)上的 SCL/SDA 在到期时连接到 SCL1/SDA1。到期的 SCL/SDA (20/21) 连接到工作正常的 imu bno055。
- 没有连接上拉电阻。
在兆我做:
#include <Time.h>
#include <DFRobot_sim808.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#include <EasyTransferI2C.h>
EasyTransferI2C ET_GPS_data;
struct SEND_DATA_STRUCTURE{
double GPS_la;
double GPS_lo;
double GPS_alt;
};
SEND_DATA_STRUCTURE GPS_data;
#define I2C_SLAVE_ADDRESS 9
SoftwareSerial mySerial(PIN_TX,PIN_RX);
DFRobot_SIM808 sim808(&mySerial);
double GPS_la = 0.0;
double GPS_lo = 0.0;
double GPS_alt = 0.0;
#define GPS_Sampling_Time_ms 20
unsigned long currentMillis_GPS = 0;
unsigned long previousMillis_GPS = 0;
void getGPS();
void setup() {
mySerial.begin(9600);
Wire.begin();
// ******** Initialize sim808 module *************
while(!sim808.init())
{
delay(1000);
}
delay(3000);
if(sim808.attachGPS()){
//Serial.println("Open the GPS power success");
}else{
//Serial.println("Open the GPS power failure");
}
ET_GPS_data.begin(details(GPS_data), &Wire);
}
void loop() {
currentMillis_GPS = millis();
if (currentMillis_GPS - previousMillis_GPS > GPS_Sampling_Time_ms) {
getGPS();
sim808.detachGPS();
previousMillis_GPS = currentMillis_GPS;
ET_GPS_data.sendData(I2C_SLAVE_ADDRESS);
}
GPS_data.GPS_la = GPS_la;
GPS_data.GPS_lo = GPS_lo;
GPS_data.GPS_alt = GPS_alt;
}
void getGPS(){
while(!sim808.attachGPS()){}
delay(80);
while(!sim808.getGPS()){}
GPS_la = sim808.GPSdata.lat;
GPS_lo = sim808.GPSdata.lon;
GPS_alt = sim808.GPSdata.altitude;
}
到期:
#include <Arduino.h>
#include <Wire.h>
#include <EasyTransferI2C.h>
EasyTransferI2C ET_GPS_data;
struct RECEIVE_DATA_STRUCTURE{
double GPS_la;
double GPS_lo;
double GPS_alt;
};
RECEIVE_DATA_STRUCTURE GPS_data;
double GPS_la = 0.1;
double GPS_lo = 0.1;
double GPS_alt = 0.1;
#define GPS_Sampling_Time_ms 100
unsigned long currentMillis_GPS = 0;
unsigned long previousMillis_GPS = 0;
void setup() {
Serial.begin(57600);
Wire1.begin(I2C_SLAVE_ADDRESS);
ET_GPS_data.begin(details(GPS_data), &Wire1);
Wire1.onReceive(receive);
}
void loop() {
if(ET_GPS_data.receiveData()){
GPS_la = GPS_data.GPS_la;
GPS_lo = GPS_data.GPS_lo;
GPS_alt = GPS_data.GPS_alt;
Serial.println(GPS_alt);
}
}
没有 i2c,两个板都可以正常工作。我究竟做错了什么?这仅仅是因为我没有上拉电阻吗?如果是,我应该如何添加它/它们?
编辑:我遵循了另一条路径并改用串行连接。