<?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=4&amp;t=23323&amp;mode" />

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=23323&amp;mode</id>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2020-09-03T20:38:12+01:00</updated>
<published>2020-09-03T20:38:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228869#p228869</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228869#p228869"/>
<title type="html"><![CDATA[Re: Pomiar ADC a funkcja map z Arduino]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228869#p228869"><![CDATA[
<div class="quotetitle">daro0606 napisał(a):</div><div class="quotecontent"><br />Zmień wszystkie typy danych na int32_t to może zrozumiesz...<br /></div><br /><br />Rozumiem że nie masz na myśli również zmiennych? Bo tam nie widzę sensu zmiany.<br /><br />Jeszcze teraz patrze czy to nie jest problemem, bo wynik wyrzucam do uartu za pomocą mirkowej funkcji uart_putlong tyle że ona za parametr przyjmuje uint32_t.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=743">Wilu88</a> — 3 wrz 2020, o 20:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[daro0606]]></name></author>
<updated>2020-09-03T20:54:48+01:00</updated>
<published>2020-09-03T20:31:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228868#p228868</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228868#p228868"/>
<title type="html"><![CDATA[Re: Pomiar ADC a funkcja map z Arduino]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228868#p228868"><![CDATA[
Zmień wszystkie typy danych na int32_t to może zrozumiesz...<br /><br />to wtedy będzie tak przy wynik_adc-730<br /><br />730-820= -90<br />-90 *100 = -9000<br /><br />360-820 = -460<br /><br />-9000 / -460 = 1  czyli ADC_gleba powinna być 1 chyba że zaokragli do 2<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19536">daro0606</a> — 3 wrz 2020, o 20:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2020-09-03T19:28:53+01:00</updated>
<published>2020-09-03T19:28:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228866#p228866</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228866#p228866"/>
<title type="html"><![CDATA[Re: Pomiar ADC a funkcja map z Arduino]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228866#p228866"><![CDATA[
<div class="quotetitle">Daro69 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">Wilu88 napisał(a):</div><div class="quotecontent">uint16_t ADC_calibration_min = 820;<br />uint16_t ADC_calibration_max = 360;<br /></div><br /><br />może odwrotnie wartości ?</div><br /><br />tak to brzmi ale wartości są OK po prostu max jest wtedy gdy jest woda a bez wody jest min i ten czujnik zwraca takie napięcia.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 4 minutach ]</span></strong><br /><br /><div class="quotetitle">daro0606 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">Wilu88 napisał(a):</div><div class="quotecontent">wynik_adc - ADC_calibration_min<br /></div><br />Tu będzie błąd   0-820 = 64715<br /><br />Tak samo tu<br /><div class="quotetitle">Wilu88 napisał(a):</div><div class="quotecontent"><br />ADC_calibration_max - ADC_calibration_min<br /></div><br /><br />360-820= 65105<br /><br />czyli w skrócie<br /><br />64715*100= (nie wiem dokładnie ile bo zostanie przekroczone kilka kronie uint16_t)  w przybliżeniu mi wychodzi 63905<br /><br />wiec 63905/65105 = 0,98itd... czyli dla uint16_t będzie =0<br /><br />Jak byś zauważył on korzysta z log 32bit wiec będą ujemne liczby a ty unsigned int 16bit wiec masz tylko dodatnie liczby i jeszcze mniejsza zmienna</div><br /><br />Nie wiem czy o to Ci chodziło ale zamiana zmiennej ADC_gleba na int16_t oraz rzutowanie do int16_t nic nie daje dalej mam wynik 0 przy wynik_adc=730<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=743">Wilu88</a> — 3 wrz 2020, o 19:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2020-09-03T19:23:56+01:00</updated>
<published>2020-09-03T19:23:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228865#p228865</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228865#p228865"/>
<title type="html"><![CDATA[Re: Pomiar ADC a funkcja map z Arduino]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228865#p228865"><![CDATA[
<div class="quotetitle">Wilu88 napisał(a):</div><div class="quotecontent"><br />uint16_t ADC_calibration_min = 820;<br />uint16_t ADC_calibration_max = 360;<br /></div><br /><br />może odwrotnie wartości ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 3 wrz 2020, o 19:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[daro0606]]></name></author>
<updated>2020-09-03T19:29:34+01:00</updated>
<published>2020-09-03T19:18:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228864#p228864</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228864#p228864"/>
<title type="html"><![CDATA[Re: Pomiar ADC a funkcja map z Arduino]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228864#p228864"><![CDATA[
<div class="quotetitle">Wilu88 napisał(a):</div><div class="quotecontent"><br />wynik_adc - ADC_calibration_min<br /></div><br />Tu będzie błąd   0-820 = 64715<br /><br />Tak samo tu<br /><div class="quotetitle">Wilu88 napisał(a):</div><div class="quotecontent"><br />ADC_calibration_max - ADC_calibration_min<br /></div><br /><br />360-820= 65105<br /><br />czyli w skrócie<br /><br />64715*100= (nie wiem dokładnie ile bo zostanie przekroczone kilka kronie uint16_t)  w przybliżeniu mi wychodzi 63905<br /><br />wiec 63905/65105 = 0,98itd... czyli dla uint16_t będzie =0<br /><br />Jak byś zauważył on korzysta z log 32bit wiec będą ujemne liczby a ty unsigned int 16bit wiec masz tylko dodatnie liczby i jeszcze mniejsza zmienna<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19536">daro0606</a> — 3 wrz 2020, o 19:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2020-09-03T17:38:49+01:00</updated>
<published>2020-09-03T17:38:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228858#p228858</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228858#p228858"/>
<title type="html"><![CDATA[Pomiar ADC a funkcja map z Arduino]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23323&amp;p=228858#p228858"><![CDATA[
Witam<br /><br />Postanawiam przenieść swój kod napisany w Arduino bezpośrednio na C i mam pewnie problem z zastąpieniem funkcji map czyli kalibracji względem dwóch punktów max i min.<br />W zapisie matematycznym funkcja wygląda następująco:<br />[syntax=c]long map(long x, long in_min, long in_max, long out_min, long out_max) {<br />  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;<br />}[/syntax]<br /><br />Postanowiłem ją zaadaptować na swoje potrzeby już w Eclispe ale jakoś z marnym skutkiem, gdyż w wyniku działania funkcji mam cały czas 0.<br /><br />[syntax=c]uint16_t wynik_adc = 0;<br /><br />uint16_t ADC_calibration_min = 820;<br />uint16_t ADC_calibration_max = 360;<br />uint16_t ADC_gleba = 0;<br /><br />wynik_adc = pomiar(PC0);<br />ADC_gleba = (uint16_t)((wynik_adc - ADC_calibration_min) * (100) / (ADC_calibration_max - ADC_calibration_min) + 0);[/syntax]<br /><br />Gdzie może leżeć błąd? Zdaje sobie sprawę że wynikiem takiej funkcji może być liczba po przecinku ale śmiało mogę ją uciąć do pełnych wartości. Dodam ze w tym przykładzie jest to pomiar wilgotności gleby a wartości max i min dobrane są testowo po badaniach w szklance wodzy i wartości w powietrzu gdzie dla obecności w wodzie mamy 360 a w powietrzu 820<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=743">Wilu88</a> — 3 wrz 2020, o 17:38</p><hr />
]]></content>
</entry>
</feed>