#include <EEPROM.h>
#define ADCMAX 1023.0
#define TMAX 80.0
#define TMIN -20.0
#define LEDRED 13
int eeAdresse1 = 0; // float grenzwert --> 4 Adressen
int eeAdresse2 = 4; // long interval --> 4 Adressen
int ReadSensor[6] = {A0, A1, A2, A3, A4, A5};
float temp[6];
float ADCWert;
float T;
float grenzwert = 30;//
float hoechsteTemp = -20.0;
bool ifover = false;
unsigned long interval = 500;//
unsigned long previousMillis = 0;
void setup() {
//analogReference(EXTERNAL); (Zusatzaufgabe 3 --> AREF to 3.3V connect with a cable just those two so that (Umax = 3,3))
Serial.begin(9600);
Serial.println("Programm");
pinMode(LEDRED, OUTPUT);
//pinMode(potiSensor, INPUT); //Für analoge Eingänge kein pinMode erforderlich!
EEPROM.get(eeAdresse1, grenzwert);
Serial.print("Grenzwert: ");
Serial.println(grenzwert, 2);
EEPROM.get(eeAdresse2, interval);
Serial.print("Interval: ");
Serial.println(interval);
}
void loop()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis;
ifover = false;
hoechsteTemp = -20.0;
for(int i = 0; i < 6; i++)
{
ADCWert = analogRead(ReadSensor[i]);
T = (TMAX - TMIN)/ ADCMAX * ADCWert + TMIN;
//Zusatzaufgabe 2: Vsensor = 3,3 V statt 5 V -> notwendige Änderung: ADCMAX = 675 = 3,3V/5V*1023
//Die Lösung ist schlecht, weil wir dadurch, dass wir weniger Stufen haben, Genaugikeit verlieren.
//Zusatzaufgabe 3:
//analogReferenz -> Konfiguriert die Referenzspannung, die für analoge Eingabe-Pins genutzt wird (Der maximal Wert der Eingangsspannung).
//Benötigt: analogReferenz(EXTERNAL) -> EXTERNAL: Die Spannung, die auf dem AREF-Pin (nur 0 bis 5 V) angelegt ist, wird als Referenz verwendet.
//AREF muss bei uns 3,3 V. Nun entspricht eine Eingangsspannung von 3,3 V dem ADCMAX = 1023.
temp[i] = T;
if(T >= grenzwert)
{
digitalWrite(LEDRED, HIGH);
ifover = true;
}
}
if(ifover == false)
{
digitalWrite(LEDRED, LOW);
}
for(int i = 0; i < 6; i++)
{
if (temp[i] >= hoechsteTemp) // Vergleicht der höchsten Temperaturen der Stufen
{
hoechsteTemp = temp[i];
}
}
if(Serial.available() > 0) // Ueberprueft den Puffer (UART = (bytes)) auf Werte größer als 0
{
char Char = Serial.read(); // liest das erste Byte aus dem Puffer(buffer)
//Char.trim(); // removes any \r \n whitespace at the end of the String
if (Char == 'M') // 'M'(Char) | "M" (String)
{
Serial.print("Hoechste Temperatur: ");
Serial.println(hoechsteTemp,1);
}
else if (Char == 'G')
{
delay(5); // **SHORT delay to allow buffer filling**
float number = Serial.parseFloat(); // Parst die erste Gleitkommazahl
grenzwert = number; // grenzwert wird geaendert
EEPROM.put(eeAdresse1, grenzwert);
Serial.print("Neuer Grenzwert: ");
Serial.println(number);
}
else if (Char == 'I')
{
delay(5); // **SHORT delay to allow buffer filling**
int number = Serial.parseInt(); // Parst die erste Gleitkommazahl
interval = number; // interval wird geaendert
EEPROM.put(eeAdresse2, interval);
Serial.print("Interval: ");
Serial.println(number);
}
}
else
{
// Serial.println("Keine Eingabe");
}
}
}
/* Sources:
serial.read(): https://www.programmingelectronics.com/serial-read/
parseFloat: https://docs.arduino.cc/language-reference/en/functions/communication/serial/parseFloat/
*/