#include <U8g2lib.h>
// Konfiguration des Displays
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
// Pins für die Sensoren
#define PRESSURE_SENSOR_PIN A0 // Drucksensor an A0
#define TEMPERATURE_SENSOR_PIN A1 // Temperatursensor an A1
// Funktion zur Normalisierung des Drucksensorwertes
float normalisePressureData(int sensorValue) {
// Umwandlung des gelesenen Wertes in Spannung
float voltage = sensorValue * (5.0 / 1023.0);
// Berechnung der Steigung (m)
float slope = 329.0 / 5.0; // Steigung der Geraden zwischen 0V und 5V
// Berechnung des Drucks in kPa
float pressure_kPa = slope * voltage - 6; // y-Achsenabschnitt ist -6 kPa
// Rückgabe des Drucks in kPa
return pressure_kPa;
}
// Funktion zur Berechnung des Öltemperaturwertes
int calculateOilTemperature(int sensorValue) {
// Umrechnung des Sensorwerts in die Temperatur
int temperature = map(sensorValue, 0, 410, -50, 150);
return temperature;
}
// Setup-Funktion
void setup() {
u8g2.begin();
}
// Loop-Funktion
void loop() {
u8g2.firstPage();
do {
// Setze Schrift und Modus
u8g2.setFontMode(1);
u8g2.setBitmapMode(1);
u8g2.setFont(u8g2_font_6x10_tr);
// Zeichne Texte und Linien für das Layout
u8g2.drawStr(16, 10, "Boost");
u8g2.drawLine(64, 0, 64, 62);
u8g2.drawStr(43, 30, "kPa");
u8g2.drawStr(88, 11, "Oil");
u8g2.setFont(u8g2_font_6x12_tr);
u8g2.drawStr(116, 30, "C");
u8g2.drawEllipse(113, 22, 1, 2);
u8g2.drawFrame(67, 41, 60, 11);
u8g2.drawFrame(1, 41, 60, 11);
// Ladedruckwert auslesen und anzeigen
int pressureSensorValue = analogRead(PRESSURE_SENSOR_PIN);
float pressure_kPa = normalisePressureData(pressureSensorValue);
char pressureStr[10];
int intPart = (int)pressure_kPa; // Ganzzahliger Teil
int decPart = abs((int)((pressure_kPa - intPart) * 10)); // Dezimalteil
sprintf(pressureStr, "%d.%d", intPart, decPart); // Formatierung des Strings
u8g2.drawStr(16, 30, pressureStr); // Zeichne den Ladedruckwert
// Öltemperatur auslesen und anzeigen
int temperatureSensorValue = analogRead(TEMPERATURE_SENSOR_PIN);
int temperature = calculateOilTemperature(temperatureSensorValue);
char temperatureStr[10];
sprintf(temperatureStr, "%d", temperature); // Formatierung des Strings für die Temperatur
u8g2.drawStr(83, 30, temperatureStr); // Zeichne den Öltemperaturwert
// Ladedruck in Balkenform anzeigen
int pressureBarWidth = max(0, min((int)pressure_kPa, 300)) * 58 / 300; // Skaliere auf den maximalen Balkenbereich
u8g2.drawBox(2, 42, pressureBarWidth, 9);
// Öltemperatur in Balkenform anzeigen, Bereich begrenzen
int temperatureBarWidth;
if (temperature < 60) {
temperatureBarWidth = 0; // Unter 60°C wird die Balkenbreite auf 0 gesetzt
} else {
temperatureBarWidth = map(temperature, 60, 150, 0, 58); // Temperatur in Pixel umrechnen
}
u8g2.drawBox(68, 42, temperatureBarWidth, 9);
// Weitere Elemente zeichnen
u8g2.setFont(u8g2_font_4x6_tr);
u8g2.drawStr(57, 61, "2");
u8g2.drawStr(0, 61, "0");
u8g2.drawStr(92, 61, "90");
} while ( u8g2.nextPage() );
delay(100); // Verzögerung für die Aktualisierungsrate
}