Uno R3 mit SR04T auf I2C OLED 0,96 Zoll

Danke Postmaster-ino,

jetzt weiß ich auf was du hinaus wolltest (hoffe es zumindest).

Habe mal den Code soweit gekürzt und geändert, das mir (wie ich hoffte) zumindest auf dem Display etwas ausgegeben wird. Unter 0cm und über 200cm den Fehler und alle anderen Entfernungen als Angabe.

Aber irgendwie mag er nicht.

Wenn ich folgenden Sketch hochlade bekomme ich zumindest keine Fehlermeldung.

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

#define U8X8_HAVE_HW_I2C
#include <Wire.h>

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

int trigger=7; //Trigger-Pin des Ultraschallsensors an Pin7 des Arduino-Boards 
int echo=6; // Echo-Pim des Ultraschallsensors an Pin6 des Arduino-Boards 
long dauer=0; // Das Wort dauer ist jetzt eine Variable, unter der die Zeit gespeichert wird, die eine Schallwelle bis zur Reflektion und zurück benötigt. Startwert ist hier 0.
long entfernung=0; // Das Wort „entfernung“ ist jetzt die variable, unter der die berechnete Entfernung gespeichert wird. Info: Anstelle von „int“ steht hier vor den beiden Variablen „long“. Das hat den Vorteil, dass eine größere Zahl gespeichert werden kann. Nachteil: Die Variable benötigt mehr Platz im Speicher.

void setup()
{
Serial.begin (9600); //Serielle kommunikation starten, damit man sich später die Werte am serial monitor ansehen kann.
pinMode(trigger, OUTPUT); // Trigger-Pin ist ein Ausgang
pinMode(echo, INPUT); // Echo-Pin ist ein Eingang
u8g2.begin();
}
void loop()
{
digitalWrite(trigger, LOW); //Hier nimmt man die Spannung für kurze Zeit vom Trigger-Pin, damit man später beim senden des Trigger-Signals ein rauschfreies Signal hat.
delay(5); //Dauer: 5 Millisekunden
digitalWrite(trigger, HIGH); //Jetzt sendet man eine Ultraschallwelle los.
delay(10); //Dieser „Ton“ erklingt für 10 Millisekunden.
digitalWrite(trigger, LOW);//Dann wird der „Ton“ abgeschaltet.
dauer = pulseIn(echo, HIGH); //Mit dem Befehl „pulseIn“ zählt der Mikrokontroller die Zeit in Mikrosekunden, bis der Schall zum Ultraschallsensor zurückkehrt.
entfernung = (dauer/2) * 0.03432; //Nun berechnet man die Entfernung in Zentimetern. Man teilt zunächst die Zeit durch zwei (Weil man ja nur eine Strecke berechnen möchte und nicht die Strecke hin- und zurück). Den Wert multipliziert man mit der Schallgeschwindigkeit in der Einheit Zentimeter/Mikrosekunde und erhält dann den Wert in Zentimetern.
if (entfernung >= 200 || entfernung <= 0) //Wenn die gemessene Entfernung über 200cm oder unter 0cm liegt,…
{
u8g2.clearBuffer();
u8g2.setFontMode(1);  // Transparent
u8g2.setFontDirection(0);
u8g2.setFont(u8g2_font_inr21_mf); //...dann soll der Monitor ausgeben „Kein Messwert“, weil Messwerte in diesen Bereichen falsch oder ungenau sind.
u8g2.drawStr(0, 30, "Fehler");
u8g2.setFont(u8g2_font_inr21_mf); //...dann soll der Monitor ausgeben „keine Daten“, weil Messwerte in diesen Bereichen falsch oder ungenau sind.
u8g2.drawStr(0,54, "Data fail");
}
else //  Ansonsten…
{
entfernung = 248 - entfernung; // 248 weil Zisterne 248cm tief ist
entfernung = entfernung * 26,627; //26,627 weil 4500 Liter Zisterneninhalt geteilt durch 169 cm Höhe von Boden bis voll
}
if (entfernung >= 0 && entfernung <= 4500) // 0 Liter bis 4500 Liter
{
u8g2.clearBuffer();
u8g2.setFontMode(1); // Transparent
u8g2.setFontDirection(0);
u8g2.setFont(u8g2_font_inr21_mf);
u8g2.drawStr(0, 30, entfernung); //Es soll der Wert der Entfernung (=Liter) an den Monitor in Zeile 1 ausgegeben werden.
u8g2.drawStr(87, 30, "L"); // hinter der Literzahl soll L als Maßangabe ausgegeben werden
u8g2.drawStr(0, 54, "XXX"); // Es soll der Wert der entsprechenden Liter in Prozent an den Monitor in Zeile 2 ausgegeben werden.
u8g2.drawStr(87, 54, "%"); // Es soll % hinter den entsprechenden Liter an den Monitor in Zeile 2 ausgegeben werden.
u8g2.setFont(u8g2_font_battery19_tn); //Es soll eine Batterieanzeige am Ende von Zeile 2 ausgegeben werden
u8g2.drawStr(120, 54, "2"); //Anzeige der Battriefüllstandsanzeige (Wert von 0 = leer bis 6 = voll)
}
delay(500); //Wartet die entsprechenden Millisekunden für einen neuen Messwert.
}

Ich hoffe nun den Code richtig eingefügt zu haben :slight_smile: .

Schon jetzt vielen Dank für die Hilfe .

VG
Dave