//Display SCL,SDA
#include <U8g2lib.h> //  Display 1.3" oder Display 0.96" - Library Includes all graphics procedures  (https://github.com/olikraus/u8g2/)
#include <Arduino.h> //Standard Bibliothek 


//Display 128x64 Pixel, umfangreiche grafische Funktionen
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

//Variablen für Ultraschall definieren
int trigger=0; //Trigger Pin GPIO0, D3, Ausgang
int echo=14; //Echo Pin GPIO14, D5, Eingang, Vorsicht nur 3,3V erlaubt
long dauer=0; //Zeit die eine Schallwelle bis zur Reflektion und zurück benötigt
long entfernung=0; //berechnete Entfernung

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); //Seriellen Monitor vorbereiten

  //Ultraschallsensor HC SR04
  pinMode(trigger, OUTPUT); //Trigger Pin GPIO0, D3, Ausgang
  pinMode(echo, INPUT); //Echo Pin GPIO14, D5, Eingang, Vorsicht nur 3,3V erlaubt
  
  //Display vorbereiten
  u8g2.begin();
  u8g2.clearBuffer();  //Display löschen
  u8g2.setFont(u8g2_font_courB10_tf); //Font (Schriftart) auswählen (Courier 10 pixel hoch) https://github.com/olikraus/u8g2/wiki/fntlistall
  u8g2.drawStr(0,10,"Ultraschall"); //den Text am Display anzeigen, Position, x=0, y=10, angegeben in Pixeln
  u8g2.sendBuffer();    //Übertragen aufs Display
  delay(1000);
}

void loop() {  //Hauptschleife
  // put your main code here, to run repeatedly:
 
  digitalWrite(trigger, LOW); 
  delay(5); 
  digitalWrite(trigger, HIGH); //Ultraschallwelle lossenden
  delay(10); //dauer 10 Millisekunden
  digitalWrite(trigger, LOW); //Ultraschall aus
  dauer = pulseIn(echo, HIGH); //Zeit bis der Schall zurückkommt
  entfernung = (dauer/2) * 0.03432; //Wert multipliziert man mit der Schallgeschwindigkeit in der Einheit Zentimeter/Mikrosekunde --> Entfernung in cm
  if (entfernung >= 500 || entfernung <= 0)  // die zwei senkrechten Zeichen || entsprechen einem 'oder' 
  {
  Serial.println("Kein Messwert"); 
  }
  else 
  {
  Serial.print("Entfernung  "); 
  Serial.print(entfernung); 
  Serial.println(" cm"); 
  }
  delay(1000); 

  u8g2.clearBuffer();  //Display löschen
  u8g2.drawStr(0, 10, "Entfernung"); //den Text am Display anzeigen, Position, x=0, y=10, angegeben in Pixeln
  u8g2.setCursor (20,35); //Cusrsor setzen
  u8g2.print(entfernung);  //Variable anzeigen
  u8g2.setCursor (50,35); //Cusrsor setzen
  u8g2.print("  cm"); 
  u8g2.sendBuffer();    //Übertragen aufs Display, Display updaten
  delay(50);
}
