Problem, BMP180 auf OLED 128x64

Guten abend,
ich habe ein kleines Problem mit meinem Sketch.
Ich möchte meine Messdaten vom BMP180 auf den OLED Display wiedergeben.
Leider Funktioniert der Sketch bei mir einfach nicht...
Der OLED bildschirm und der BMP180 werden über I2C angesteuert.
Weis evtl. einer eine Lösung?

#include <Wire.h>
#include <Adafruit_BMP085.h> 
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>

Adafruit_BMP085 bmp;

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

void setup(void) {
  u8g2.begin();
}

void loop(void) {
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_ncenB10_tr);
  u8g2.setCursor(0,10);	
  u8g2.print(F("Temperatur"));
  u8g2.setCursor(20,30);
  u8g2.print((String)bmp.readPressure());
  u8g2.sendBuffer();
  delay(1000);  
}

Hast du denn die Sensordaten schon mal im seriellen Monitor angesehen ?
Und ich sehe in deinem Sketch keine Ausgabe der Temperatur.

Mit welcher Spannung betreibst du den Sensor ?
Ist der evtl. nur für 3,3 Volt ausgelegt ?

Hallo
ja das habe ich.
Der Display mit dem Beispielsketch "Hello World!" Funktioniert auch.
Hier ist der Sketch:

#include <Wire.h>
#include <Adafruit_BMP085.h>

Adafruit_BMP085 bmp;
  
void setup() {
  Serial.begin(9600);
  if (!bmp.begin()) {
  Serial.println("Could not find a valid BMP085 sensor, check wiring!");
  while (1) {}
  }
}

void loop() {
    float x = bmp.readPressure();
    float k = x / 100; 
    Serial.print("Temperature = ");
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");
    
    Serial.print("Pressure = ");
    Serial.print(k);
    Serial.println(" hPa");
    
    delay(2000);
}

Das hilft dir ja nicht.
Du musst das in deinem aktuellen machen, nur so kannst du sehen, ob alles funktioniert.

Und zur besseren Kontrolle kannst du 2 Funktionen aufbauen.
Eine die den seriellen Monitor nutzt und eine weitere, die dein Oled beschreibt.
Die Funktionen rufst du dann nacheinander aus der Loop auf.
So wird es schön übersichtlich.

Wie meinst du das "in deinem Aktuellen machen"?

W1lk3n:
Wie meinst du das "in deinem Aktuellen machen"?

Ohhhh.......

Den Sketch, den du im ersten Post gezeigt hast, das ist für mich der aktuelle, da du den ja verwenden willst.
Und nochmal, ich sehe da keinen Temperaturaufruf aus dem Sensor.

Also ich habe mal ein wenig rumprobiert.
Wenn ich den Sktech wie du gestagt hast ändere, funktioniert alles einwandfrei.
Er gibt den Druck auf dem OLED und in dem Seriellen Monitor wieder.
Mich wundert nur was ich falsch gemacht habe...

#include <Wire.h>
#include <Arduino.h>
#include <U8g2lib.h>
#include <Adafruit_BMP085.h>

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
Adafruit_BMP085 bmp;
  
void setup(void) {
  u8g2.begin();
  Serial.begin(9600);
  if (!bmp.begin()) {
  Serial.println("Could not find a valid BMP085 sensor, check wiring!");
  while (1) {}
  }
}

void loop(void) {
    float x = bmp.readPressure();
    float k = x / 100; 
    Serial.print("Temperature = ");
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");
    
    Serial.print("Pressure = ");
    Serial.print(k);
    Serial.println(" hPa");
    
    delay(2000);
    
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_ncenB10_tr);
  u8g2.setCursor(0,10);  
  u8g2.print(F("Temperatur"));
  u8g2.setCursor(20,30);
  u8g2.print((String)k);
  u8g2.sendBuffer();

 
  delay(1000); 
}

Da ich die Library u8g2 nicht kenne, solltest du dir das ganz genau im Beispiel der Library ansehen.

Und wie ich in Post #3 geschrieben habe in Funktionen setzen.
Dann kannst du es besser trennen und untersuchen.

Ok.2..ich habe für dich die Library angesehen.
Bei dir fehlt die Anweisung "drawStr", die wird das Problem lösen.

Erstmal vielendank für deine Hilfe!
Ich habe es hinbekommen!
es lag wohl an.

Serial.begin(9600);
if (!bmp.begin()){}
Dieser Befehl Initialisiert den Sensor.Diesen habe ich vergesen.

Naja hier ist nochmal der komplette Sketch

#include <Wire.h>
#include <Arduino.h>
#include <U8g2lib.h>
#include <Adafruit_BMP085.h>

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
Adafruit_BMP085 bmp;
  
void setup(void) {
  u8g2.begin();
  Serial.begin(9600);
  if (!bmp.begin()){}
}

void loop(void) {
    float x = bmp.readPressure();
    float k = x / 100; 

  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_ncenB10_tr);
  u8g2.setCursor(0,12);  
  u8g2.print(F("Temperatur"));
  u8g2.setCursor(10,30);
  u8g2.print((String)bmp.readTemperature()+("° C"));
  u8g2.setCursor(0,45);
  u8g2.print(F("Druck"));
  u8g2.setCursor(10,63);
  u8g2.print((String)k+(" hPa"));
  u8g2.sendBuffer();

 
  delay(1000); 
}

W1lk3n:
Erstmal vielendank für deine Hilfe!
Ich habe es hinbekommen!
es lag wohl an.

Serial.begin(9600);
if (!bmp.begin()){}

So...?
Daran lag es sicher nicht.

Die Anweisung "Serial.begin" wird für den seriellen Monitor gebraucht.
Die zweite Anweisung blockiert den Sketch, wenn kein Sensor gefunden wird und ist so, wie sie da steht nicht komplett, also ohne Funktion. Daran wird es gelegen haben.

Also bitte lerne mal die Grundlagen, dann wird dir vieles leichter fallen.

Edit.
Gerade gesehen, die zweite Anweisung fehlt tatsächlich im ersten Sketch.

So ich habe mich nochmal informiert.
Man muss diesen BMP 180 Initialisieren.
Dieses geht mit
" bmp.begin(); "
Kann dann geschlossen werden!

Hi

Wieso willst Du den BMP schließen?

Wenn Du den Thread meinst: Da kann durchaus noch Mal Einer kommen, Der genau hier ansetzen will - da wäre es doch blöd, wenn der Thread dann zu wäre ...

MfG

W1lk3n:
So ich habe mich nochmal informiert.
Man muss diesen BMP 180 Initialisieren.
Dieses geht mit
" bmp.begin(); "
Kann dann geschlossen werden!

Stimmt, du hast Recht.
Habe ich auch im letzten Post noch berichtigt, da ich es in deinem übersehen hatte.
Und in so einem Fall hilft es immer, wenn man den seriellen Monitor parallel zum Display nutzt.

Sorry....aber gut das du es rausgefunden hast.
Und danke für die Rückmeldung.

wieso schreibst Du eigentlich
"void setup(void){}"
und
"void loop(void){}"?

Denn Sketch habe ich mir zusammen kopiert.
Dar war da schon so.
Habe es bei meinem neuen Sktech wegelassen, mach keinen unterschied. :slight_smile:

Unterschied zwischen void foo() und void foo(void) ?
"Macht keinen Unterschied" ist schon die richtige Antwort :slight_smile: