logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[bascom] Automatyczna zmiana czasu (zimowy<=>letni)

pier 14 Kwi 2009 21:38 4434 17
REKLAMA
  • #1 6414912
    pier
    Poziom 24  
    Witam
    Tak się ostatnio zastanawiałem aby do nowo zrobionego zegara na Atmega16 dodać automatyczną zmianę czasu z zimowego na letni i odwrotnie. Zmiana czasu następuje w ostatnią niedziele marca i października. Załóżmy że mamy RTC DS1307 z którego odczytujemy pełną datę, jak więc ustalić w bascomie że jest to na przykład ostatnia niedziela marca? Bo samo przyśpieszenie lub opóźnienie zegarka to nie problem tylko jak wykryć że jest to ostatnia niedziela?

    Pozdrawiam.
  • REKLAMA
  • #2 6415107
    Konto nie istnieje
    Poziom 1  
  • #3 6631855
    Konto nie istnieje
    Konto nie istnieje  
  • #4 6631909
    janbernat
    Poziom 38  
    Nie ma.
  • REKLAMA
  • #5 6632570
    wader_669
    Poziom 28  
    Jasne jest, ze musisz dodac date. Gdzies w necie albo w samplach bascom masz przyklad zegarka z data, pozniej wystarczy dodac odpowiedni warunek i po sprawie.
  • REKLAMA
  • #6 6632983
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #8 15752188
    WOBI
    Poziom 19  
    temat był kiedys opisany na forum Link jest przykład w bascomie.

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #9 15771207
    maximus22_kr
    Poziom 18  
    Kod Kolegi RAPELC uwzględnia minuty i sekundy, wygląda obiecująco. Po testuję.

    Dopasowałem go do zegara RTC PCF8563, w sumie zmiana czasu ma być równej godzinie, więc sekundy zrobiłem wspólne
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod



    Sprawdzałem kilka różnych rozwiązań i miałem problemy, mimo zastosowania dodatkowej zmiennej zabezpieczającej przed ponowną zmianą godziny.
  • #10 19002653
    FastProject
    Poziom 28  
    Stary temat ale wyjaśnienia wymaga fragment kodo kolegi WOBI.
    Mianowicie czemu służy zmienna Lz?

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #11 19002713
    bart-projects
    Poziom 29  
    Tego się tak nie robi. Bascom ma wbudowane funkcje do obliczania różnych wartości z dat i w drugą stronę. Całkowity czas z datą można zapisać w zmiennej typu Long. Tak samo deklarując po kolei Sec, Min, Hour, Day, Month i Year jako Byte można potem uzyskiwać różne potrzebne dane tam i z powrotem.

    W swoich programach wstawiam funkcję bo czas Lato/Zima sprawdzam w kilku miejscach. Zaraz po Resecie/Starcie programu oraz jeszcze w innych, na przykład po otrzymaniu czasu z serwera NTP.

    Wiadomo że były plany że DST (Daylight Saving Time) będzie u nas zniesiony więc w funkcji i menu urządzeń przewidziałem to czy mają wprowadzać korekcję czasu - tak na przyszłość ;)

    Funkcja (nie jestem jej autorem, ale dodałem kilka komentarzy) wygląda tak:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Komentarze chyba odpowiadają na Twoje pytanie ;)
  • #12 19002832
    FastProject
    Poziom 28  
    Dziękuję za wskazówki, nie rozumiem jedynie dlaczego "Każdą inną liczbę trzeba odjąć" i tej części kodu, po co to jest wykonywane?

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #13 19002878
    bart-projects
    Poziom 29  
    Czas zawsze zmienia się w ostatnią Niedzielę.
    Najpierw, na tymczasowych zmiennych, data ustawiana jest na ostatni dzień miesiąca a to nie musi być akurat Niedziela. Wbudowaną bascomową funkcją Dayofweek() dowiadujemy się który to dzień z przedziału 0-6 gdzie 0 to Niedziela. Jeśli "wyjdzie", że Dayofweek to np. 1 (Poniedziałek) to znaczy, że w danym roku Niedziela jest dnia 30 bo odejmujemy 1 od 31.

    Na taki czas ustawiamy zmienną typu Long i łatwo porównujemy z drugą Long w której mamy czas aktualny.
  • #14 19002952
    FastProject
    Poziom 28  
    Ok, no powiedzmy, że dociera.

    Jedno pytanie jeszcze: Masz użyte zmienne Wlacz_zima i Wylacz zima, które trzeba zadeklarować osobno, a czy nie lepiej zadeklarować je w podprogramie, bo zdaje się, że nie są potrzebne poza tym podprogramem? A "zwracana-odliczana" jest wartość zmiennej Zima_lato na podstawie której dodajemy lub odejmujemy godziny np z GPS który podaje czas uniwersalny.
  • #15 19002966
    bart-projects
    Poziom 29  
    Tak, ale w 2017r był jakiś problem z zadeklarowaniem tych Long w Sub. Zadeklarować się dało, ale dane "jeździły" chyba po jakichś innych zmiennych. To już chyba poprawiono, ale wyciąłem ten akurat Sub z jakiegoś starego kodu.

    Mam nadzieję że wyjaśniłem intencje przeniesienia tych akurat zmiennych do globalnych ;) Tak samo nie da się zadeklarować tablicy w Sub jako Local.

    Co ciekawe można w Sub deklarować globalne czyli Dim zamiast Local i te będą zadeklarowane tylko jak użyjesz danego Sub (przy dyrektywie Config Submode = New)

    Możesz spróbować zadeklarować te zmienne jako Local i zobaczyć czy to działa poprawnie.

    I tak jak piszesz, jako że żyjemy w strefie GMT+1 to po wyjściu z tego Sub w zależności od tego skąd ciągniesz czas ..
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #16 19003089
    FastProject
    Poziom 28  
    bart-projects napisał:
    Mam nadzieję że wyjaśniłem intencje przeniesienia tych akurat zmiennych do globalnych Tak samo nie da się zadeklarować tablicy w Sub jako Local.

    Tak dziękuję. Sprawdziłem sobie kod w swoim urządzeniu i działa jak należy (sprawdziłem też daty w przyszłym roku więc jest ok)

    Co jakiś czas zerkam na Twoją WWW. Świetne rzeczy robisz w Bascomie. Kiedy ty masz na to czas :) ? Wydaje się że jesteś dość dobrym programistą, nie chciałeś przejść na C?
  • #17 19003153
    bart-projects
    Poziom 29  
    Wyjątkowo opłaca mi się znać Basic bo jednocześnie z łatwością programuję aplikacje na telefony powiązane z projektami w platformie B4X.
    Mam licencję na B4A a teraz jest darmowa. Mam licencję na B4i...Mam konta dewelopera w PlayStore(jednorazowo 25$) i AppStore(corocznie 99$).
    Napisałem kilka komercyjnych aplikacji których nie mogę pokazywać - i tu jest czasem problem z promocją - najczęściej w języku Bascom, B4x i VB.NET

    Język nie jest tu ograniczeniem. Tak samo lubię czytać książki o C i nawet raz zdarzyło mi się programować jakiemuś studentowi coś w C na zaliczenie...
    Mam też do AtmelStudio dokupiony plugin Arduino od VisualMicro i teraz to przyjemność coś napisać w tym języku (takie C++)

    Pięknie się programuje ESP8266/ESP32 w B4R...

    A wszystko można spiąć..

    Od dawna nie nie ofertowałem w dziale "Zlecenia" - ludzie sami do mnie piszą. I tym chciałbym podsumować to "C do Basic". Mogę to napisać w każdym języku, ale w Basicu potrafię szybciej.
  • #18 19006213
    WOBI
    Poziom 19  
    FastProject napisał:
    Stary temat ale wyjaśnienia wymaga fragment kodo kolegi WOBI.
    Mianowicie czemu służy zmienna Lz?

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod



    To niepotrzebna zmienna pomocnicza, nie powinno być jej tu :)
    To stary program z zegara astronomicznego (steruje do dziś oświetleniem kilku lamp na posesji) i potrzeba była uwzględnienia zmian czasu.
REKLAMA