Hallo zusammen,
habe für meinen Pool eine Steuerung mit einem Arduino Uno gebaut.
Dieser Steuert meine zwei Pumpen und gibt auf einem 4x20 LCD einige Werte aus.
Und genau da liegt jetzt das Problem. Ich kann mir einfach nicht erklären warum der Arduino so reagiert.
Ich lasse mir auf dem Display unter anderem die Filterzeiten der Filterpumpe ausgeben.
Wenn dass Wasser kälter ist reduziere ich zum Stromsparen die Pumpenzeit auf einen gewissen Prozentsatz(50% - 100%);
wenn ich mir diesen Prozentsatz auf dem Display ausgeben lasse beträgt dieser allerdings null
Zugehörige Variablenteil:
int Filterpumpe_start[] = {900, 1600}; // Die Einschaltzeiten für die Filterung (9.00 Uhr, 16.00 Uhr, ...)
int Filterpumpe_stopp[] = {1200, 1900}; // Die Auschschaltzeiten für die Filterung (12.00 Uhr, 19.00 Uhr, ...)
int Filterpumpe_stopp_berechnet[] = {}; // Die berechnete Auschschaltzeiten für die Filterung
float Filterpumpe_halbe_Filterzeit = 18.00; // Unter dieser Temperatur wird nur die halbe Zeit gefiltert
float Filterpumpe_ganze_Filterzeit = 24.00; // Über dieser Temperatur wird die komplette Zeit gefiltert
float Filterpumpe_prozent = 0; // Prozentuale Verkürzung der Filterzeit
float Temperatur_Wasser = 0; // Wassertemperatur
Berechnung des Prozentsatzes inklusive neuer Filterzeit:
void Filterpumpe_neu(){
int Filterpumpe_Variable1 = 0;
float Filterpumpe_aufloesung = 50 / (Filterpumpe_ganze_Filterzeit - Filterpumpe_halbe_Filterzeit);
Filterpumpe_prozent = Filterpumpe_aufloesung * (Temperatur_Wasser - Filterpumpe_halbe_Filterzeit) + 50;
if(Filterpumpe_prozent < 50){
Filterpumpe_prozent = 50.00;
}
if(Filterpumpe_prozent > 100){
Filterpumpe_prozent = 100.00;
}
for(int i = 0; i < sizeof(Filterpumpe_start) / sizeof(Filterpumpe_start[0]); i++){
byte Filterpumpe_stunde_start = Filterpumpe_start[i] / 100;
byte Filterpumpe_minute_start = Filterpumpe_start[i] - Filterpumpe_stunde_start * 100;
byte Filterpumpe_stunde_stopp = Filterpumpe_stopp[i] / 100;
byte Filterpumpe_minute_stopp = Filterpumpe_stopp[i] - Filterpumpe_stunde_stopp * 100;
int Filterpumpe_dauer_vorher_in_min = (Filterpumpe_stunde_stopp - Filterpumpe_stunde_start) * 60 + Filterpumpe_minute_stopp - Filterpumpe_minute_start;
int Filterpumpe_dauer_nachher_in_min = Filterpumpe_dauer_vorher_in_min * Filterpumpe_prozent / 100;
int Filterpumpe_Variable2 = Filterpumpe_stunde_start * 60 + Filterpumpe_minute_start + Filterpumpe_dauer_nachher_in_min;
Filterpumpe_stunde_stopp = Filterpumpe_Variable2 / 60;
Filterpumpe_minute_stopp = Filterpumpe_Variable2 - Filterpumpe_stunde_stopp * 60;
Filterpumpe_stopp_berechnet[i] = Filterpumpe_stunde_stopp *100 + Filterpumpe_minute_stopp;
if(hour() * 100 + minute() >= Filterpumpe_start[i] && hour() * 100 + minute() < Filterpumpe_stopp_berechnet[i]){
Filterpumpe_Variable1 = 100;
}
else{
Filterpumpe_Variable1--;
}
}
if(Filterpumpe_Variable1 > 0){
Filterpumpe_an_auto = 1;
}
else{
Filterpumpe_an_auto = 0;
}
}
Ausgabe der Filterzeit:
lcd.setCursor(0,1);
lcd.print("Filterzeit von-bis");
for(int i = 0; i < sizeof(Filterpumpe_start) / sizeof(Filterpumpe_start[0]); i++){
lcd.setCursor(0,i + 2);
lcd.print(" ");
if(Filterpumpe_start[i] < 1000){
lcd.print("0");
}
lcd.print(Filterpumpe_start[i]);
lcd.print("-");
if(Filterpumpe_stopp_berechnet[i] < 1000){
lcd.print("0");
}
lcd.print(Filterpumpe_stopp_berechnet[i]);
}
lcd.setCursor(0,0);
lcd.print("Reduktion auf ");
lcd.print(Filterpumpe_prozent);
lcd.print("%");
und genau in diesem Block liegt das Problem. Wenn ich
lcd.setCursor(0,0);
lcd.print("Reduktion auf ");
lcd.print(Filterpumpe_prozent);
lcd.print("%");
nach oben setze, also vor lcd.setCursor(0,1) zeigt es mir als Prozent 0.00 an. Klammere ich jetzt
if(Filterpumpe_stopp_berechnet[i] < 1000){
lcd.print("0");
}
lcd.print(Filterpumpe_stopp_berechnet[i]);
aus funktioniert es komischerweise wieder
es ist kein Problem den Programmcode so zu lassen damit er funktioniert, aber ich möchte verstehen warum er die Variable Filterpumpe_prozent auf 0.00 schreibt.
Habt ihr irgendwelche Ideen?
mfg
Skyliiine