#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // display display width, in pixels
#define SCREEN_HEIGHT 64 // display display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define display_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, display_RESET);
//Variablen
float vorherigeZeit;
float oeltemp;
float oeldruckmpa; //Oeldruck in MPa
float oeldruckbar; //Oeldruck in bar
float oeldruckbaralt; //Oeldruck aus dem vorigen Programmzyklus
char secline;
float adcoel; //Ergebnis des Oeldruck ADC (0-1023)
float voel; //Ausgangsspannung Oeldrucksensor (0-4,5V sensorbedingt)
int atemp; //Aussentemperatur
int atempalt; //Aussentemperatur aus dem vorigen Programmzyklus
unsigned long previousMillis=0;
int M1; //Merker damit A-Temp bei jedem Aufruf des zugehörigen Else Zweigs zunächst einmal auf dem Display ausgegeben wird und danach nur bei Änderung der Messgröße auf dem Display aktualisiert.
void setup()
{
//Serielle Verbindung konfigurieren
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(200);
display.display();
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0, 50);
display.println("TEST 123"); //Textzeile ausgeben
display.display();
delay(2000);
}
void loop()
{
//Display einstellen
display.display();
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 10);
//Oeldruck
adcoel=analogRead(1); //ADC A1 einlesen und Wert der Variablen "adcoel" zuweisen
voel=(adcoel/1023)*5; //ADC Wert in Spannung umrechnen und Wert der Variable "voel" zuweisen
oeldruckmpa=(((voel/5)-0.1)/1.6); //Oeldruck in MPa berechnen und der Variable "oeldruckmpa" zuweisen
oeldruckbar=oeldruckmpa*10; //Oeldruck in bar umrechnen und der Variablen "oeldruckbar" zuweisen
if (oeldruckbar<(oeldruckbaralt-0.1) || oeldruckbar>(oeldruckbaralt+0.1)) { //if-else damit das Display nur neu beschrieben wird, wenn der Wert um mehr als 0,1 bar gestiegen oder gesunken ist.
//Display einstellen
display.display();
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0); //Cursor auf Stelle 1, Zeile 1 setzen
display.println("Oeldruck: ");
if(oeldruckbar>=0.1)display.println(oeldruckbar,1);
if(oeldruckbar<0.1)display.println(" 0");
display.println(" bar");
oeldruckbaralt=oeldruckbar; //Merker Variable für alten Druckwert
}
else {
}
//Roll-over damit die zweite Displayzeile zyklisch zwischen A-Temp und Oeltemp wechselt
if ((unsigned long)(millis() - previousMillis) >= 10000){
//Oeltemperatur
//oeltemp=9; //Platzhalter
//Umwandlung ADC zu Temperatur fehlt ggf. noch
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,50);
if(oeltemp<10)display.println("Oeltemp: ");
if(oeltemp>=10)display.println("Oeltemp: ");
display.println(int(oeltemp));
display.println(" ");
display.println((char)223);
display.println("C "); //Leerzeichen, damit die alten Zeile im Display vollständig überschrieben wird. Schlechter Stil ;)
M1=0;
if ((unsigned long)(millis() - previousMillis) >= 20000){
previousMillis=millis();
M1=0;
}
else {
}
}
}