Sd-library stört vorhandenen Code (MPU6050 und BMP180)

Hi Leute, im Anhang ist der Code welcher Einwandfrei funktioniert jedoch sobald ich die Library( <SD.h> , <SPI.h>) für einen "Micro sd Card Adapter" einfüge, weil ich die Daten speichern möchte, bleibt er in Zeile 50 stecken. jetzt weiß ich nicht ob es an der Library liegt, oder wie der Code geschrieben ist. Bitte um Vorschläge, oder andere Lösungen!
Vielen Dank!

#include <Arduino.h>
#include <Wire.h>
#include <BMP180I2C.h>//BMP
#define I2C_ADDRESS 0x77//BMP
#include <Adafruit_MPU6050.h>//MPU
#include <Adafruit_Sensor.h>//MPU
BMP180I2C bmp180(I2C_ADDRESS);//create an BMP180 object using the I2C interface
Adafruit_MPU6050 mpu;//MPU















void setup() {
Wire.begin();
 Serial.begin(9600);





 
 
  while (!Serial);  //wait for serial connection to open (only necessary on some boards)
  if (!bmp180.begin()){ //begin() initializes the interface, checks the sensor ID and reads the calibration parameters.  
    Serial.println("begin() failed. check your BMP180 Interface and I2C Address.");
    while (1);
  }
  bmp180.resetToDefaults(); //reset sensor to default parameters.
  bmp180.setSamplingMode(BMP180MI::MODE_UHR);//enable ultra high resolution mode for pressure measurements








  Serial.println("Adafruit MPU6050 test!"); 
  if (!mpu.begin()) { // Try to initialize!
    Serial.println("Failed to find MPU6050 chip");
    while (1) {}
  }
  Serial.println("MPU6050 Found!");


  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
  Serial.print("Accelerometer range set to: ");
  switch (mpu.getAccelerometerRange()) {
  case MPU6050_RANGE_2_G:
    Serial.println("+-2G");
    break;
  case MPU6050_RANGE_4_G:
    Serial.println("+-4G");
    break;
  case MPU6050_RANGE_8_G:
    Serial.println("+-8G");
    break;
  case MPU6050_RANGE_16_G:
    Serial.println("+-16G");
    break;
  }
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);
  Serial.print("Gyro range set to: ");
  switch (mpu.getGyroRange()) {
  case MPU6050_RANGE_250_DEG:
    Serial.println("+- 250 deg/s");
    break;
  case MPU6050_RANGE_500_DEG:
    Serial.println("+- 500 deg/s");
    break;
  case MPU6050_RANGE_1000_DEG:
    Serial.println("+- 1000 deg/s");
    break;
  case MPU6050_RANGE_2000_DEG:
    Serial.println("+- 2000 deg/s");
    break;
  }

  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
  Serial.print("Filter bandwidth set to: ");
  switch (mpu.getFilterBandwidth()) {
  case MPU6050_BAND_260_HZ:
    Serial.println("260 Hz");
    break;
  case MPU6050_BAND_184_HZ:
    Serial.println("184 Hz");
    break;
  case MPU6050_BAND_94_HZ:
    Serial.println("94 Hz");
    break;
  case MPU6050_BAND_44_HZ:
    Serial.println("44 Hz");
    break;
  case MPU6050_BAND_21_HZ:
    Serial.println("21 Hz");
    break;
  case MPU6050_BAND_10_HZ:
    Serial.println("10 Hz");
    break;
  case MPU6050_BAND_5_HZ:
    Serial.println("5 Hz");
    break;
  }
  Serial.println("");
 
}



void loop() {
  
  
  
  
  //BMP A
if (!bmp180.measureTemperature())
  {
    Serial.println("could not start temperature measurement, is a measurement already running?");
    return;
  }
  do{ }
  while (!bmp180.hasValue());
  
 // Serial.print("Temperature: "); 
  Serial.print(bmp180.getTemperature()); 
  Serial.print("  ");
 // Serial.println(" degC");
  if (!bmp180.measurePressure()){//start a pressure measurement. pressure measurements depend on temperature measurement, you should only start a pressure 
 
    Serial.println("could not start perssure measurement, is a measurement already running?");
    return;
  }
  do { }
  while (!bmp180.hasValue());
  
  //Serial.print("Pressure: "); 
  Serial.print(bmp180.getPressure()/100 );
  Serial.print("  ");
//  Serial.println(" mbar");
//BMP E






//MPU A

sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

 
  //Serial.print("Acceleration X: ");
  Serial.print(a.acceleration.x );
  Serial.print("  ");
  //Serial.print(", Y: ");
  Serial.print(a.acceleration.y );
  Serial.print("  ");
  //Serial.print(", Z: ");
  Serial.print(a.acceleration.z );
  Serial.print("  ");
  //Serial.println(" m/s^2");

 // Serial.print("Rotation X: ");
  Serial.print(g.gyro.x );
  Serial.print("  ");
  //Serial.print(", Y: ");
  Serial.print(g.gyro.y );
  Serial.print("  ");
 // Serial.print(", Z: ");
  Serial.print(g.gyro.z );
  Serial.print("  ");
 // Serial.println(" rad/s");
  
  //Serial.print("Temperature: ");
  Serial.println(temp.temperature);
  Serial.print("  ");
  //Serial.println(" degC");
  
  Serial.println("");
 //MPU E

delay(100);



  
}

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Zeige die Ausgabe von der Seriellen Schnittstelle damit die Leute sehen, wo genau das stehen bleibt.
Mit deinen Leerzeilen ist das schwer zu erkennen.

