Hätte ein fertiges Programm gefunden, müsste jedoch angepasst werden.
Bei mir ist die SD Karte über SPI angeschlossen und der BME280 über I2C.
Bin beim Programmieren leider nicht so bewandert.
Evtl kann jemand beim Anpassen helfen ?
Wäre #define SD_SCK13 ... ein richtiger Ansatz ?
bzw bei //Adafruit...; I2C die // weglassen und SPI auskommentieren.
Sollte jemand ein fertiges Programm mit BME280 und SD Karte haben wäre
es auch ok.
Bernhard F. schrieb:> Wäre #define SD_SCK13 ... ein richtiger Ansatz ?
Nö.
> bzw bei //Adafruit...; I2C die // weglassen und SPI auskommentieren.
BINGO!
Mit I2C Scanner wird ein device unter der adresse 0x76 gefunden,
jedoch mit dem Beispiel Programm der Arduinoumgebung nicht ?
Sollte bei dem Programm nicht die Adresse angegeben werden ?
Bernhard F. schrieb:> Mit I2C Scanner wird ein device unter der adresse 0x76 gefunden,
Welcher I2C Scanner?
> jedoch mit dem Beispiel Programm der Arduinoumgebung nicht ?> Sollte bei dem Programm nicht die Adresse angegeben werden ?
Eigentlich schon, wahrscheinlich steckt sie in den Libs drin.
Wire von Arduino nutzt 7 Bit Darstellung der Adresse.
https://www.gammon.com.au/forum/?id=10896
Dies wäre die Adresse des I2C Scanners von arduino.cc.
Eigentlich würde ich gerne BME auf eine SD Karte (SPI) loggen.
Gibt es da irgendwelche Vorübungen die du empfehlen könntest ?
Bernhard F. schrieb:> https://www.gammon.com.au/forum/?id=10896> Dies wäre die Adresse des I2C Scanners von arduino.cc.
OK.
> Eigentlich würde ich gerne BME auf eine SD Karte (SPI) loggen.> Gibt es da irgendwelche Vorübungen die du empfehlen könntest ?
Wozu? Du hat doch schon fast alles! Einfach eine Textdatei auf der
SD-Karte öffnen und mit print reinschreiben.
https://www.arduino.cc/en/Reference/SD
Ich glaube das sind Beispiele für I2C, meine SD Karte hat jedoch SPI
(MOSI,..)
und der Sensor I2C. Das erschwert das ganze für einen Programmierprofi
wie mich.
Bernhard F. schrieb:> Ich glaube das sind Beispiele für I2C, meine SD Karte hat jedoch SPI> (MOSI,..)> und der Sensor I2C. Das erschwert das ganze für einen Programmierprofi> wie mich.
Bist du ein Troll? Schon mal die einfachen SD-Card Beispiele angeschaut?
Das ist TRIVIAL! Auch ohne Informatikstudium. Man muss nur die Pins in
der Software richtig eintragen, damit sie zu deiner Hardware passen.
https://www.arduino.cc/en/Tutorial/LibraryExamples/Datalogger#code
Leute gibt's . . . .
Bernhard F. schrieb:> Ich glaube das sind Beispiele für I2C, meine SD Karte hat jedoch SPI> (MOSI,..)
Es gibt keine SD-Karten mit I2C, die sind IMMER SPI (beim Arduino und
anderen kleinen Mikrocontrollern)
Dort sind 2 I2C Adressen vermerkt. BME280_ADDRESS wird in der Methode
begin() verwendet, BME280_ADDRESS_ALTERNATE wird nie verwendet. Wenn
dein Sensor also mit Adresse 0x76 verkabelt ist, wird er duch diese
Software NIE gefunden! Da hat der Programmierer nicht so wirklich
mitgedacht.
Es gibt 2 Möglichkeiten. Du gehst in den Quelltext der Lib, der liegt im
Arduino-Verzeichnis unter
C:\Programme\Arduino\libraries\Adafruit_BME280_Library-2.1.2\Adafruit_BM
E280.h
und änderst die Zahl in 0x76
Vielen Dank erstmal. SD Karte und Sensor funktionieren jetzt auf dem
Steckboard mit unterschiedlichen Programmen. Bei der Kombination der
beiden Programme sehe ich nun meine Probleme.
Habe jetzt mal versucht das Datalogger Programm abzuändern, aber es wird
kein Luftdruck ausgegeben. Für den Anfang würde mir der Luftdruck
reichen, auch eine Prüfung auf Vorhanden einer SD Karte würde das
Programm vereinfachen.
Auch der Unterschied zwischen read und get ist nicht wirklich klar !?
Bernhard Fraunhofer schrieb:> Habe jetzt mal versucht das Datalogger Programm abzuändern
Da ist eine "}" an der falschen Stelle:
1
if(!SD.begin(chipSelect)){
2
Serial.println("Card failed, or not present");
3
// don't do anything more:
4
//// HIER FEHLT :
5
while(1);
6
}
7
//////////
und weiter unten ist's zuviel.
Resultat: Du startest den BME nur, wenn die SD-Karte nicht
funktioniert?!¿¡
Tipp: Quelltext immer sauber einrücken, dann fällt sowas direkt ins
Auge.
Bernhard F. schrieb:> Warum wird> "Luftdruck" nicht am seriellen Monitor ausgegeben ?
Weil bme.readSensor nicht beendet wird, was entweder am fehlenden
"bme.begin" liegt, oder z.B. daran dass dein BME nicht an Adresse 0x77
zu finden ist.
Schreib einfach mal mehr "Serial.println" in deine loop(), vor/nach
jeder Aktion eine Ausgabe. Dann siehst du am Terminal, wo er hängt.
Bernhard Fraunhofer schrieb:> Ausgabe funktioniert wieder, jedoch ohne richtigen Wert.
Wenn du kein bme.begin ausführst, können die Werte nicht stimmen. Da
wird u.A. die Kalibration/Umrechnungs-Koeffizienten gelesen und
initialisiert.
Diese "cactus"-Bibliothek ist eh recht zweifelhaft.
Teilt eiskalt durch 0, und weiß das sogar, merkt es extra in einem
Kommentar an:
1
2
if(var1==0){
3
4
// return 0; // avoid exception caused by division by zero
5
pressure=0.0;
6
}
7
8
p=1048576-adc_P;
9
10
p=(((p<<31)-var2)*3125)/var1;
var1 ist an der Stelle übrigens ziemlich sicher == 0, wenn das Objekt
nicht initisiert wurde.
Bernhard F. schrieb:> Habe das Programm wegen besserer Übersicht nochmal reduziert. Warum wird> "Luftdruck" nicht am seriellen Monitor ausgegeben ?
Du wirst noch viel Spaß mit deinem Trial & Error haben. Ich würde mal
meinen, dir fehlen ELEMENTARSTE Grundlagen, du probierst einfach nur
wild rum, ohne zu verstehen, was du da wirklich machst.