串行通信被BMP180和Arduino Mega冻结

问题描述

我最近购买了ELEGO Mega 2560,或者换句话说,买了Arduino Mega。我也买了一个bmp180传感器。我以这种方式连接了bmp:VCC-3.3v,GND-GND,SCL-21,SDA-20。我上传一个简单的代码,仅显示海拔高度。当我转到串行监视器查看结果时,什么都没有弹出。可以假设BMP初始化成功(如果连接),如果失败则失败。当我去看监视器时,它什么也没说。当我断开传感器的连接时,它表示失败。似乎串行监视器只是冻结。也是一个提示,我的代码很混乱,很抱歉,如果跟不上我。

#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,");
            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都没有相互短路或接地。