Welcher Arduino genau soll da programmiert werden?
Was sagt er Kompiler wie viel Progmem / wie viel die Globals belegen?

Lies dich ein zum Thema F-Makro und wende es für deine Serial.print Ausgaben an.

Und wo wird die SD eingebunden?
Man sollte schon kompletten Sketch posten.

Und WO ist Zeile 50. Bin zu faul zum Zählen.

Es wäre klug wenn man einfach ein Kommentar macht z.b. so

sd.open // hier hängt er.

Davon abgesehen sehe ich keine

#include "sd.h" // oder ähnliches Aber vielleicht übersehe ich was.

Gruß

Pucki

Also kannst die IDE nicht bedienen :wink:

Doch. :wink: Aber weißt du was das für ein Aufwand ist :wink:

Ide-starten, dann neues Projekt weil das mistding immer mit den letzten Startet (komischer Unfug).
IDE schliessen.
Code kopieren
Code einfügen
und dann scrollen bis ich die Zeile 50 finde

Nä nä dat tun mir nit. Das kost zuviel Lebenszeit :wink:

Gruß

Pucki

Genau 2 Sek. Unsinn schreiben kostet mehr :slight_smile:
Ende der Durchsage sonnst wird alles zugemüllt.

So ich habe mir das mal angesehen. Bin halt neugierig. :wink:

Die Zeile wo es Knallt ist :

if (!mpu.begin()) { // Try to initialize!

Das lässt mich VERMUTEN das es sich um ein i2c Adressen-Konflikt handelt.

Mein TIPP:
Klemm die Teile mit i2c mal EINZELN an den i2c Bus.
Das heißt : Lass die ganze Schaltung so wie sie ist. Ziehe nur die Jeweiligen Pins raus.

Dann starte aus den Beispielen den i2c-Scanner.

Schreibe dir auf wer welche Adresse hat.

Ach und nur so nebenbei. Du brauchst eine i2c Adresse nicht defnieren. Schreib sie einfach SO in den Ini-Befehl. Das reicht völlig aus.

Für weitere Infos siehe :

Gruß

Pucki

Was den BM280 angeht.

Der brauch lt. diesen Script KEINE i2c-Adresse zugewiesen bekommen.

Bevor du dich wunderst : Bitte beachte auch BMP180 Barometric Pressure/Temperature/Altitude Sensor- 5V ready : ID 1603 : $9.95 : Adafruit Industries, Unique & fun DIY electronics and kits

Übersetztes Zitat der Seite :
" Der BMP180 ist die nächste Generation von Sensoren von Bosch und ersetzt den BMP085. Die gute Nachricht ist, dass es völlig identisch mit dem BMP085 in Bezug auf Firmware/Software ist"

Also was für den BMP085 gilt gilt auch für den BMP180. !!!!

Gruß

Pucki

Wieder ein typischer Pucki007: Viel unnützes Gedöse über 085/180, wenn es eigentlich um den 280 geht.

Gruß Tommy

Edit: Sorry, Fehler von mir.

Im Topic steht klar BMP180 !!! Und daran halte ich mich halt.

Wenn ein TO nicht einmal das hin bekommt, dann soll er sich auch nicht wundern wenn er falsche Infos bekommt.

Gruß

Pucki

Jung lass das BITTE, Du verstehst nicht, oder willst nicht verstehen wo es klemmt.
Wen der Sketch nach einfügen vom SD bleibt am MPU hängen = wird
Serial.println("Adafruit MPU6050 test!"); ausgegeben hat nix mehr mit BMP zu tun.

ist auch nur die halbe Wahrheit, je nach Lib funktioniert das nicht, sind doch kleine Nuancen.
Solange der TO nicht den ganzen Sketch zeigt bleibt es alles weiterhin im nebel Stechen

Richtig.

ABER.

Laut diesen Code bedeutet ein Parameter beim Ini de BMP-280 :wink: das es als SPI läuft. Der Parameter ist ergo Chip-Select (sc). OHNE Parameter ist das i2c.

Und wenn man die Bus'e durcheinander bringt, kann das ganz schnell zu seltsamen Problemen führen.

Weshalb ich IMMER die Teile einzel zusammen baue. Als Stück einbauen und Testen, dann das nächste und wieder Testen. Dann weiß ich wenigstens wo ich suchen muss.

Gruß

Pucki

Ok, mein Fehler.

Gruß Tommy

@bames_jond zeige mall was für Sensoren du nutzt, und am welschem Arduino, jetzt fällt mir ein das der Ladenhüter BMP180 nur für 3.3V Systeme geeignet ist, die meisten Module haben keinen level shifter IC drauf, je schnelre die kaputt gehen am 5V Arduino desto mehr wird verkauft.
So manche SD Kartenleser sind auch nur für 3,3V.
Einen BMP180 hate ich mall auch, sehr ungenau und wegen falscher Beschreibung habe den am Arduino Uno kaputt gemacht, ist aber lange her :wink:

Die üblichen "blauen" akzeptieren aber auch Datenleitungen Ohne Shifter wenn sie von 3.3 Volt Pin versorgt werden. Ob das auf dauer gut geht ist ne andere Frage.

Gruß

Pucki

Das ist doch alles nur stochern im Nebel, da der TO bisher keine weiteren Infos liefern kann oder will. Soll er doch erstmal den kompletten Sketch liefern, wenn er noch Hilfe haben möchte.

Wieso? 3,3V Vcc und 3,3V Logikpegel passen doch zusammen.

Gruß Tommy

Lese mall was du schreibst, SD Karten sind für 3,3V vorgesehen, müssen jedoch Widerstande am BUS haben.