#include <EEPROM.h>
#define pinMessung 3
#define pinLED 4
#define internADW A0 //interner AD-Wandler
#define luxMIN 0
#define luxMAX 20000
#define adcMax 1023
#define eeAdresse 0
float adcWert = 0;
float luxWert = 0;
float luxTMP = 0; // Temporary
float luxAVG = 0;
int g; // Grenzwert
// Source: https://forum.arduino.cc/t/clearing-serial-buffer-solved/227853
void clearSerialBuffer() {
while (Serial.available() > 0) {
Serial.read(); // Read and discard each byte
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(pinMessung, INPUT_PULLUP);
//pinMode(internADW, INPUT);
pinMode(pinLED, OUTPUT);
EEPROM.get(eeAdresse, g);
// nur fuer den allerersten Durchlauf
if (g >= 0 && g <= 20000){}
else
{
g = 10001;
EEPROM.put(eeAdresse, g);
}
}
void loop() {
// put your main code here, to run repeatedly:
if(digitalRead(pinMessung) == LOW)
{
for(int i = 0; i < 10; i++)
{
adcWert = analogRead(internADW);
luxWert = luxMAX / adcMax * adcWert;
luxTMP = luxTMP + luxWert;
delay(500);
}
luxAVG = luxTMP / 10;
luxTMP = 0;
if(luxAVG > g)
{
digitalWrite(pinLED, HIGH);
Serial.print("Mittelwert: ");
Serial.println(luxAVG);
Serial.print("Grenzwert ueberschriettet: ");
Serial.println(g);
}
else
{
digitalWrite(pinLED, LOW);
Serial.print("Mittelwert: ");
Serial.println(luxAVG);
Serial.print("Grenzwert: ");
Serial.println(g);
}
}
else
{
digitalWrite(pinLED, LOW);
}
if (Serial.available() > 0)
{
int wert = Serial.parseInt();
if(wert >= 0 && wert <= 20000)
{
g = wert;
EEPROM.put(eeAdresse, g);
Serial.print("Grenzwert aktualisiert auf: ");
Serial.println(g);
clearSerialBuffer();
}
else
{
Serial.println("Grenzwertbereich muss von 0 bis 20000 sein!");
clearSerialBuffer();
}
}
}