<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=30&amp;t=23324&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-09-03T18:51:27+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=30&amp;t=23324&amp;mode</id>
<entry>
<author><name><![CDATA[elmuerto]]></name></author>
<updated>2020-09-03T18:51:27+01:00</updated>
<published>2020-09-03T18:51:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23324&amp;p=228863#p228863</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23324&amp;p=228863#p228863"/>
<title type="html"><![CDATA[Dziwna sprawa dla początkującego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23324&amp;p=228863#p228863"><![CDATA[
Witam.<br />Proszę o pomoc z problemem:  próbuję rozbić liczbę ujemną/dodatnią np. -14.32 na cyfry np.1 ; 4 ; 3 . Chodzi o budowę termometru (setne temperatury ucinamy)<br />Zrobiłem tak:<br />warunek jeśli temperatura mniejsza od zera to: mnożę ją przez sto i dzielę na 10 ; (-14.32*100)/10) =-143  ;pozbywam się przecinka i zaokrąglam do trzech cyfr.<br />pozbywam się minusa -143*(-1) =143<br />cała akcja odbywa się w void tmp() na końcu programu.<br />W pętli głównej inkrementuję zmienną temperatura i tak symuluję zmiany temperatury.<br />A tutaj wyniki z serial monitora:<br /><br />START<br />-2.00<br />-20<br />20<br />-1.90<br />-19<br />19<br />-1.80<br />-18<br />18<br />-1.70<br />-16<br />16<br />-1.60<br />-15<br />15<br />-1.50<br />-14<br />14<br /><br />A teraz mój problem:<br />-2.00<br />-20<br />20<br />-1.90<br />-19<br />19<br />-1.80<br />-18<br />18<br /><strong>do tego miejsca wszystko się zgadza ale w tym miejscu program przeskakuje o 1 i mamy</strong><br />-1.70<br />-16    // <strong>-1.7 zostało zamienione ma -16 i dalej na 16 tego nie rozumiem</strong><br />16<br />-1.60<br />-15<br />15<br />-1.50<br />-14<br />14<br /><br />Może ktoś podpowie gdzie robię błąd.<br /><br /><br />[syntax=cpp]#include &lt;PCF8574.h&gt;<br />#include &lt;Wire.h&gt;<br /><br />#include &lt;OneWire.h&gt;<br />#include &lt;DS18B20.h&gt;<br /><br /><br />// Numer pinu do którego podłaczasz czujnik<br />#define ONEWIRE_PIN 2<br /><br />// Adres czujnika<br />byte address&#91;8&#93; = {0x28, 0xAA, 0x84, 0x79, 0x59, 0x14, 0x1, 0x1E};<br /><br />OneWire onewire(ONEWIRE_PIN);<br />DS18B20 sensors(&amp;onewire);<br /><br />PCF8574 expander;<br />PCF8574 expander1;<br />PCF8574 expander2;<br />#define SEG_A (1&lt;&lt;1)<br />#define SEG_B (1&lt;&lt;0)<br />#define SEG_C (1&lt;&lt;6)<br />#define SEG_D (1&lt;&lt;5)<br />#define SEG_E (1&lt;&lt;4)<br />#define SEG_F (1&lt;&lt;2)<br />#define SEG_G (1&lt;&lt;3)<br />#define SEG_H (1&lt;&lt;7)<br /><br /><br />int8_t cyfra &#91;15&#93; = {<br />  ~(SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F), //0<br />  ~(SEG_B | SEG_C),                                 //1<br />  ~(SEG_A | SEG_B | SEG_G | SEG_D | SEG_E),         //2<br />  ~(SEG_A | SEG_B | SEG_C | SEG_D | SEG_G),         //3<br />  ~(SEG_B | SEG_C | SEG_F | SEG_G),                 //4<br />  ~(SEG_A | SEG_C | SEG_D | SEG_F | SEG_G),         //5<br />  ~(SEG_A | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G), //6<br />  ~(SEG_A | SEG_B | SEG_C | SEG_F),                 //7<br />  ~(SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G), //8<br />  ~(SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G), //9<br />  ~(SEG_H),                                        //KROPKA<br />};<br /><br />float temperatura = -2;<br />int tmp1;<br />void setup()<br />{<br /><br /><br /><br />  expander.begin(0x21);<br />  expander.pinMode(0, OUTPUT);<br />  expander.pinMode(1, OUTPUT);<br />  expander.pinMode(2, OUTPUT);<br />  expander.pinMode(3, OUTPUT);<br />  expander.pinMode(4, OUTPUT);<br />  expander.pinMode(5, OUTPUT);<br />  expander.pinMode(6, OUTPUT);<br />  expander.pinMode(7, OUTPUT);<br />  expander.set();<br /><br />  expander1.begin(0x20);<br />  expander1.pinMode(0, OUTPUT);<br />  expander1.pinMode(1, OUTPUT);<br />  expander1.pinMode(2, OUTPUT);<br />  expander1.pinMode(3, OUTPUT);<br />  expander1.pinMode(4, OUTPUT);<br />  expander1.pinMode(5, OUTPUT);<br />  expander1.pinMode(6, OUTPUT);<br />  expander1.pinMode(7, OUTPUT);<br />  expander1.set();<br /><br />  expander2.begin(0x22);<br />  expander2.pinMode(0, OUTPUT);<br />  expander2.pinMode(1, OUTPUT);<br />  expander2.pinMode(2, OUTPUT);<br />  expander2.pinMode(3, OUTPUT);<br />  expander2.pinMode(4, OUTPUT);<br />  expander2.pinMode(5, OUTPUT);<br />  expander2.pinMode(6, OUTPUT);<br />  expander2.pinMode(7, OUTPUT);<br />  expander2.set();<br /><br />  delay(5000);<br /><br />  Serial.begin(115200);<br />  Serial.println(&quot;START&quot;);<br /><br />}<br /><br />void loop()<br />{<br />  //expander.write(cyfra&#91;0&#93;);<br />  //expander.digitalWrite(7, 1);<br /><br />  //expander1.write(cyfra&#91;1&#93;);<br /> // expander1.digitalWrite(7, 1);<br /><br /> // expander2.write(cyfra&#91;2&#93;);<br /> // expander2.digitalWrite(7, 1);<br /><br />tmp();<br />delay(1000);<br />temperatura=temperatura+0.1;<br /><br /><br />}<br /><br />void tmp(){<br />  <br />  expander.set();<br />  expander.digitalWrite(7, 1);<br /><br />  expander1.set();<br />  expander1.digitalWrite(7, 0);<br /><br />  expander2.set();<br />  expander2.digitalWrite(7, 1);<br />  <br />  Serial.println(temperatura);<br />  <br />   if(temperatura&lt;0){<br />    tmp1=(temperatura*1000)/100;<br />    Serial.println(tmp1);<br />    tmp1=tmp1*(-1);<br />   }<br />   else{<br />    tmp1=(temperatura*100)/10;<br />   }<br />  <br />  Serial.println(tmp1);<br />  }[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 9 minutach ]</span></strong><br /><br />Witam.<br /><br />Chyba zamykamy temat problem wydaje się chwilowo rozwiązany.<br /><br />Dokonałem niejawnego rzutowania (chyba tak to się nazywa) zmiennej float na int i to chyba był problem.<br /><br />po zmianie tmp1 na float program działa jak trzeba.<br /><br />Temat można zamknąć lub usunąć.<br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15076">elmuerto</a> — 3 wrz 2020, o 18:51</p><hr />
]]></content>
</entry>
</feed>