// Probleme (gelöst)
// 1. EEPROM oder (float x) --> nicht richtig gesetzt (x ist [nan] in der erste iteration,
// aber wenn in terminal ein Grenzwert eingegeben ist, dann funktioniert es)
// 2. Die while-Schleife wiederholt die if-Statement einmal zusätzlich aus
// befor sie beendet wird.
#include <EEPROM.h>
const int SPS_Kanister = 8; // INPUT
const int Absenken = 3; // Led1_Red
const int Ventil = 4; // Led2_Blue
const int Anheben = 5; // Led2_Green
const int SPS_Fertig = 6; // Led2_Red
const int eeAdresse = 0;
float x = 0;
// 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(SPS_Kanister, INPUT_PULLUP);
pinMode(Absenken, OUTPUT);
pinMode(Ventil, OUTPUT);
pinMode(Anheben, OUTPUT);
pinMode(SPS_Fertig, OUTPUT);
EEPROM.get(eeAdresse, x);
}
void loop() {
// put your main code here, to run repeatedly:
// UART Eingabe
if(Serial.available() > 0)
{
float wert = Serial.parseInt();
if(wert > 0 && wert <= 10)
{
x = wert;
EEPROM.put(eeAdresse, x);
Serial.print("Grenzwert aktualisiert auf: ");
Serial.println(x);
clearSerialBuffer();
}
else //*
{
Serial.println("Wertbereich in Sekunden | 0 - 10");
clearSerialBuffer();
}
}
else
{
if(x > 0 || x <= 10)
{
//Serial.println(x);
}
else // nur wenn am Anfang keine Grenzwert gibt (x = nan)
{
x = 2;
EEPROM.put(eeAdresse, x);
Serial.print("Grenzwert aktualisiert auf: ");
Serial.println(x);
clearSerialBuffer()
}
}
while(digitalRead(SPS_Kanister) == LOW) // HIGH...
{
digitalWrite(Absenken, HIGH);
delay(2000);
digitalWrite(Absenken, LOW);
digitalWrite(Ventil, HIGH);
delay(x * 1000); // Umrechnung in Millisekunden
digitalWrite(Ventil, LOW);
digitalWrite(Anheben, HIGH);
delay(2000);
digitalWrite(Anheben, LOW);
digitalWrite(SPS_Fertig, HIGH);
while(digitalRead(SPS_Kanister) == LOW); // ...wartet bis die SPS den Eingang an Pin 8 wieder auf HIGH setzt.
delay(250); // 11111111-01010101001101-00000000
digitalWrite(SPS_Fertig, LOW); // zurucksetzen
}
}
//Fertig Blue