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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-12-28T13:36:05+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14005&amp;mode</id>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2015-12-28T13:36:05+01:00</updated>
<published>2015-12-28T13:36:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=149013#p149013</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=149013#p149013"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=149013#p149013"><![CDATA[
Bardzo dziękuję za pomoc. Odczyt działa, ale przy okazji program się rozjeżdża - przypadkowe synchronizacje zegara, zaburzenia wyświetlania. Co zrobiłem:<br />W pliku mk_pcf8583.c zmodyfikowałem RTC_EVENT:<br />[syntax=c]void RTC_EVENT(void){<br /><br />// sprawdzamy czy sprzętowa flaga przerwania INT0 została ustawiona<br />if(GIFR &amp; (1&lt;&lt;INTF0)){<br /><br />dht++;<br /><br />get_rtc_datetime (&amp;datetime);<br />DS18x20_read();<br />if(rtc_callback) rtc_callback(&amp;datetime);<br />// zerowanie fagi sprzetowej poprzez wpisanie 1<br />if(dht == 3){<br />dht_gettemperaturehumidity(&amp;temperature, &amp;humidity);<br />dht = 0;<br />}<br />GIFR |= (1&lt;&lt;INTF0);<br />}<br />lcd_locate(1,15);<br />lcd_int(dht);<br />}[/syntax]<br />W liku mk_pcf8583 udostepniłem zmienne jako extern.<br />Odczyt danych w programie głównym:<br />[syntax=c]else if(wywolanie == 52 &amp;&amp; DHTBit == 1){<br /><br />cy1=0;cy2=0;cy3=0;cy4=0;<br /><br />lcd_locate(1,8);<br />lcd_int(temperature);<br />lcd_locate(1,12);<br />lcd_int(humidity);<br /><br />Timer1 = 1500;<br /><br />DHTBit = 0;<br />}[/syntax]<br />Usunięcie powyższych zmian przywraca integralność działania programu. Droga na pewno dobra i logiczna, ale coś z warunkiem musi być nie tak. Proszę pochylcie się jeszcze nad tym.<br /><br />Przyjrzałem się bliżej. Nie odświeża danych.<br /><br />P.S. Po podgrzaniu lampką czujnika zmienia się jednak temperatura i wilgotność. Nie zauważyłem tego z powodu braku miejsc po przecinku i dużej bezwładność pomiaru. Tak więc wydaje się, że działa dobrze. W jaki sposób pokazać miejsca po przecinku dla temperatury z tego czujnika (w celach obserwacyjnych) <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />P.S. Doczytałem<br />[syntax=c]dtostrf(temperature, 3, 1, printbuff);[/syntax]<br />Dziękuję jeszcze raz Wszystkim i pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 28 gru 2015, o 13:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2015-12-28T12:15:33+01:00</updated>
<published>2015-12-28T12:15:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=149006#p149006</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=149006#p149006"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=149006#p149006"><![CDATA[
Witam,<br /><br />w sumie to niczego nie musisz tam wpisywać, wystarczy jeśli zadeklarujesz zmienne temperature i humidity jako globalne, ale jeśli koniecznie chcesz, to możesz:[syntax=c]void RTC_EVENT(void){<br /> <br />        // sprawdzamy czy sprzętowa flaga przerwania INT0 została ustawiona<br />        if(GIFR &amp; (1&lt;&lt;INTF0)){<br /> <br />        dht++;<br /> <br />        get_rtc_datetime (&amp;datetime);<br />        DS18x20_read();<br />        if(rtc_callback) rtc_callback(&amp;datetime);<br />        // zerowanie fagi sprzetowej poprzez wpisanie 1<br />        if(dht == 2){<br />                if(dht_gettemperaturehumidity(&amp;temperature, &amp;humidity) != -1){<br />                global_temperature = temperature;<br />                global_humidity = humidity;<br />                }<br />                dht = 0;<br />        }<br />        GIFR |= (1&lt;&lt;INTF0);<br />        }<br />}[/syntax]<br /><br />i wyświetlać zmienne: global_temperature i global_humidity.<br /><br />Pozdrawiam, QuadMan.<br /><br />P.S. Kolega <strong>MirkoT</strong> był szybszy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" />.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 28 gru 2015, o 12:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2015-12-28T12:13:18+01:00</updated>
<published>2015-12-28T12:13:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=149005#p149005</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=149005#p149005"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=149005#p149005"><![CDATA[
Nie analizowałem całego kodu, ale...<br />rozumiem, że <br />[syntax=c]dht_gettemperaturehumidity(&amp;temperature, &amp;humidity)[/syntax]<br />pod wskaźnikami temperature i humidity zwraca to co odczytała z czujnika.<br />Natomiast jeśli &quot;coś pójdzie źle&quot; jej wynikiem jest -1<br />Więc tak na prawdę tam gdzie masz pytajniki nic nie musisz robić.<br />Tylko dobrze by było, żeby &quot;gdzieś&quot; sobie zapamiętać czy ostatni pomiar zakończył<br />się sukcesem, żeby nie wyświetlać bzdur.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 28 gru 2015, o 12:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2015-12-28T11:52:11+01:00</updated>
<published>2015-12-28T11:52:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=149003#p149003</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=149003#p149003"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=149003#p149003"><![CDATA[
Poczyniłem nieznaczny postęp. Rozbudowałem RTC_EVENT w pliku mk_pcf8583.c o odczyt danych z DHT22 co 3 sekundy. Niestety nie wiem jak &quot;zapakować&quot; odczytane dane np. do zmiennej i przekazać do programu głównego celem wyświetlenia. Co wpisać w miejsce pytajników?<br />[syntax=c]void RTC_EVENT(void){<br /><br />// sprawdzamy czy sprzętowa flaga przerwania INT0 została ustawiona<br />if(GIFR &amp; (1&lt;&lt;INTF0)){<br /><br />dht++;<br /><br />get_rtc_datetime (&amp;datetime);<br />DS18x20_read();<br />if(rtc_callback) rtc_callback(&amp;datetime);<br />// zerowanie fagi sprzetowej poprzez wpisanie 1<br />if(dht == 2){<br />if(dht_gettemperaturehumidity(&amp;temperature, &amp;humidity) != -1){<br />//???<br />}<br />dht = 0;<br />}<br />GIFR |= (1&lt;&lt;INTF0);<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 28 gru 2015, o 11:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2015-12-28T09:06:39+01:00</updated>
<published>2015-12-28T09:06:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148998#p148998</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148998#p148998"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148998#p148998"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />No to jak najbardziej powinno działać.<br />Jedyne co, to ewentualnie będziesz miał pomiar wilgotności<br />wykonany 2 sek temu. Ale to chyba nie problem?<br /></div><br />Dzięki. Jak tylko przetestuję (niebawem) dam znać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 28 gru 2015, o 09:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2015-12-28T08:52:16+01:00</updated>
<published>2015-12-28T08:52:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148997#p148997</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148997#p148997"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148997#p148997"><![CDATA[
No to jak najbardziej powinno działać.<br />Jedyne co, to ewentualnie będziesz miał pomiar wilgotności<br />wykonany 2 sek temu. Ale to chyba nie problem? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 28 gru 2015, o 08:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2015-12-28T08:30:11+01:00</updated>
<published>2015-12-28T08:30:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148996#p148996</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148996#p148996"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148996#p148996"><![CDATA[
<div class="quotetitle">MirkoT napisał(a):</div><div class="quotecontent"><br />Tak, ale w ten sposób miałbyś pomiar &quot;ciągły&quot; co 2 sekundy. A tego nie chcesz<br />Dlatego trzeba sprawdzić 2 warunki<br />Składnia: [ Pobierz ] [ Ukryj ]<br />język c<br />if(wywolanie == 53 &amp;&amp; dht &gt;=2 ) {<br />   pomiar;<br />   dht = 0;<br />}<br />GeSHi<br /><br />w zależności z jakim interwałem spodziewasz się pomiarów musisz tak dobrać<br />zmienna dht żeby się nie &quot;przekręciła&quot; w najmniej odpowiednim momencie<br /></div><br /><br />Funkcję pomiar chciałbym umieścić w ciele RTC_EVENT i niech mierzy co 2s. W warunku: if(wywolanie == 53) chciałbym tylko wyświetlić wartość temperatury i wilgotności bez dokonywania pomiaru. (wywolanie == 53) powtarza się w cyklu minutowym. &lt;50 pokazuje czas, gdy 50 - temp1, gdy 52 - temp2, gdy 53 - wilgotność, gdy 59 - wywolanie =0.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 28 gru 2015, o 08:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2015-12-28T08:21:10+01:00</updated>
<published>2015-12-28T08:21:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148994#p148994</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148994#p148994"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148994#p148994"><![CDATA[
Tak, ale w ten sposób miałbyś pomiar &quot;ciągły&quot; co 2 sekundy. A tego nie chcesz<br />Dlatego trzeba sprawdzić 2 warunki<br />[syntax=c]if(wywolanie == 53 &amp;&amp; dht &gt;=2 ) {<br />   pomiar;<br />   dht = 0;<br />}[/syntax]<br />w zależności z jakim interwałem spodziewasz się pomiarów musisz tak dobrać<br />zmienna dht żeby się nie &quot;przekręciła&quot; w najmniej odpowiednim momencie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 28 gru 2015, o 08:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2015-12-28T08:01:42+01:00</updated>
<published>2015-12-28T08:01:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148993#p148993</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148993#p148993"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148993#p148993"><![CDATA[
<div class="quotetitle">MirkoT napisał(a):</div><div class="quotecontent"><br />Albo możesz w pętli while(1) umieścić event<br />pomiar_wilgotnosci()<br /></div><br />Mam w pętli while(1) RTC_EVENT:<br />[syntax=c]void RTC_EVENT(void){<br /><br />// sprawdzamy czy sprzętowa flaga przerwania INT0 została ustawiona<br />if(GIFR &amp; (1&lt;&lt;INTF0)){<br /><br />get_rtc_datetime (&amp;datetime);<br />DS18x20_read();<br />if(rtc_callback) rtc_callback(&amp;datetime);<br />// zerowanie fagi sprzetowej poprzez wpisanie 1<br /><br />GIFR |= (1&lt;&lt;INTF0);<br />}<br />}[/syntax]<br />Rozumiem, że mogę zrobić tak. Ustalam w RTC_EVENT zmienną lokalną dht2. Po sprawdzeniu sprzętowej flagi INT0 zmienna dht jest zwiększana o jeden. Wstawiam też warunek: if(dht==2) {pomiar}. Czy pomiar ma wyglądać tak:<br />[syntax=c]if(dht_gettemperaturehumidity(&amp;temperature, &amp;humidity) != -1)[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 28 gru 2015, o 08:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2015-12-28T07:48:28+01:00</updated>
<published>2015-12-28T07:48:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148992#p148992</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148992#p148992"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148992#p148992"><![CDATA[
Pokazałeś tylko kawałek kodu.<br />Możesz umieścić w dowolnym miejscu<br />Np. w pętli while(1)<br />Albo możesz w pętli while(1) umieścić event <br />pomiar_wilgotnosci() <br />a w nim sprawdzać czy flaga spełnia warunek pomiaru<br />czyli od ostatniego pomiaru minęły 2 sek.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 28 gru 2015, o 07:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2015-12-28T07:40:10+01:00</updated>
<published>2015-12-28T07:40:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148991#p148991</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148991#p148991"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148991#p148991"><![CDATA[
<div class="quotetitle">MirkoT napisał(a):</div><div class="quotecontent"><br />A co jeszcze masz w projekcie?<br />Jak ma być program nieblokujący:<br />Jeżeli masz jakiś RTC to w każdym przerwaniu (co sekundę)<br />zwiększasz flagę i sprawdzasz czy jest == 2 jeśli tak wywołujesz pomiar<br />i zerujesz flagę.<br />Jeśli RTC brak to tworzysz timer programowy.<br /></div><br />Dziękuję. Projekt nieblokujący zegara GPS oparty jest na eventach, a i Timery programowe działają. Chodzi mi głównie o lokalizację pomiaru w programie. Gdzie umieścić ten warunek z flagą (flaga == 2). Czy warunek ten należy sprawdzać w pętli while!(1)?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 28 gru 2015, o 07:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2015-12-28T07:26:23+01:00</updated>
<published>2015-12-28T07:26:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148990#p148990</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148990#p148990"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148990#p148990"><![CDATA[
A co jeszcze masz w projekcie?<br />Jak ma być program nieblokujący:<br />Jeżeli masz jakiś RTC to w każdym przerwaniu (co sekundę)<br />zwiększasz flagę i sprawdzasz czy jest == 2 jeśli tak wywołujesz pomiar<br />i zerujesz flagę.<br />Jeśli RTC brak to tworzysz timer programowy.<br /><br />Jak ma być program blokujący i nic więcej nie robi to...<br />wystarczy zwykły paskudny delay_ms (Ale tego lepiej nie robić)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 28 gru 2015, o 07:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2015-12-27T21:58:02+01:00</updated>
<published>2015-12-27T21:58:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148982#p148982</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148982#p148982"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148982#p148982"><![CDATA[
<div class="quotetitle">wchpikus napisał(a):</div><div class="quotecontent"><br />Ale proponuje zrobić coś jeszcze, dodaj jeden bit, który będzie ustawiany na starcie tej funkcji, aby nie byli sytuacji, ze Twoje &quot;wywołanie&quot; będzie w ciągu kilku sekund cały czas wywoływało dht_gettemperature.<br /></div><br />Bardzo dziękuję za porady. Ta powyżej jest szczególnie cenna bo rozwiązała mój &quot;nierozwiązywalny&quot; problem z &quot;maszyną stanów&quot;.<br /><br />Co do czujnika DHT22 nadal mam problem z jednorazowym odczytem w &quot;maszynie stanów&quot;. Co zrobiłem. Program poniżej prawidłowo podaje temperaturę i wilgotność przy starcie (listing 1), ale już jego implementacja w &quot;maszynie stanów&quot; daje wynik &quot;error&quot; (UART) i 0, 0 na LCD oraz powoduje &quot;rozjechanie się&quot; programu (listing 2) O czym zapomniałem?<br /><br />listing 1:<br />[syntax=c]#include &lt;stdio.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;DHT22/dht.h&quot;<br />#include &quot;MK_USART/mkuart.h&quot;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;I2C_TWI/i2c_twi.h&quot;<br /><br />char printbuff&#91;100&#93;;<br />float temperature = 0;<br />float humidity = 0;<br /><br />int main(void){<br /><br />USART_Init(__UBRR);<br />i2cSetBitrate(100);<br />lcd_init();<br />sei();<br /><br />if(dht_gettemperaturehumidity(&amp;temperature, &amp;humidity) != -1) {<br /><br />itoa(temperature, printbuff, 10);<br />uart_puts(&quot;temperature: &quot;); uart_puts(printbuff); uart_puts(&quot;C&quot;);uart_puts(&quot;\r\n&quot;);<br /><br />itoa(humidity, printbuff, 10);<br />uart_puts(&quot;humidity: &quot;); uart_puts(printbuff); uart_puts(&quot;%RH&quot;);uart_puts(&quot;\r\n&quot;);<br />}<br />else{<br />uart_puts(&quot;error&quot;); uart_puts(&quot;\r\n&quot;);<br />}<br />uart_puts(&quot;\r\n&quot;);<br /><br />lcd_locate(0,0);<br />lcd_int(temperature);<br />lcd_locate(1,0);<br />lcd_int(humidity);<br />}[/syntax]<br />listing 2:<br />[syntax=c]else if(wywolanie == 53 &amp;&amp; DHTBit == 1){<br /><br />Timer1 = 1500;<br />cy1=1;cy2=2;cy3=3;cy4=4;<br /><br />if(dht_gettemperaturehumidity(&amp;temperature, &amp;humidity) != -1) {<br /><br />itoa(temperature, printbuff, 10);<br />uart_puts(&quot;temperature: &quot;); uart_puts(printbuff); uart_puts(&quot;C&quot;);uart_puts(&quot;\r\n&quot;);<br />itoa(humidity, printbuff, 10);<br />uart_puts(&quot;humidity: &quot;); uart_puts(printbuff); uart_puts(&quot;%RH&quot;);uart_puts(&quot;\r\n&quot;);<br />}<br />else{<br />uart_puts(&quot;error&quot;); uart_puts(&quot;\r\n&quot;);<br />}<br />uart_puts(&quot;\r\n&quot;);<br /><br />lcd_locate(1,10);<br />lcd_int(temperature);<br />lcd_locate(1,13);<br />lcd_int(humidity);<br /><br />DHTBit = 0;<br />}[/syntax]<br />DHTBit == 1 na starcie.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 45 minutach ]</span></strong><br /><br />Doczytałem, że cały proces komunikacji z czujnikiem trwa powyżej 2s <!-- m --><a class="postlink" href="http://www.tinkerduck.com/dht22-sensor-fun/" >http://www.tinkerduck.com/dht22-sensor-fun/</a><!-- m --> Moje wywołania powtarzają się co 1 sekundę, więc to za mało na pomiar (wystarczy na odczyt). Przeniosłem więc funkcję pomiaru do main, przed pętlę while(1) co dało  prawidłowy odczyt z czujnika po spełnieniu warunku if(wywolanie == 53), ale niestety jednorazowy. Pomiar musi się powtarzać co 2 sekundy w jakiejś części programu. Czy macie szanowni Koledzy jakiś pomysł?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 27 gru 2015, o 21:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-12-27T18:19:38+01:00</updated>
<published>2015-12-27T18:19:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148973#p148973</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148973#p148973"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148973#p148973"><![CDATA[
hej<br />to zrób tak:<br /> <br />[syntax=c]if(wywolanie==50){<br />    dht_gettemperaturehumidity(&amp;temperature, &amp;humidity);<br />}[/syntax]<br /><br />Jeśli ta funkcja działa, to dostaniesz to co chcesz.<br /><br />Ale proponuje zrobić coś jeszcze, dodaj jeden bit, który będzie ustawiany na starcie tej funkcji, aby nie byli sytuacji, ze Twoje &quot;wywołanie&quot; będzie w ciągu kilku sekund cały czas wywoływało dht_gettemperature.<br /><br /><br />[syntax=c]if(wywolanie==50 &amp;&amp; DTHbit == 1){<br />    dht_gettemperaturehumidity(&amp;temperature, &amp;humidity);<br />DTHbit = 0; <br />}[/syntax]<br /><br />DTHbit == 1 ustawiaj gdzieś przed ta zależnością (wywolanie==50).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 27 gru 2015, o 18:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2015-12-27T17:52:27+01:00</updated>
<published>2015-12-27T17:52:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148970#p148970</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148970#p148970"/>
<title type="html"><![CDATA[Re: DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148970#p148970"><![CDATA[
No ale co Ci się dzieje?<br />Bo skoro działa w pętli głównej to dlaczego ma nie działać jednorazowe wywołanie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 27 gru 2015, o 17:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2015-12-27T17:34:28+01:00</updated>
<published>2015-12-27T17:34:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148968#p148968</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148968#p148968"/>
<title type="html"><![CDATA[DHT22 - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14005&amp;p=148968#p148968"><![CDATA[
Witam!<br />Mam problem z jednorazowym odczytem temperatury i wilgotności z czujnika DHT22. Korzystam z ogólniedostępnej biblioteki Davide Gironi, 2012, źródło: <!-- m --><a class="postlink" href="http://code.google.com/p/davidegironi/downloads/detail?name=avr_lib_dht_03.zip" >http://code.google.com/p/davidegironi/d ... dht_03.zip</a><!-- m --><br />Program przykładowy zamieszczony wraz z kodem bibliotek działa dobrze i odczytuje w pętli dane z czujnika. <br />[syntax=c]int main(void)<br />{<br />char printbuff&#91;100&#93;;<br /><br />//init uart<br />USART_Init(__UBRR);             // inicjalizacja UART<br /><br />//init interrupt<br />sei();<br /><br />#if DHT_FLOAT == 0<br />int8_t temperature = 0;<br />int8_t humidity = 0;<br />#elif DHT_FLOAT == 1<br />float temperature = 0;<br />float humidity = 0;<br />#endif<br /><br />for (;;) {<br />if(dht_gettemperaturehumidity(&amp;temperature, &amp;humidity) != -1) {<br /><br />#if DHT_FLOAT == 0<br />itoa(temperature, printbuff, 10);<br />#elif DHT_FLOAT == 1<br />dtostrf(temperature, 3, 3, printbuff);<br />#endif<br />uart_puts(&quot;temperature: &quot;); uart_puts(printbuff); uart_puts(&quot;C&quot;);uart_puts(&quot;\r\n&quot;);<br />#if DHT_FLOAT == 0<br />itoa(humidity, printbuff, 10);<br />#elif DHT_FLOAT == 1<br />dtostrf(humidity, 3, 3, printbuff);<br />#endif<br />uart_puts(&quot;humidity: &quot;); uart_puts(printbuff); uart_puts(&quot;%RH&quot;);uart_puts(&quot;\r\n&quot;);<br /><br />} else {<br />uart_puts(&quot;error&quot;); uart_puts(&quot;\r\n&quot;);<br />}<br /><br />uart_puts(&quot;\r\n&quot;);<br /><br />_delay_ms(1500);<br />}<br /><br />return 0;<br />}[/syntax]<br />Chciałbym jednak, aby dane odczytane były tylko jednorazowo gdy spełniony jest pewien warunek np. if(wywolanie==50) odczyt. Jak korzystać z funkcji:<br />[syntax=c]dht_gettemperaturehumidity(&amp;temperature, &amp;humidity)[/syntax]<br />Proszę o pomoc<br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 27 gru 2015, o 17:34</p><hr />
]]></content>
</entry>
</feed>