#define Trinkwasser A0
#include <Wire.h> //fuer I2C Kommunikation
#include <Adafruit_GFX.h> //fuer OLED
#include <Adafruit_SSD1306.h> //fuer OLED
#define OLED_ADDRESS 0x3C // I2C-Adresse des Displays 0x3C, 0x3D, .... (siehe Datenblatt)
#define OLED_RESET 4 // Reset pin
#define SCREEN_WIDTH 128 // OLED Display Breite in Pixel
#define SCREEN_HEIGHT 64 // OLED Display Hoehe in Pixel
#define VOLUME 195 //Volumen des Wassertanks bei 100% Füllstand
int var1;
int varo;
int levelpercent;
int volumeact;
int lefty;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup()
{
Serial.begin(9600);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Endlosschleife
}
}
void loop()
{
var1 = analogRead(Trinkwasser);
levelpercent = map(var1, 0, 1023, 0, 100);//Umrechnung analogRead Wert in % Wert muss an Tanksondeangepasst werden
float volumeact = ((VOLUME / 100.0) * levelpercent);//Berechnung Füllstand in Liter
Serial.print("Wassertank ");
Serial.print(levelpercent);
Serial.println(" %");
Serial.print (volumeact);
Serial.println (" Liter");
Serial.println(var1);
display.clearDisplay(); // Clear display buffer
//Ueberschrift
display.setTextSize(2); // Schriftgroesse
display.setTextColor(WHITE); // Textfarbe
display.setCursor(0, 0); // obere linke Ecke
display.print("Wassertank");
//Fuellstand in Prozent
display.setTextSize(2); // Schriftgroesse
display.setTextColor(WHITE); // Textfarbe
display.setCursor(50, 24); // obere linke Ecke
display.print(levelpercent);
display.print(" %");
//Fuellstand in Litern
display.setTextSize(2);
display.setCursor(40, 48);
display.print(volumeact);
display.print("L");
//Balkenanzeige
levelpercent = constrain(levelpercent, 0, 100); //um nur Werte zwischen 0 und 100 zu erhalten
lefty = map(levelpercent, 0, 100, 63, 16); //Hoehe des Balkens ermitteln
//aeusserer Rahmen zeichnen
display.drawRect(0, 16, 32, 48, WHITE);
//Balken zeichnen
display.fillRect(0, lefty, 32, 48, WHITE);
//Display anzeigen
display.display();
delay(1000);
}