#include <Wire.h>        // Laden der notwendigen Bibliothek
#include <SPI.h>
#include <Ethernet.h>
#include <LiquidCrystal_I2C.h> // Vorher hinzugefuegte LiquidCrystal_I2C Bibliothek hochladen
LiquidCrystal_I2C lcd(0x27, 20, 4);  //Hier wird das Display benannt (Adresse/Zeichen pro Zeile/Anzahl Zeilen)




const int echoPin = 2;
const int trigPin = 3;
long duration;
int distance;
int full=0;
int liter=0;

byte mac[] = {
 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  // MAC Adresse des Arduino Boards  !WICHTIG! MAC Adresse darf nur einmal im Heimnetz vorkommen

byte ip[] = {
 192, 168, 178, 90};      // IP Adresse des Arduino Boards  !WICHTIG! IP Adresse muss manuell im Netzwerk vergeben werden, i.d.R. 192.168.x.xxx 

byte gateway[] = {
 192, 168,178, 1 };       // Gateway Fritzbox Standardgateway
byte subnet[] = {
 255, 255, 255, 0 };      // Subnet Maske (optional)


EthernetServer server(80);    // Port Einstellung (Standard für HTML : 80)


void setup() {

Wire.begin();       // I2C als Master-BUS
    Ethernet.begin(mac, ip);    // Ethernet initialisieren
    server.begin();     // Auf Clients warten
    
lcd.init(); //Im Setup wird der LCD gestartet
lcd.backlight(); //Hintergrundbeleuchtung einschalten (0 schaltet die Beleuchtung aus).

pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
full= map(distance,90, 19, 0, 100); // Umrechnung der cm  in %
liter=map(full,0,100,0,210);        //Umrechung von % in Liter

 delay(500);
// Zum testenim seriellen Monitor
Serial.print("Distance: ");
Serial.println(distance);
Serial.println(full);
Serial.println(liter);

// LCD Anfang

lcd.setCursor(0,0); //Text soll beim ersten Zeichen in der ersten Reihe beginnen..
lcd.print("FUELLSTAND ZISTERNE"); //In der ersten Zeile soll der Text „Test Zeile 1“ angezeigt werden
lcd.setCursor(0,1); //Genauso geht es bei den weiteren drei Zeilen weiter
lcd.print("     ");
lcd.print(full);
lcd.print(" ");
lcd.print("%");
lcd.setCursor(0,2);
lcd.print("     ");
lcd.print(liter);
lcd.print(" ");
lcd.print("Ltr.");
lcd.setCursor(0,3); // Zeile 4 ist noch frei
lcd.print(" ");
lcd.print("Verbrauch");
lcd.print("  ");
lcd.print("90");
lcd.print(" ");
lcd.print("Ltr.");

//  LCD Ende

// SERVER ANFANG
   EthernetClient client = server.available(); //Prüfen, ob Client Seite aufruft                                             
      if (client) {     // Seitenaufruf durch User                                                                      
// Ausgabe in HTML
server.print("HTTP/1.0 200 OK\r\nServer: arduino\r\nContent-Type: text/html\r\n\r\n");
server.print("<HTML><HEAD><TITLE>");
server.print("REGENWASSER");
server.print("</TITLE>");
server.print("</HEAD><BODY>");
server.print("<center><font color='green'  size=6><b><u>ZISTERNE</u></b></font>");
server.print("<br>");
server.print("<br>");
server.print("<center><font size=5><b>Fuellstand &nbsp; &nbsp;&nbsp; &nbsp;<b>  ");
server.print("<br>");
server.print("<font color='blue'>");
server.print((full));         // Ausgabe in %
server.print("</font>");                                                               
server.print("<font size=5> &nbsp; % </font");
server.print("<br>");
server.print("<center><font size=5><b>Fuellstand &nbsp;  &nbsp;  &nbsp; </font>");
server.print("<br>");
server.print("<font color='blue'>");
server.print(liter);           // Ausgabe in Lieter 
server.print("</font>");                                                          
server.print("<font size=5>  &nbsp; Ltr.</font");
server.print("<br>");
server.print("<center><font size=5><b>Verbrauch &nbsp;  &nbsp;  &nbsp; </font>");
server.print("<br>");
server.print("<font color='red'>");
server.print("90");           // Ausgabe in Lieter 
server.print("</font>");                                                          
server.print("<font size=5>  &nbsp; Ltr.</font");
server.print("<br>");
delay(1000);
  client.stop();// Verbindung mit dem Client trennen 

}
}