Új hozzászólás Aktív témák

  • távcsőves

    senior tag

    válasz Tomi8822 #7567 üzenetére

    Remélem ez már elég segítség lesz. (nagyon belezavarodtál) Ha nem világos valami, kérdezz, de igyekeztem rendesen elmagyarázni a vázlatban.

    // Megadod a szükséges könyvtárokat

    #include <RTClib.h> //Ez kell az óramodul hardwerének kezeléséhez
    #include <Wire.h> //Ez a könyvtár kezeli az I2C buszt, amihez az óramodulod kapcsolodik, A4 (SDA) és A5 (SCL) pin az Uno-n.

    RTC_DS1307 RTC;

    void setup() {
    // Inditod az I2C buszt
    Wire.begin();
    // (3-as számú digitális pint kimenetre állítod) ezt majd töbszörözöd, ahány reléd van
    // és amelyik pinhez kapcsoltad értelemszerűen változtattod a számát
    pinMode(3, OUTPUT);
    }
    void loop() {
    // minden ciklus elején kéred az óramodultól az aktuális időt/dátumot
    DateTime now = RTC.now();

    /*Szerintem érdemes lenne az időt egy egységben kezelned.
    Tehát nem 6óra és 40percben, hanem percben. Ekkor a kapcsolási időket percben adod meg.
    Példa: 6óra = 6*60perc ami, 360 perc, ehhez adod a plusz 40 perced. Az eremény
    pedig 400 perc, ami egyenlő 6óra és 40 percel. A vázlatod alapján ez az első relé bekapcsolási ideje.
    A vázlatodban az első relé kikapcsolási ideje pedig 17óra 40 perc (=1060 perc) ami felírható így is: 1060perc=(17*60)+40
    A másodperceket szerintem teljesen elfelejthetted, nem hiszem, hogy egy akvárium lakói a másodpercekre
    érzékenyek lennének. Meg az évre, meg a hónapra, meg a.... Természetesen fellehet írni órában is az időt, ekkor tört számot kapsz.
    A lényeg, hogy egy egységben kezeld. Almát almával, körtét körtével hasonlíts össze. */

    // Elkészíted a perc változót és a tartalma az aktuális óra és perc, percek számában.
    int perc = (now.hour() * 60) + now.minute();

    /* használod az if else statement a be és kikapcsolási idők ellenőrzésére egy egyszerű érték összehasonlításal.
    tehát, ha az aktuális percek száma nagyobb, mint 400 de kisebb, mint 1060, a relé bekapcsolva, minden más esetben kikapcsolva.

    if ((perc > 400) && (perc < 1060)) {
    digitalWrite(3, HIGH);
    } else {
    digitalWrite(3, LOW);
    }
    */

    // Emberi szemnek értelmesebb formábban pedig így néz ki az if else, ez alapján remélem érthető a müködése egy relére
    if ((perc > (6 * 60) + 40) && (perc < (17 * 60) + 40)) {
    digitalWrite(3, HIGH);
    } else {
    digitalWrite(3, LOW);
    }
    } // És amig neked írtam, addig lekapott a pörkölt, ajánlom, hogy megépítsd az akvárium vezérlőd!! ;)

Új hozzászólás Aktív témák