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.
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
So ich habe mir das mal angesehen. Bin halt neugierig.
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.
Ü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. !!!!
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
Laut diesen Code bedeutet ein Parameter beim Ini de BMP-280 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.
@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
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.
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.