• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Powtarzanie co X godzin
#11
Dziękuję za pomoc przedmówcom, działa. W prawdzie musiałem wypatroszyć chyba wszystko i napisać od nowa w miarę moich umiejętności żeby to oflagować. Przy okazji troszkę posprzątałem. Program bardzo prosty, zrobiony na if-ach. Czy ktoś z Was widzi po kodzie jakieś zagrożenia które są dla niego oczywiste, a których ja nie dostrzegam? Może macie jakieś sugestie aby coś zrobić inaczej? W pierwowzorze autor używał zmiennych chwilowych i w każdej sekcji najpierw porównywał czy ostatnio zapamiętany parametr (np. temperatura) różni się od obecnego, jeśli nie to przeskakiwał część wykonawczą kodu do następnej sekcji. Czy uważacie że w tak krótkim kodzie ma to sens? Z góry dziękuję.
Kod:
void loop()
{
  ds.doConversion();
  rtc.begin();
  DateTime now = rtc.now();
  currentTime = (60 * int(now.hour()) + int(now.minute()));

  hum1 = dht_1.readHumidity();
  temp1 = dht_1.readTemperature();
  hum2 = dht_2.readHumidity();
  temp2 = ds.getTempC();

  glightVal = digitalRead(relayGrowlight);
  wlightVal = digitalRead(relayWhitelight);
  heatVal = digitalRead(relayHeat);
  fanVal = digitalRead(relayFan);
  mistVal = digitalRead(relayMist);
  waterVal = digitalRead(relayWater);


  dayString = getDayOfWeek(now.dayOfWeek());
  dateString = String(now.date()) + "/" + String(now.month()) + "/" + (String(now.year())).substring(2) + " "; //use substring to extract last two digits of the year (to save space)

    if (now.minute() < 10) {
        timeString = String(now.hour()) + ":0" + String(now.minute());
    }
    else {
        timeString = String(now.hour()) + ":" + String(now.minute());
    }
    if (temp2 < tempMin) {
        tempState = "Low temperature ";
            if (flag_relayHeat == false) {
                flag_relayHeat =! flag_relayHeat;   
            }
    }
    else if (temp2 >= tempMax) {
        tempState = "High temperature";
            if (flag_relayHeat == true) {
                flag_relayHeat =! flag_relayHeat;
            }
    }
    else {
        tempState = "Temperature OK  ";
    }
        if (tempState == "Temperature OK  ") {
            mylcd.Set_Text_colour(GREEN);
        }
        else {
            mylcd.Set_Text_colour(RED);
        }
    mylcd.Print_String(tempState,195, 190);
 

    if (hum1 < humMin) {
        humState = "Low humidity ";
    }

    else if (hum1 >= humMax) {
        humState = "High humidity";
    }

    else {
        humState = "Humidity OK  ";
    }

    if (humState == "Humidity OK  ") {
        mylcd.Set_Text_colour(GREEN);
    }
    else {
        mylcd.Set_Text_colour(RED);
    }
    mylcd.Print_String(humState,195, 210);

    if (wlightOn <= currentTime && currentTime < wlightOff) {
        flag_relayWhite = true;
    }

    else if (wlightOn > currentTime || wlightOff <= currentTime) {
        flag_relayWhite = false;
    }

    if (glightOn <= currentTime && currentTime < glightOff) {
        flag_relayGrow = true;
    }

    else if (glightOn > currentTime || glightOff <= currentTime) {
        flag_relayGrow = false;   
    }

    if (humState == "Low humidity ") {
        if (flag_relayFan == true) {
            flag_relayFan =! flag_relayFan;
        }
    }
    else if (humState == "High humidity") {
        if (flag_relayFan == false) {
            flag_relayFan =! flag_relayFan;
        }
    }
    if ( now.hour () == 6 || now.hour () == 16) {
        flag_relayMist = true;
    }
    else {
        flag_relayMist = false;
    }
    if ( now.hour () == 16 && now.minute () == 22 && now.second ()== 20) {
        flag_relayWater = true;
    }
    else {
        flag_relayWater = false;
    }
digitalWrite(relayWhitelight, flag_relayWhite);
digitalWrite(relayGrowlight, flag_relayGrow);
digitalWrite(relayHeat, flag_relayHeat);
digitalWrite(relayFan, flag_relayFan);
digitalWrite(relayMist, flag_relayMist);
digitalWrite(relayWater,flag_relayWater);


delay(1000);

}

void setRTCTime()
{
  DateTime dt(2020, 11, 28, 19, 0, 0, 6);
  rtc.setDateTime(dt);
}

String getDayOfWeek(int i)
{
  switch (i)
  {
    case 1: return "Poniedzialek"; break;
    case 2: return "Wtorek"; break;
    case 3: return "Sroda"; break;
    case 4: return "Czwartek"; break;
    case 5: return "Piatek"; break;
    case 6: return "Sobota"; break;
    case 7: return "Niedziela"; break;
    default: return "Poniedzialek"; break;
  }
}

String relayState(int x)
{
  switch (x)
  {
    case true: return "ON "; break;
    case false: return "OFF" ; break;
    default: return "ON "; break;
  }
}
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości