Skocz do zawartości

Prośba o pomoc w napisaniu funkcji


Pomocna odpowiedź

(edytowany)

Czujniki RCWL-0516 występują w dwóch postaciach - starej:

image.thumb.png.af599723179fe80d2efb3f8b9b1a759d.png

i nowej (poznajemy ją po osobnym LDO na spodniej stronie):

image.thumb.png.985863be3a7f73854faaeae44327e848.png

 

Ze starą wersją też miałem kłopoty, nowe działają dobrze.

 

 

Edytowano przez jand

Faktycznie, nie zauważyłem, ale mam i te i te.

Ten z osobnym LDO działa jak dotykowy, ten bez sieje fałszywe triggery;))), ale może jest za blisko esp. Co nie zmienia sprawy, że ten bez osobnego LDO(starszy model?) działa lepiej.

(edytowany)

Pewnie juz gdzies liczysz czas wschodu / zachodu, ale gdyby ktos szukal:

#include <sunset.h> //https://github.com/buelowp/sunset
SunSet sun;
struct SUN {
  char calcday;
  unsigned int sunrise;
  unsigned int sunset;
} solarday;

#define LATITUDE 50.0
#define LONGITUDE 20.0
#define DST_OFFSET 0  // localtime with UTC difference in minutes

void setup() {
  Serial.begin(9600);
  solarday.calcday = 0;
  sun.setPosition(LATITUDE, LONGITUDE, DST_OFFSET);
  sun.setTZOffset(DST_OFFSET);
}

void loop() {
    struct timeval tv;
    gettimeofday(&tv, NULL);
    time_t moment = tv.tv_sec;     //time(NULL);
    //tv.tv_usec     microseconds https://pubs.opengroup.org/onlinepubs/007908775/xsh/systime.h.html
    tm* utc_tm = gmtime(&moment);  //https://pl.wikibooks.org/wiki/C/tm
 
      if (utc_tm->tm_year > 121 && utc_tm->tm_mday != solarday.calcday) {
        sun.setCurrentDate(utc_tm->tm_year + 1900, utc_tm->tm_mon + 1, utc_tm->tm_mday);
        const unsigned long secInDay = 24UL * 60UL * 60UL;
        solarday.sunrise = static_cast<int>(sun.calcSunrise() * 60.);
        if (solarday.sunrise > secInDay) solarday.sunrise -= secInDay;
        solarday.sunset = static_cast<int>(sun.calcSunset() * 60.);
        if (solarday.sunset > secInDay) solarday.sunset -= secInDay;
        solarday.calcday = utc_tm->tm_mday;
        Serial.println("\n\n\n\n" + String(solarday.sunrise) + "\n" + String(solarday.sunset));
      }
}

https://github.com/buelowp/sunset
Automatyczne pobieranie czasu systemowego z NTP dla ESP8266 / ESP32:

void setup(){
  //configTime(0, 0, "pool.ntp.org");
  configTime("CET-1CEST,M3.5.0,M10.5.0/3", "pool.ntp.org"); //https://raw.githubusercontent.com/nayarsystems/posix_tz_db/master/zones.csv
}

 

Edytowano przez rziomber
  • Lubię! 2

Robię to inaczej, czas systemowy pobieram z Supli, czas wschodu i zachodu liczę biblioteką, a sam wyliczam tylko wschód i zachód zmienione o offset czasowy ustawiany z poziomu webinterface supli. Bo wiadomo, że cino robi się teochę po zachodzie, a jasno trochę przed wschodem.

Dzięki.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...