BMP180 和 Arduino Mega 的串行通信冻结

Serial Communication freezes with BMP180 and Arduino Mega

我最近买了一个 ELEGO Mega 2560,换句话说就是一个 Arduino Mega。我也买了一个 bmp180 传感器。我以这种方式连接了 bmp,VCC - 3.3v,GND - GND,SCL - 21,SDA - 20。我上传了一个简单的代码,它只显示高度。当我去串行监视器查看结果时,没有弹出任何内容。如果它连接,假设说 BMP init 成功,如果没有连接则失败。当我去显示器时,它什么也没说。当我断开传感器时,它说失败。似乎串行监视器刚刚冻结。另外提个醒,我的代码很乱,不好意思跟不上。

#include <Wire.h>
#include <SFE_BMP180.h>

SFE_BMP180 bmp180;
float Po = 1014.9;

#define ledPin 7
#define TransmitPin 5

//int Altitude = 5;

int sendValue;
String incomingString;

unsigned long lastTransmission;
const int interval = 1000;

void setup() {
  
  Wire.begin();
  pinMode(ledPin, OUTPUT);
  pinMode(2, INPUT);
  pinMode(10, OUTPUT);
  pinMode(TransmitPin, OUTPUT);

  bool success = bmp180.begin();
  Serial.begin(115200);

  if (success) {
    Serial.println("BMP180 init success");
  }
  else 
    Serial.println("fail");
}

void loop() {
  sendValue = digitalRead(29);
  if (sendValue == HIGH) {
    if (millis() > lastTransmission + interval) {
      Serial.println("AT+SEND=1,8,Return");
      digitalWrite(TransmitPin, HIGH);
      delay(100);
      digitalWrite(TransmitPin, LOW);
      lastTransmission = millis();
    }
  }

  if (Serial.available()) {
    incomingString = Serial.readString();
    if (incomingString.indexOf("Testing!") > 0) {
      digitalWrite(10, HIGH);
      delay(100);
      digitalWrite(10, LOW);
    }
  }

  char status;
  double T, P, alt;
  bool success = false;

  status = bmp180.startTemperature();

  if (status != 0) {
    delay(1000);
    status = bmp180.getTemperature(T);

    if (status != 0) {
      status = bmp180.startPressure(3);

      if (status != 0) {
        delay(status);
        status = bmp180.getPressure(P, T);
        if (status != 0) {
          if (millis() > lastTransmission + interval) {
            alt = bmp180.altitude(P, Po);
            Serial.print("AT+SEND=1,8,");
            int altAsFoot = alt * 3.281;
            Serial.println(altAsFoot);
            digitalWrite(TransmitPin, HIGH);
            delay(100);
            digitalWrite(TransmitPin, LOW);
          }
          for (int i = 0; i < 1800; i++) {
            delay(1);
            if (Serial.available()) {
              incomingString = Serial.readString();
              if (incomingString.indexOf("+OK") > 0) {
                digitalWrite(ledPin, HIGH);
                delay(100);
                digitalWrite(ledPin, LOW);
              }
              if (incomingString.indexOf("Testing!") > 0) {
                digitalWrite(10, HIGH);
                delay(100);
                digitalWrite(10, LOW);
              }
            }
          }
        }
      }
    }
  }
}

原来是硬件问题。我对 SDA 接地短路。我假设如果它与 SCL 短路也会发生同样的情况。确保 SDA 和 SCL 没有相互短路或接地。