Korábban szükségem volt egy olyan vezérlésre ami bekapcsol egy lámpát 16:58-kor majd 20:30-kor kikapcsolja azt.Sok tutorialt elolvastam erről a témáról.A legmegfelelőbbnek a Rinky-Dink Electronics oldalán publikált könyvtárat találtam.[LINK]
A modul I2C rendszeren keresztül kommunikál az Arduino-val.
Nekem a lentebb látható kódot sikerült összehoznom.
#include <DS3231.h> DS3231 rtc(SDA, SCL); int rele = 1; //fordított logika void setup() { Serial.begin(115200); rtc.begin(); pinMode(rele, OUTPUT); digitalWrite(rele, HIGH); } void loop() { String ora = rtc.getTimeStr(); //ora stringbe lekerdezem az idot ora,perc,masodpercben int ora_alak = ora.substring(0,2).toInt(); //itt elkezdem darabolni a stringet, itt megkaptam az orat int perc_alak = ora.substring(3,5).toInt();//itt pedig a percet //igya mar konnyebb muveleteket vegezni vele. /*Serial.println(ora_alak); Serial.println(perc_alak); delay (1000);*/ //reggel if (ora_alak == 16 && perc_alak == 11) { digitalWrite(rele, LOW); } if (ora_alak == 20 && perc_alak == 23) { digitalWrite(rele, HIGH); } //reggel //este if (ora_alak == 05 && perc_alak == 31) { digitalWrite(rele, LOW); } if (ora_alak == 06 && perc_alak == 56) { digitalWrite(rele, HIGH); } //este }
Üdv!
Van nekem is egy RTC-s projektem amiben naponta változó ki-be kapcsolási időpontokat kellett megadni.Ott áramszünet után is az esedékes állapotba kellett kerülnie a kimeneteknek.Ezt így oldottam meg:
Az RTC időt és a be-ki kapcsolási időpontokat átszámítottam így:
ido = t.hour + (t.min + t.sec / 60.0 ) / 60.0;
Kapcsolási feltételeknél pedig ilyesmi:
ido >= bekapcsidőpont && ido <= kikapcsidőpont
Így egy esetleges áramszünet után megnézi az RTC idejét,ha nagyobb mint a be vagy kikapcsolási időpont ergo "elhaladt felette az óra" akkor is be vagy kikapcsol amint megkapja a tápot.Lehet akár több órás áramkimaradás is,mivel az átszámításnál benne van az órák és percek száma is.
Gondoltam hasznos lehet valakinek. 🙂
Huuuu, ez nagyon jó ötlet!