/**************************************************************************/
/*
Bei einer Ref. Spannung von 4,096 Volt
und einem Messteiler von 3 zu 1 ist die Rechnung
4,096 x 4 = 16,384 / 1024 = 0,016
Ist 0-1023 x 16 / 1000
!! Höchte Messspannung ist 16,384 Volt !! bei 3 zu 1 Teiler
*/
/**************************************************************************/
#include <LiquidCrystal_I2C.h> // LCD Display
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
const byte ANALOG_PIN = A0; // Hier wird der Name vom Messeingang festgelegt
float max31 = 0; // Der Speicher für den ausgelesenen Analogwert vom Messbuchse
float max31alt = 0;
float max32 = 0; // Der Speicher für den ausgelesenen Max-Analogwert vom ADC
float min31 = 0; // Der Speicher für den ausgelesenen Analogwert vom Messbuchse
float min31alt = 1023;
float min32 = 0; // Der Speicher für den ausgelesenen Max-Analogwert vom ADC
float durchschnitt = 0;
unsigned long startzeit = 0;
unsigned long endzeit = 0;
unsigned long Sekundenablauf01 = 0; // Messung erneuern nach eine Sekunde
const unsigned long Pausezeit01 = 1000;
//====================================================================================
void setup(void) {
analogReference(EXTERNAL); // Externe Referenzspannung am AREF 4,096Volt
Serial.begin(9600);
pinMode(ANALOG_PIN, INPUT); // Input vom Messteiler
lcd.begin(20, 4);
lcd.backlight();
lcd.clear();
// Display Maxwert
lcd.setCursor (0, 0);
lcd.print (F("Maximalwert"));
lcd.setCursor (18, 0);
lcd.print (F("V"));
// Display Minwert
lcd.setCursor (0, 1);
lcd.print (F("Minimalwert"));
lcd.setCursor (18, 1);
lcd.print (F("V"));
// Display Durchschnitts Wert
lcd.setCursor (0, 2);
lcd.print (F("Normalwert"));
lcd.setCursor (18, 2);
lcd.print (F("V"));
}
//===================================================================================
void loop(void) {
//--------------------------Zeit für die Durchlaufmessung------------------------------------------------
startzeit = micros();
//-----------------------Nach einer Sekunde neue Messung starten-----------------------------------------
if (millis() - Sekundenablauf01 >= Pausezeit01) {
max32 = ((max31alt * 16) / 1000); // 0-1023 x 0,016
lcd.setCursor (13, 0);
lcd.print (F(" "));
lcd.setCursor (13, 0);
lcd.print (max32);
max31alt = 0;
min32 = ((min31alt * 16) / 1000); // 0-1023 x 0,016
lcd.setCursor (13, 1);
lcd.print (F(" "));
lcd.setCursor (13, 1);
lcd.print (min32);
min31alt = 1023;
lcd.setCursor (13, 2);
lcd.print (F(" "));
lcd.setCursor (13, 2);
durchschnitt = (max32 - min32) / 2;
if (max32 == min32) {
durchschnitt = 0;
}
lcd.print (durchschnitt);
Sekundenablauf01 = millis();
//Serial.println(F("Datenausgabe aufs Display"));
}
// -----------------------------Max- und Minwert messen und Maxwert sichern----------------------
max31 = analogRead (ANALOG_PIN); // Analogen Eingang A0 auslesen
min31 = max31;
if (max31 >= max31alt) {
max31alt = max31;
}
// -----------------------------Minimalwert sichern----------------------------------------------
if (min31 <= min31alt) {
min31alt = min31;
}
// -----------------------------------Laufzeittest----------------------------------------------
endzeit = micros();
//Serial.println(endzeit - startzeit);
}