liczby z przecinkiem - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Instalacja i rozwiązywanie problemów (https://forum.arduinopolska.pl/dzial-instalacja-i-rozwi%C4%85zywanie-problem%C3%B3w) +--- Wątek: liczby z przecinkiem (/watek-liczby-z-przecinkiem) |
RE: liczby z przecinkiem - elvis - 13-02-2020 Pompy perystaltyczne też brzmią znajomo Skoro masz silnik krokowy, to sprawa jest o wiele łatwiejsza. Możesz po prostu liczyć liczbę wykonanych kroków (albo ćwierć-kroków). To będzie zawsze liczba całkowita - a wydatek, podaną dawkę itd. możesz w miarę potrzeby obliczać na podstawie tych danych. RE: liczby z przecinkiem - zojsan - 13-02-2020 według mnie nic to nie zmienia bo zamiast 100ml/min będzie 5000 microkroków na sekundę RE: liczby z przecinkiem - zojsan - 13-02-2020 ok... zaczaiłem... RE: liczby z przecinkiem - zojsan - 21-02-2020 (13-02-2020, 00:34)elvis napisał(a): Pompy perystaltyczne też brzmią znajomoelvis.... Mógłbyś mi podpowiedzieć jak zliczać kroki silnika....? RE: liczby z przecinkiem - MERASerwis - 22-02-2020 (21-02-2020, 23:28)zojsan napisał(a): Mógłbyś mi podpowiedzieć jak zliczać kroki silnika....?Jeśli sterujesz silnikiem to wiesz ile kroków wygenerowałeś. Fakt, że silnik może nie poruszać się z powodu awarii albo nie sterujesz nim bezpośrednio, wtedy pozostaje enkoder. RE: liczby z przecinkiem - elvis - 22-02-2020 (21-02-2020, 23:28)zojsan napisał(a): W pełnym kroku 200 kroków na obrót O ile dobrze rozumiem oznacza to, że 375 obr/min = 90 ml/min, czyli 375/90 obr/ml, co przy 800 krokach na obrót daje 300000/90 k/ml (jako k oznaczam 1/4 kroki) Celowo nie skracam 300000/90 do 3333.333333, bo wtedy byłyby błędy zaokrąleń, mamy więc 300000/90 prawie jak w szkole ;-) Od razu widać że wychodzą duże liczby, więc można zamiast ml używać mikrolitrów (ul), dokładność będzie większa, a liczby mniejsze, mamy więc 300/90 k/ul. Teraz można pozbyć się zer i jest piękne: 30/9 k/ul Same kroki wykonujesz niepodzielnie, więc możesz mieć zmienną z liczbą wykonanych kroków. Przeliczenie kroków na dawkę: ul = kroki * 9 / 30; A dawki na kroki: k = ul * 30 / 9; Prezentując wyniki możesz oczywiście używać liczb zmiennopozycyjnych, więc wystarczy np. ml = ul / 1000.0f; I takie wyniki możesz wyświetlać (o ile dokładność do mikrolitrów wystarczy). Podobnie jest z wydatkiem - działasz używając kroków na sekundę/minutę/godzinę, a na ml/min lub ul/min tylko przeliczasz. RE: liczby z przecinkiem - Jarewa0606 - 22-02-2020 (22-02-2020, 09:52)elvis napisał(a): Prezentując wyniki możesz oczywiście używać liczb zmiennopozycyjnych, więc wystarczy np. A po co rzutowanie do float??? RE: liczby z przecinkiem - elvis - 22-02-2020 Nie wiem po co, ale jeśli float-y są do czegoś w programie potrzebne, to jak najbardziej można z nich korzystać. Przykładowo wyświetlanie ułamkowych wydatków można tak zrealizować - można też zupełnie inaczej oczywiście. RE: liczby z przecinkiem - Jarewa0606 - 22-02-2020 Od początku się mówi żeby unikać fluatów jak ognia na AVR nie bez powodów. Nie po to się przechodzi na liczenie z liczb całkowitych by na końcu zrobić i tak float.... ml = ul / 1000.0f; Taki wynik można uzyskać z liczb całkowitych i wykona się dużo szybciej ml = ul / 1000; fml = ul%1000; RE: liczby z przecinkiem - elvis - 22-02-2020 Ja nigdzie nie pisałem żeby floatów unikać - jak ktoś chce i potrzebuje to jak najbardziej są po to żeby z nich korzystać. W programie problemem nie było użycie arytmetyki zmiennopozycyjnej, ale błędy zaokrągleń - dlatego pojawiła się propozycja zliczania kroków. Natomiast jeśli do czegoś dawka w postaci float-a będzie potrzebna, można ją z kroków bez problemu obliczyć. Programy można pisać na różne sposoby i takie odgórne pisanie, że delay jest złe, albo float to samo zło świadczą tylko o osobach, które takie rzeczy piszą. Trzeba umieć dobrać rozwiązanie do konkretnych potrzeb i problemu, a zarówno opóźnienia z aktywnym czekaniem, jak i floaty to po prostu jedne z wielu dostępnych opcji. |