#include <Bounce2.h>
#include <SD.h>
byte Pin_CS = 10;
File Messdatei;
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
// The pins for I2C are defined by the Wire-library.
// On an arduino UNO: A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO: 2(SDA), 3(SCL), ...
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//Zeitvariablen
unsigned long SZeit_akt; // (Sensor)für die aktuelle Zeit, letzter Status
unsigned long SZeit_neu; // (Sensor)gerade gelesene Zeit
unsigned long SDatenpause = 250; //nur alle 250ms Sensor Daten aufbereiten
//Encoder implementieren
byte Pin_SW = 8;
Bounce Taster = Bounce();
float TKaltIn = -5;
byte pinTKIn = 14; // Pin A0
const float vt_factor_TKIn = 1.86;
const float offset_TKIn = -30;
float TWarmIn = 111;
byte pinTWIn = 16; //Pin A2
const float vt_factor_TWIn = 1.86;
const float offset_TWIn = -30;
float dTWKIn;
float dTWKOut;
float Spannung = 5.3;
float Strom = 0.99;
float Power;
bool RecStatus = false;
void setup() {
Taster.attach(Pin_SW);
Taster.interval(15); // 15ms zum Entprellen
Serial.begin(9600);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
if (!SD.begin(Pin_CS)) { // Wenn die SD-Karte nicht (!SD.begin) gefunden werden kann, ...
Serial.println("Initialisierung fehlgeschlagen!"); // ... soll eine Fehlermeldung ausgegeben werden. ....
return;
}
Serial.println("Initialisierung abgeschlossen");
SZeit_akt = millis();
}
void loop() {
sensordaten();
Taster_lesen();
datadisplay_Temp();
}
void datadisplay_Temp(void) { //Temperaturdatenanzeige
display.clearDisplay();
/* display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print(F("T_Warm_IN:"));
display.print(TWarmIn);
display.setCursor(0,10);
display.print(F("T_Kalt_IN:"));
display.print(TKaltIn);
display.setCursor(0,20);
display.print(F("dT_WK_IN:"));
display.print(dTWKIn);
display.setCursor(0,30);
display.print(F("U [V]:"));
display.print(Spannung);
display.setCursor(0,40);
display.print(F("A [A]:"));
display.print(Strom);
display.setCursor(0,50);
display.print(F("P [W]:"));
display.print(Power); */
if (RecStatus == true) {
display.fillCircle(124, 3, 3, SSD1306_WHITE);
}
display.display();
}
void sensordaten(void){
float FilterVar = 0.90; // Filterfaktor zur Ermittlung des gleitenden Durchschnitt
SZeit_neu = millis();
if (SZeit_neu - SZeit_akt >= SDatenpause) {
SZeit_akt = SZeit_neu;
// Berechnungen Temperaturdifferenzen und Leistung
dTWKIn = TWarmIn - TKaltIn; // Berechnung des Temperaturunterschied am Eingang
Power = Spannung * Strom; // Berechnung der Leistung
//PT1000er lesen, berechnen, filtern
int sensorvalue = 0;
TKaltIn = (FilterVar*((((analogRead(pinTKIn) * (5.0 / 1023.0)) * 100) / vt_factor_TKIn) + offset_TKIn)) + ((1-FilterVar)*TKaltIn); //ggf. "FilerVar" und "1-FilterVar" tauschen
TWarmIn = (FilterVar*((((analogRead(pinTWIn) * (5.0 / 1023.0)) * 100) / vt_factor_TWIn) + offset_TWIn)) + ((1-FilterVar)*TWarmIn); //ggf. "FilerVar" und "1-FilterVar" tauschen
Messdaten_speichern();
}
}
void Taster_lesen() {
Taster.update();
if (Taster.risingEdge()) {
if (RecStatus == true) {
RecStatus = false;
}
else if(RecStatus == false) {
RecStatus = true;
}
}
}
void Messdaten_speichern(){
if (RecStatus == true){
Messdatei = SD.open("TEG_Daten.raw", FILE_WRITE);
Messdatei.print(TKaltIn); Messdatei.print(" ");
Messdatei.print(TWarmIn); Messdatei.print(" ");
Messdatei.print(dTWKIn); Messdatei.print(" ");
Messdatei.print(Spannung); Messdatei.print(" ");
Messdatei.print(Strom); Messdatei.print(" ");
Messdatei.print(Power); Messdatei.print(" ");
Messdatei.close();
}
}