Převedení hodnot z analogRead na napětí
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Převedení hodnot z analogRead na napětí
Mohl bych opět prosím poprosit o radu a vysvětlení? Popřípadě nasměrování, kde bych se mohl dočíst?
Zkoušel jsem si toto zapojení.
http://navody.arduino-shop.cz/arduino-p ... pleji.html
Nerozumím v kodu těmto hodnotám:
float voltage = (sensorVal / 1024.0) * 5.0;
float temperature = (voltage - 0.5) * 100.0;
To se hodnota načtená v proměnné sensorVal dělí 1024.0 a následně celé násobí hodnotou 5.0? Proč je tam ještě x.0? Nebo to číslo např. /1024.0 má nějaký jiný význam?
A to samé v druhém řádku.
Můžete mi to prosím aspoň trochu někdo popsat?
Moc děkuji
Zkoušel jsem si toto zapojení.
http://navody.arduino-shop.cz/arduino-p ... pleji.html
Nerozumím v kodu těmto hodnotám:
float voltage = (sensorVal / 1024.0) * 5.0;
float temperature = (voltage - 0.5) * 100.0;
To se hodnota načtená v proměnné sensorVal dělí 1024.0 a následně celé násobí hodnotou 5.0? Proč je tam ještě x.0? Nebo to číslo např. /1024.0 má nějaký jiný význam?
A to samé v druhém řádku.
Můžete mi to prosím aspoň trochu někdo popsat?
Moc děkuji
Re: Přetečení funkce analogWrite, funkce map
1. Ta desetinná místa nemají rozumné opodstatnění, jedině že autor chtěl zdůraznit, že se jedná o reálná čísla.
Ten první vztah vyjadřuje napětí získané 10 bitovým AD převodníkem s referenčním napětím 5V.
Vem si příklad, kdy na vstupu převodníku je 0,75V což odpovídá hodnotě 154, kterou mi převodník vrátí.
Pak 154 / 1024 * 5V = 0,75V
Druhý vztah vychází z datasheetu obvodu TMP36. Ten dáva při 25 stupních Celsia 750mV se strmostí 10mV/K.
Když dosadíš float temperature = (0,75V - 0,5V) *100 = 25 stupňů.
To napětí 0,5V vyjadřuje offset do 0 stupňů a ta hodnota 100 vznikla z toho, že jeden stupeň udělá změnu jednu setinu voltu
Ten první vztah vyjadřuje napětí získané 10 bitovým AD převodníkem s referenčním napětím 5V.
Vem si příklad, kdy na vstupu převodníku je 0,75V což odpovídá hodnotě 154, kterou mi převodník vrátí.
Pak 154 / 1024 * 5V = 0,75V
Druhý vztah vychází z datasheetu obvodu TMP36. Ten dáva při 25 stupních Celsia 750mV se strmostí 10mV/K.
Když dosadíš float temperature = (0,75V - 0,5V) *100 = 25 stupňů.
To napětí 0,5V vyjadřuje offset do 0 stupňů a ta hodnota 100 vznikla z toho, že jeden stupeň udělá změnu jednu setinu voltu
Re: Přetečení funkce analogWrite, funkce map
Mrkni sem: https://www.arduino.cc/reference/en/lan ... pes/float/
Podle popisu, pokud používáš float, měl by si přidat desetinné místo. Ale abych řekl pravdu, doteď jsem to nějak zvlášť neřešil. Častěji používám integer.
Podle popisu, pokud používáš float, měl by si přidat desetinné místo. Ale abych řekl pravdu, doteď jsem to nějak zvlášť neřešil. Častěji používám integer.
Re: Přetečení funkce analogWrite, funkce map
Ano, vypadá to tak, že ve Wiringu by se měly rozlišovat konstanty integer a float přidáním desetiné tečky a nuly. Zatím jsem tak nečinil, ale specifikace je specifikace.
Re: Přetečení funkce analogWrite, funkce map
Moc všem díky, hlavně Jankop za podrobný popis. Teď už vím, co uvedené hodnoty znamenají a co a jak se počíta.
Díky
Díky
Re: Přetečení funkce analogWrite, funkce map
To není pravda.
C++ se kouká na to, jakého datového typu operandy jsou a podle toho se chovají i výsledky operací.
Například:
- int op int -> int
- float op float -> float
- float op int -> float
- int op float -> float
100 / 1024 je sice matematicky cca 0.1, ale jelikož jsou oba operandy integer dojde k zaokrouhlení k 0, protože i výsledek musí být integer
stejný případ by byl s sensorVal / 1024, protože sensorVal je integer
pokud bychom tedy zapsali:
Kód: Vybrat vše
float voltage = (sensorVal / 1024) * 5;
musíme tedy napsat alespoň:
Kód: Vybrat vše
float voltage = (sensorVal / 1024.0) * 5;
Re: Přetečení funkce analogWrite, funkce map
Máš pravdu, ale já jsem svůj názor již předtím korigoval.
Re: Přetečení funkce analogWrite, funkce map
Jasný, ale chtěl jsem vysvětlit proč to tak musí být 
Jestli to vyznělo jako útok, tak se omlouvám.

Jestli to vyznělo jako útok, tak se omlouvám.
Re: Přetečení funkce analogWrite, funkce map
Nemám problém, naopak. Ověřil jsem si, že nerespektování reálných konstant může přinést za určitých podmínek docela velké problémy, nelenil jsem a hned jsem u sebe udělal nějaké opravy.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host