Arduino millis i maszyna stanów zamiast delay

Поділитися
Вставка
  • Опубліковано 19 жов 2024

КОМЕНТАРІ • 17

  • @eR-MIK
    @eR-MIK 3 роки тому +2

    Dlaczego zmienna state (8:13) jest zadeklarowana o rozmiarze 16 bit (w 32-uC byłoby to 32-bit) jeśli stanów jest mniej niż 256 i wystarczyłaby zmienna 8-bit? Dodatkowo, dlaczego zmienna jest zadeklarowana ze znakiem skoro w praktyce nie przyjmuje wartości ujemnych?
    To jest nagminny błąd "programistów" Arduino i nie tylko!

  • @bartek_argentrol
    @bartek_argentrol 3 роки тому

    Dobre to... fajny temat!

  • @marcinwitkowski2981
    @marcinwitkowski2981 3 роки тому +1

    Dobrze przygotowany material
    Super merytoryka
    :-) ps. czym grab-ujesz obraz

    •  3 роки тому

      Dzięki, bardzo mi miło :) Do przechwytywania ekranu używam Icecream Screen Recorder, ale potem ewentualnie to jeszcze obrabiam w Resolve, gdzie montuje cały filmik.

    • @marcinwitkowski2981
      @marcinwitkowski2981 3 роки тому

      @ Dziękuję za info i Serduszko ;-) właśnie wchodzę w STM po kilku latach projektow z bootloaderem arduino ;-) z Twoich filmow zobaczyłem też kanał z kursem dla STM Piotra Duby ;-) Będziesz robił kurs z od tego producenta ? ?

    •  3 роки тому +1

      @@marcinwitkowski2981 STM używam często w pracy, ale jakoś nie miałem potrzeby pokazania czegoś na blogu. Może w przyszłości coś się trafi (; Warto zobaczyć kanał Mateusza o tematyce STM ua-cam.com/channels/TwxMrpA2X5-qdpPlDQgDUg.html nawet niedawno robiliśmy razem materiał (:

    • @marcinwitkowski2981
      @marcinwitkowski2981 3 роки тому

      @ a dzięki dałem subka dla Mateusza ;-)

  • @RafaRudko
    @RafaRudko 3 роки тому +1

    fajny ten millis() !

  • @bogdansmolen8365
    @bogdansmolen8365 Рік тому

    Czym jest linijka 9 - Timer Timer; ? wykrzacza mi bląd w IDE

    •  Рік тому

      Jeśli skopiowałeś sam kod, to tak się stanie, tam jest biblioteka dołączona w folderze libs, która nazywa się właśnie Timers. Można ściągnąć całe repozytorium albo samą bibliotekę Timers i wrzucić obok głównego pliku, tylko trzeba dobrze podać ścieżkę w #include (linia 2). W linijce 9 jest obiekt klasy Timers, która jest dołączona właśnie z tą biblioteką :)

  • @eR-MIK
    @eR-MIK 3 роки тому +1

    Kiedy zmienna "last_loop_time" przyjmuje wartości ujemne? Jest zadeklarowana ze znakiem, więc?
    Problem deklaracji zmiennych "programistów" Arduino jest szeroki. Zmienne powinno się deklarować z pełną świadomością aby kod był przenośny, dlatego nie "int' ale "int16_t" dla AVR czy "int32_t" dla ARm albo "int64_t" dla CPU 64-bit. Jeśli zmienna ma być "szybka" to używa się "fast", wtedy to, kompilator dobierze odpowiedni rozmiar (przeważnie taki jaka jest szerokość magistrali CPU". I powoli dochodzimy do tego, dlaczego "programiści" embeded najczęściej są kiepscy. Przeważnie nie mają pojęcia o systemach mikroprocesorowych! Nie znają budowy CPU! Nie mają pojęcia o tym jak działa kompilator! To sprowadza się do budowy sprzętu (nawet prostych systemów na 8-bit jak Z-80) i Assemblera a racze języka maszynowego. Bez znajomości tych zagadnień mamy takie "kwiatki" jak Windows czy inne drogie systemy, gdzie można by zastosować mniejsze uC no ale jeśli "programista" rozrzutnie dysponuje pamięcią, do czego zachęcają coraz to większe jej ilości, to po co się męczyć? A jednak czasem warto, bo przez niedouczenie "programistów" stosuje się uC dużo większe niż potrzeba a to przekłada się na zysk firmy.

  • @eR-MIK
    @eR-MIK 3 роки тому

    Millis to niewypał. Przy porównaniu czasu, bez względu na to czy czekamy 100ms czy kilkadziesiąt dni, ZAWSZE porównuje 4 bajty! W przypadku rzeczonej sygnalizacji wystarczyłyby 2! Przy czasach poniżej 256ms (millis nie jest precyzyjne, co 125us jest "przeskok"), poza tym, ze wystarcza jeden bajt, to dodatkowo, przy porównaniu czasu, nie trzeba blokować przerwań na czas odczytu czasu.
    Kolejna wada metody z millis - problem nieprzerwanej pracy przez dłuższy czas (przepełnienie licznika).
    W kodzie brakuje też ważnej rzeczy - WDG. To kolejny kardynalny błąd "programistów" Arduino. O usypianiu uC też warto było napisać.

  • @widziszmnie7785
    @widziszmnie7785 3 роки тому

    Kurde szukam gotowca na necie żeby tak zaprogramować arduino by względem czasu z modułu czasu rzeczywistego,
    Dawało stan wysoki powiedzmy od godziny 18 do 12 a od 12 do 18 stan niski tylko tyle potrzebuje.
    Wszystko co znalazłem to zegarki

    •  3 роки тому

      RTC to trochę odrębny temat, bardziej poruszam na live streamach bo będzie użyty w moim uniwersalnym sterowniku i w szklarni więc można oglądać na bieżąco live, lub niebawem pojawi się jakiś skrót i tam będzie taki przykład ; )

  • @eR-MIK
    @eR-MIK 3 роки тому

    Biblioteka a raczej "biblioteka" "timers" to niewypał, to tykająca bomba! Spróbuj na AVR, przy zazwyczaj kiepskim kodzie, odczekać tą "biblioteką" kilka ms. Uda się? Na 98% nie!
    Dlaczego? Wystarczy zobaczyć jak jest napisana! Zgroza! Timers to przykład, jak coś źle napisanego wbudowane biblioteki "Arduino" łatać czymś jeszcze gorzej napisanym. Podstawowy, RAŻĄCY błąd Arduino, to właśnie pomiar czasu i brak funkcji umożliwiającej "podpięcie" się pod przerwania niby 1ms. Już C-64, ok 30 lat temu, miał takie możliwości! Teraz niestety, mamy coraz gorszych programistów i powstają takie "potwory" jak Arduino.