Arduino millis i maszyna stanów zamiast delay

Поделиться
HTML-код
  • Опубликовано: 25 окт 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!

  • @RafaRudko
    @RafaRudko 3 года назад +1

    fajny ten millis() !

  • @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 ruclips.net/channel/UCTwxMrpA2X5-qdpPlDQgDUg nawet niedawno robiliśmy razem materiał (:

    • @marcinwitkowski2981
      @marcinwitkowski2981 3 года назад

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

  • @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ą :)

  • @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 года назад +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ć.

  • @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.