duinozone.cz - Arduino a Raspberry fórum

Autor Téma: Zaokrouhlování  (Přečteno 208 krát)

Offline N

  • Bastlíř začátečník
  • *
  • Příspěvků: 5
Zaokrouhlování
« kdy: Květen 23, 2017, 15:32:01 odpoledne »
Zdravím
mohl by mi někdo poradit, jak normálně zaokrouhlit proměnou na jedno desetinné místo. Googlil jsem dost dlouho, ale nic nenašel.

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:Zaokrouhlování
« Odpověď #1 kdy: Květen 24, 2017, 06:21:49 dopoledne »
a chces zaokrouhlit nebo oriznout zobrazeni? na zaokrouhleni bys musel napsat funkci nevzpominam si ze by v zekladnim baliku arduina byla. pro orezani zobrazeni pouzijes printf
http://www.cplusplus.com/reference/cstdio/printf/

Offline N

  • Bastlíř začátečník
  • *
  • Příspěvků: 5
Zaokrouhlování
« Odpověď #2 kdy: Květen 24, 2017, 19:32:28 odpoledne »
Stačí mi to asi oříznout ,ale jak bych to měl asi zapsat a sjakou proměnou to muže pracovat?

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:Zaokrouhlování
« Odpověď #3 kdy: Květen 24, 2017, 21:47:49 odpoledne »
"printf" je pouze pro zobrazení např. na seriový port (UART).
Pokud chceš oříznout float a uložit zpět tak musíš použít nějákou funkci.
Příklad pro 1 desetinné místo
proměnnou vynásobit 10, uložit jako celé číslo a pak vydělit 10.
představ si číslo 789,456. Po vynásobení 10 to bude 7894,56, uložíš jako celé číslo. Tj. 7894 a vydělíš 10 = 789,4

v Arduinu by to bylo asi takto
Kód: [Vybrat]
promenna = ((int)(promenna * 10 ))/ 10

Offline N

  • Bastlíř začátečník
  • *
  • Příspěvků: 5
Re:Zaokrouhlování
« Odpověď #4 kdy: Květen 24, 2017, 22:24:02 odpoledne »
Toto už jsem zkoušel, ale po odeslání do sériového monitoru se mi vždy zobrazí 789.00 místo 789.4 popř. 789.40(proměnou používám float)

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:Zaokrouhlování
« Odpověď #5 kdy: Květen 25, 2017, 01:12:16 dopoledne »
tak znovu:
chceš to zokrouhlit, nebo oříznout zobrazení?

při dosazení hodnoty 789.40 máš sice vidět 2 des.čísla ale hodnota je pouze platná pouze pro "4".
Když to chceš zobrazit použij "printf()"

Je to nustné si říct, že jsem v zjedndušeném mikroprocesoru, nikoliv v  PC.
Tam bys tyto věci řešil velmi jednoduše. V Arduinu jedeš v 8 bitových proměnných a "lámou" se do přiatelnější podoby.
Já se snažím použivat celá čísla, což je hlavní oblast již samotné AtMega a není problém.
Když jsi v proměnných typu float tak to není nat čisté.

Musíš si uvědomit, že je to hlavně hobby řešení. Kde kdo měří teplotu na 2 des. místa s čidlem o toleranci +/- 1st.C :) ...


Offline N

  • Bastlíř začátečník
  • *
  • Příspěvků: 5
Re:Zaokrouhlování
« Odpověď #6 kdy: Květen 25, 2017, 15:04:24 odpoledne »
Ok, takže pokud bych nutně potřeboval zaokrouhlovat, tak si musím vytvořit řadu posmínek a pokud s tím budu dál pracovat, tak místo 6.9 radši použít 69
doufám, že jsem to pochopil :D a nebudu tě dál otravovat díky

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:Zaokrouhlování
« Odpověď #7 kdy: Květen 25, 2017, 16:48:53 odpoledne »
v pohode. nemusis si pro kazde zobrazeni resit zvlast podminku. udelej si funkci ktera ti to cislo bud orizne nebo zobrazi ve formatu jaky chces. pak v programu tuto funkci jen zavolas. zvladnes to sam nebo chces pomoct ty funkce napsat?

Offline N

  • Bastlíř začátečník
  • *
  • Příspěvků: 5
Re:Zaokrouhlování
« Odpověď #8 kdy: Květen 25, 2017, 17:27:49 odpoledne »
Díky, s tím už se nějak poperu a jenom bych se chtěl ještě zeptat :), když dám na arduino uno motorshield a na něj připojím baterii, tak vše začne běžet, ikdyž arduino není nijak napájený - můžu toho využít nebo se to takhle spálí.
« Poslední změna: Květen 25, 2017, 17:45:48 odpoledne od N »

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:Zaokrouhlování
« Odpověď #9 kdy: Květen 25, 2017, 22:07:15 odpoledne »
záleží na tom jaké napětí ta baterie má. Pokud jsi na 7-9V pak úplně bez problémů. Když 12V a víc tak je třeba arduino zbytečně nezatěovat. Nemá totiž chladič na stabilizátor a hrozí spálení při větších odběrech. Bavíme se o doběru 250mA a víc.

Když máš jen motorshield případě něco malého k tomu tak v pohodě.
« Poslední změna: Červenec 03, 2017, 13:14:16 odpoledne od posjirka »