#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_WIDTH 128
#define OLED_HEIGHT 64

#define OLED_ADDR  0x3C

Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT);

//Anschluss A0 ist der Temperatursensor
const int tempSensor = A0;
int valueTemp;

//Anschluss A1 ist der Drucksensor
const int pressSensor = A1;
int valuePress;

void setup() {
  // put your setup code here, to run once:
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  Serial.begin(9600);

  //Auslesen von Sensoren
  float t = analogRead(tempSensor);
  float p = analogRead(pressSensor);
}

void loop() {

  //Value ist der Wert des Sensors
  valueTemp = analogRead(tempSensor);
  valuePress = analogRead(pressSensor);
  Serial.println(valueTemp);
  Serial.println(valuePress);
  
  //Widerstand des Temperatursensors in Grad Celsius umrechnen
  float dividedValue = 1/(1/4822.16222557587*log(valueTemp/29150.0)+1/313.15)-273.15;
  //Widerstand des Drucksensors in Grad Celsius umrechnen
  float dividedValue2 = (-21.475+sqrt(477.9276362-1.6432*valuePress))/-0.8216;

  //Wert auf eine Nachkommastelle einstellen 
  char temp[10];
  dtostrf(dividedValue, 4, 1, temp);
  char press[10];
  dtostrf(dividedValue2, 4, 1, press);

  //Interface anzeigen
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(0,0);
  display.println("Temp");
  display.setCursor(0,30);
  display.println("Pres");

  // Temperatur in String umwandeln
  String tempString = String(temp);


  // Berechne die Breite des Temperatur-Strings
  int16_t x1, y1;
  uint16_t w, t;
  display.getTextBounds(tempString, 0, 0, &x1, &y1, &w, &t);
  
  // Setze den Cursor für den Temperaturwert (linksbündig zum Text " C")
  int cursorXTemp = OLED_WIDTH - 15 - w; // 18 Pixel für " C", w für die Breite des Temperatur-Strings

  //Temperaturwert anzeigen
  display.setCursor(cursorXTemp, 0);
  display.println(tempString);

  // Setze den Cursor für " C"
  int cursorXC = OLED_WIDTH - 25;

  // Zeichne " C" an der festen Position
  display.setCursor(cursorXC, 0);
  display.println(" C");



   // Druck in String umwandeln
  String pressString = String(press);


  // Berechne die Breite des Druck-Strings
  display.getTextBounds(pressString, 0, 0, &x1, &y1, &w, &t);
  
  // Setze den Cursor für den Druckwert (linksbündig zum Text " Bar")
  int cursorXPress = OLED_WIDTH - 25 - w; // 18 Pixel für " Bar", w für die Breite des Temperatur-Strings

  //TDruckwert anzeigen
  display.setCursor(cursorXPress, 30);
  display.println(pressString);

  // Setze den Cursor für " Bar"
  int cursorXBar = OLED_WIDTH - 30;

  // Zeichne " Bar" an der festen Position
  display.setCursor(cursorXBar, 35);
  display.println(" Bar");

  display.display();
  display.clearDisplay();
  
  delay(500);
}