Ich habe mir überlegt den UNO noch um eine weitere Funktion zu erweitern.
Beim Laden der Batterien entsteht Wasserstoff und Sauerstoff.
In einer gewissen Konzentration kann das zur Explosion führen.
Aus diesem Grund muss der Raum belüftet werden.
Dafür habe ich einen Lüfter instaliert.
Dieser soll folgende Logig verfolgen.
Zustand_1: Wenn Ladestrom erreicht: Dann Lüfter in Dauerbetrieb.
Zustand_2: Wenn Ladestrom nicht erreicht: Dann soll der Lüfter alle 4,8h 10min laufen.
Ich habe den Code entsprechend erweitert.
Mit einer niedrigen Time Line funktioniert auch alles.
Sobald ich aber die tatsächlichen Werte hinterlege geht in Zustand_2 die Test LED nicht mehr aus.
const int inputPin = A0;
const int relai = 6;
const int relai_2 = 7;
int smoothWert = 0;
int meineEinZeit=60000;
int meineAusZeit=6000; //1728000;
int relai_2Status = LOW;
unsigned long LED_timestore; // Variable Speicher für Systemzeit.
enum {aus, ein};
int val;
bool pause=aus;
unsigned long lastmillis = 0;
const unsigned long pausezeit = 600000;
void setup ()
{
Serial.begin (115200);
Serial.println (F ("Start..."));
pinMode (relai, OUTPUT);
digitalWrite (relai, aus);
pinMode (relai_2, OUTPUT);
}
void loop()
{
Pumpe();
Luefter();
}
void Pumpe()
{
val=analogRead(inputPin);
smoothWert = 0.7 * smoothWert + 0.3 * val;
if (smoothWert > 520)
{
if (pause == aus)
{
sermon(1);
digitalWrite (relai, ein);
lastmillis = millis();
pause = ein;
}
}
else
{
if (digitalRead (relai) == ein)
{
sermon(2);
digitalWrite (relai, aus);
lastmillis = millis();
pause = ein;
}
}
if ((millis() - lastmillis > pausezeit) && (pause == ein))
{
sermon(3);
if (digitalRead (relai) == ein)
{
sermon(4);
digitalWrite (relai, aus);
lastmillis = millis();
}
else
{
Serial.println (F ("Gebe pause frei"));
sermon(5);
pause = aus;
}
}
delay (1000);
}
void sermon(const int nummer)
{
Serial.print (F ("Schalte PIN an Nummer "));
Serial.print (nummer);
Serial.print (F ("\tAnalogwert ist: "));
Serial.print (val);
Serial.print (F ("\tSmoothwert ist: "));
Serial.print (smoothWert);
Serial.print (F ("\tLastmillis ist: "));
Serial.println (lastmillis);
}
void Luefter()
{
if (smoothWert > 520) {
digitalWrite (relai_2, HIGH);
}
else
{
if (relai_2Status == LOW)
{
if (millis() - LED_timestore> meineEinZeit ) {
digitalWrite(relai_2, HIGH);
LED_timestore = millis();
relai_2Status = HIGH;
}
}
else
{
if (millis() - LED_timestore> meineAusZeit) {
digitalWrite(relai_2, LOW);
relai_2Status = LOW;
}
}
}
}