首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >arduino due与arduino mega 2560的I2C连接

arduino due与arduino mega 2560的I2C连接
EN

Stack Overflow用户
提问于 2021-01-02 12:45:17
回答 1查看 436关注 0票数 0

我正在尝试与每一个I2C的应付款进行接口。我所做的是:

shared.

  • SCL/SDA on mega 2560 (非20/21)与SCL1 1/SDA1 1在到期时连接。SCL/SDA (20/21)连接到工作良好的imu bno055。

  • 无拉电阻连接。

在巨无霸上,我会:

代码语言:javascript
复制
#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;
}

到期时:

代码语言:javascript
复制
#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,两个板都能正常工作。我做错了什么?这仅仅是因为我没有拉电阻吗?如果是,我该如何添加?

编辑:我走了另一条路,转而使用了串行连接。

EN

回答 1

Stack Overflow用户

发布于 2021-01-16 20:43:40

首先,尝试在任何I2C连接中设置拉电阻,其次,您应该注意,到期运行在3.3V,Mega运行在5V。因此,在这两个I2C器件之间应该有一个电压电平移位器(3.3V到5V)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65539245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档