Arduino Polska Forum
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)

Strony: 1 2 3 4


RE: liczby z przecinkiem - elvis - 13-02-2020

Pompy perystaltyczne też brzmią znajomo Smile
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ę
Undecided


RE: liczby z przecinkiem - zojsan - 13-02-2020

ok...
zaczaiłem... Idea


RE: liczby z przecinkiem - zojsan - 21-02-2020

(13-02-2020, 00:34)elvis napisał(a): Pompy perystaltyczne też brzmią znajomo Smile
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.
elvis....
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
Rozkręcam to do 5000Hz przy 1/4 kroku=375 obr/min
i przy tych obrotach pompa ma wydatek 90ml/min

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.
ml = ul / 1000.0f;

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.