SIM800L i NANO czujnik zalania. Jak odliczyć czas 30 dni? - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: SIM800L i NANO czujnik zalania. Jak odliczyć czas 30 dni? (/watek-sim800l-i-nano-czujnik-zalania-jak-odliczy%C4%87-czas-30-dni) |
SIM800L i NANO czujnik zalania. Jak odliczyć czas 30 dni? - OMK - 28-02-2020 Witam. Mam zrobiony układ alarmujący sms-em pojawienie się wody w pomieszczeniu. Mam kartę PLAY za 5 zł na rok jest tylko warunek że trzeba zadzwonić lub wysłać smsa choć jednego w miesiącu. Nie wiem jak to rozwiązać aby wysłał smsa testowego raz w miesiącu bo jak wystąpi zalanie lub jak układ startuje to już mam. Nie chciałbym dodawać jakiegoś układu czasowego. Pozdrawiam wszystkich i czekam na pomoc. A znalazłem coś takiego ale nie mam pojęcia jak można to przerobić aby nie ustawiało czasu w 1307 tylko właśnie odliczało i wysyłało smsa. #include <Sim800l.h> #include <SoftwareSerial.h> //is necesary for the library!! Sim800l Sim800l; //to declare the library #include <Wire.h> #include "RTClib.h" RTC_DS1307 rtc; char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; int day,month,year,minute,second,hour; byte decToBcd(byte val) { return ( (val/10*16) + (val%10) ); } // Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val) { return ( (val/16*10) + (val%16) ); } void setup(){ Serial.begin(9600); // only for debug the results . Sim800l.begin(); // initializate the library. // the parameter to send is UTC of your country Sim800l.updateRtc(); // if (! rtc.begin()) { Serial.println("Couldn't find RTC"); while (1); } } void loop(){ Sim800l.RTCtime(&day,&month,&year,&hour,&minute,&second); //at this moment the variables have the real time. // Serial.print(day); // Serial.print('/'); // Serial.print(month); // Serial.print('/'); // Serial.print(year); // Serial.print(' '); // Serial.print(hour); // Serial.print(':'); // Serial.print(minute); // Serial.print(':'); // Serial.print(second); // Serial.println(); byte monthday=day; Wire.beginTransmission(0x68); Wire.write(0x00); //stop Oscillator Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(decToBcd(day)); Wire.write(decToBcd(monthday)); Wire.write(decToBcd(month)); Wire.write(decToBcd(year)); Wire.write(0x00); //start Wire.endTransmission(); DateTime now = rtc.now(); Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC); Serial.print(" ("); Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); Serial.print(") "); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); } ========================================================================= A to program który wysyła smsa o zalaniu: : #include <BareBoneSim800.h> BareBoneSim800 sim800; // //BareBoneSim800 sim800("your APN"); //needed for gprs funtionality int koniec = 0; void setup() { Serial.begin(9600); sim800.begin(); while(!Serial); pinMode(5, INPUT); Serial.println("Test GSM modul SMS "); delay(8000); Serial.println("Should be ready by now"); bool deviceAttached = sim800.isAttached(); if (deviceAttached) Serial.println("Device is Attached"); else Serial.println("Not Attached"); const char* number = "+48xxxxxxxxx"; // char* message = "UWAGA!!! WODA!!! w lazience !!!!."; char* message2 = "GSM dziala poprawnie. SMS testowy"; delay(2000); bool messageSent = sim800.sendSMS(number, message2); if(messageSent) Serial.println("Message Sent"); else Serial.println("Not Sent, Something happened"); } void loop() { if ((digitalRead(5) == LOW)&&(koniec == 0)) { //Jeśli sygnał z czujnika wody bool messageSent = sim800.sendSMS("+48xxxxxxxxx","UWAGA!!! WODA w lazience. Szybko sprawdz."); // bool messageSent = sim800.sendSMS(number, message2); if((messageSent)&&(koniec==0)) koniec = 1; else Serial.println("Not Sent, Something happened"); } if (digitalRead(5) == HIGH) { koniec = 0; } delay(8000); } RE: SIM800L i NANO czujnik zalania. Jak odliczyć czas 30 dni? - Agregacik - 28-02-2020 A na millis() tego nie zrobisz. Jak startuje system to masz zrobione. Od tego momentu odlicz potrzebny czas i gotowe. Licznik millis() przekręca się raz na około 2 miesiące więc nie powinno być problemu. Nawet jak ulega przekręceniu to i tak matematyka odliczania czasu działa poprawnie. Mając zegar na pokładzie to już "igraszka" wysłać SMSa co miesiąc. if (dzień == 1) // wysyłasz SMSa pierwszego dnia miesiąca { wyślij SMS o treści } RE: SIM800L i NANO czujnik zalania. Jak odliczyć czas 30 dni? - MERASerwis - 28-02-2020 (28-02-2020, 09:29)Agregacik napisał(a): if (dzień == 1) // wysyłasz SMSa pierwszego dnia miesiącaW ten sposób, pierwszego każdego miesiąca, przez cały dzień będą wysyłane SMS. (28-02-2020, 00:15)OMK napisał(a): Nie wiem jak to rozwiązać aby wysłał smsa testowego raz w miesiącuustaw alarm w zegarze. RE: SIM800L i NANO czujnik zalania. Jak odliczyć czas 30 dni? - Agregacik - 28-02-2020 (28-02-2020, 10:06)MERASerwis napisał(a):No tak masz rację, można dodać flagę(28-02-2020, 09:29)Agregacik napisał(a): if (dzień == 1) // wysyłasz SMSa pierwszego dnia miesiącaW ten sposób, pierwszego każdego miesiąca, przez cały dzień będą wysyłane SMS. if(dzień == 1 && flaga ==0) { wyślij SMS o treści flaga =1; } if (flaga ==1 && dzień != 1) { flaga = 0; } RE: SIM800L i NANO czujnik zalania. Jak odliczyć czas 30 dni? - MERASerwis - 28-02-2020 (28-02-2020, 11:32)Agregacik napisał(a):A gdy z jakiegoś powodu przez cały dzień urządzenie nie będzie zasilane?(28-02-2020, 10:06)MERASerwis napisał(a):No tak masz rację, można dodać flagę(28-02-2020, 09:29)Agregacik napisał(a): if (dzień == 1) // wysyłasz SMSa pierwszego dnia miesiącaW ten sposób, pierwszego każdego miesiąca, przez cały dzień będą wysyłane SMS. W dobrze napisanym sofcie SMS powinien być wysłany gdy urządzenie odzyska zasilanie mimo, że dany dzień już minął. Proste dla człowieka działania są trudne do opisania w algorytmie (dlatego "gwindow$" dział a raczej nie dział, jak działa czyli nie działa). To zadanie da się dość dobrze zrealizować ale to nie takie "wgranie szkicu". Wymaga "trochę" czasu na pisanie algorytmu ("Arduinowcy" nie dopuszczają tej myśli), wdrożenie go, testy. Dlatego dobry program nie kosztuje kilkaset złotych. RE: SIM800L i NANO czujnik zalania. Jak odliczyć czas 30 dni? - Agregacik - 28-02-2020 Pisałem wcześniej o zrealizowaniu tego na millis() i będzie OK. Jak wstaje system to wysyła SMSa i po np 20 dniach kolejnego. Nie trzeba zegarka i kombinacji. RE: SIM800L i NANO czujnik zalania. Jak odliczyć czas 30 dni? - MERASerwis - 28-02-2020 (28-02-2020, 16:20)Agregacik napisał(a): Pisałem wcześniej o zrealizowaniu tego na millis() i będzie OK. Jak wstaje system to wysyła SMSa i po np 20 dniach kolejnego. Nie trzeba zegarka i kombinacji.Polecanie millis to jak polecanie Trabanta jako panaceum na problemy z transportem. Millis ma jedną zaletę - proste w użyciu, poza tym same wady, lista długa więc nie będę wypisywał co zresztą nie raz robiłem. RE: SIM800L i NANO czujnik zalania. Jak odliczyć czas 30 dni? - Agregacik - 28-02-2020 Hm w tym przypadku nie przychodzi mi nic do głowy co by mogło być złe w jego użyciu. Po starcie wysyłany jest SMS , po czasie odliczonym przez millis() wysyłany jest ekstra SMS aby "zadowolić operatora", aby nie wyłączył numerku. Pozostałe SMSy przychodzą w razie potrzeby. Nie jest wymagane dokładne odliczanie czasu. Podaj choć jedną wadę tego rozwiązania w tym przypadku. RE: SIM800L i NANO czujnik zalania. Jak odliczyć czas 30 dni? - kaczakat - 28-02-2020 Może Ravi Pujar pomoże https://www.youtube.com/watch?v=UriCOG7uLs4. Wystarczy wysłać SMS, zapisać czas wysłania w EEPROM, co jakiś czas sprawdzić aktualny czas, porównać z zapisanym, jak upłynie miesiąc powtórzyć operację. Widzę, że znalazłeś to też na elektrodzie, dobrze, że spojrzałem na nik, bo bym Ci podlinkował Twojego posta. RE: SIM800L i NANO czujnik zalania. Jak odliczyć czas 30 dni? - OMK - 28-02-2020 Podoba mi się pomysł z millis. Jak nie będzie zasilania to i tak po uruchomieniu wyśle smsa. A mam jeszcze pytanie czy da się tu wykorzystać TIMERS czy piszę o czymś co nie mam pojęcia. Mam prośbę oczyści mi ktoś i uprości "mój" program? Będę wdzięczny. A na millis to łyknie taką wartość 2 629 743 830? Bo miesiąc to chyba aż tyle? |