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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-10-01T18:38:22+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=16351&amp;mode</id>
<entry>
<author><name><![CDATA[Tomek86]]></name></author>
<updated>2016-10-01T18:38:22+01:00</updated>
<published>2016-10-01T18:38:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170132#p170132</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170132#p170132"/>
<title type="html"><![CDATA[Re: wyświetlanie menu +pilot RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170132#p170132"><![CDATA[
ciężko jest mi coś więcej doradzić ... kod który tu przedstawiłeś jest niekompletny, w sumie do tematu menu należało by podejść inaczej.<br /><br />spróbuj  przebudować swój kod w taki sposób:<br /><br />[syntax=c]typedef enum {<br />WLACZ_POMPKE,<br />WYLACZ_POMPKE<br />}POMPKA;<br />...<br /><br />void wybor_opcji_menu(POMPKA zmienna){<br />switch(zmienna)<br />{<br />case WLACZ_POMPKE:<br />//jakiś kod do obsługi gdy pompka ma być włączona<br />break;<br />case WYLACZ_POMPKE:<br />//jakiś kod do obsługi gdy pompka ma być wyłączona<br />break;<br />default:<br />//sekcja dyfault może być zaimplementowana w przypadku wystąpienia jakiejś innej sytuacji, a chcemy powiadomić o tym urzytkownika.<br />break;<br />}<br />}<br />...<br />void rysuj_menu( void ){<br />//kod na potrzebę wyrysowania menu<br />}[/syntax]<br /><br />Po wyświetleniu menu oczekuje na wykonanie się przerwania do obsługi pilota podczerwieni (tu tylko domyślam się, że poruszasz się po menu przy pomocy pilota)<br />I po odebraniu odpowiedniego &quot;kodu guzika&quot; przekazujesz odpowiedni typ enum POMPKA do funkcji void wybor_opcji_menu(POMPKA zmienna).<br />Powinno to być znacznie czytelniejsze <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />pozdrawiam,<br />Tomek.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12012">Tomek86</a> — 1 paź 2016, o 18:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mariuszA1985]]></name></author>
<updated>2016-10-01T16:33:49+01:00</updated>
<published>2016-10-01T16:33:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170126#p170126</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170126#p170126"/>
<title type="html"><![CDATA[Re: wyświetlanie menu +pilot RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170126#p170126"><![CDATA[
Wyzerowanie zmiennej command spowodowało że program sie zawiesza lub zapętla na drugim do while:<br /><br />[syntax=c]void wyswietlanie_menu(void) {<br />uint8_t flaga = 0;<br />do {<br />lcd_locate(0, 0);<br />lcd_str(&quot;zalaczania pompki&quot;);<br />wyswietlanie_czasu_na_lcd(zalaczania_pompki.godzina,<br />zalaczania_pompki.minuty, zalaczania_pompki.sekundy, 1);<br />if (Ir_key_press_flag) {<br /><br />if (command == 40)<br />flaga = 1;<br /><br />} else {<br />Ir_key_press_flag = 0;<br />command = -1;<br />flaga = 0;<br />}<br />if (flaga == 1)<br />break;<br /><br />} while (1);<br /><br />flaga = 0;<br />command=-1;<br />do {<br />lcd_locate(0, 0);<br />lcd_str(&quot;wylaczania pompki&quot;);<br />wyswietlanie_czasu_na_lcd(wylaczania_pompki.godzina,<br />wylaczania_pompki.minuty, wylaczania_pompki.sekundy, 1);<br />if (Ir_key_press_flag) {<br /><br />if (command == 40)<br />flaga = 1;<br />} else {<br />Ir_key_press_flag = 0;<br />command = -1;<br />flaga = 0;<br />}<br />if (flaga == 1) {<br />break;<br />}<br /><br />} while (1);<br /><br />flaga = 0;<br />command=-1;<br /><br />do {<br /><br />if (Ir_key_press_flag) {<br /><br />if (command == 40)<br />flaga = 1;<br /><br />} else {<br />Ir_key_press_flag = 0;<br />command = -1;<br />flaga = 0;<br />}<br />if (flaga == 1) {<br />break;<br />}<br />} while (1);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11179">mariuszA1985</a> — 1 paź 2016, o 16:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tomek86]]></name></author>
<updated>2016-10-01T16:03:54+01:00</updated>
<published>2016-10-01T16:03:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170122#p170122</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170122#p170122"/>
<title type="html"><![CDATA[Re: wyświetlanie menu +pilot RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170122#p170122"><![CDATA[
Zapomniałem dopisać, że tak jak kolega @Rafał555 napisał, że musisz wyzerować zmienną command, np command = -1.<br /><br />Bo zwróć uwagę, kiedy na pilocie wciśniesz guzik z kodem 40, to przy kolejnej pętli do..while, ta zmienna ma dalej 'command=40'.<br /><br />Więc dodatkowo musisz &quot;zerować&quot; (bądź ustawić inną wartość) zmienną command.<br /><br />Bo jak tego nie zrobisz, to druga pętla w lini 32.[syntax=c]if (command == 40[/syntax] wykona się <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> i zostanie ustawiona flaga = 1;<br /><br />pozdrawiam,<br />Tomek.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12012">Tomek86</a> — 1 paź 2016, o 16:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mariuszA1985]]></name></author>
<updated>2016-10-01T15:39:03+01:00</updated>
<published>2016-10-01T15:39:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170115#p170115</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170115#p170115"/>
<title type="html"><![CDATA[Re: wyświetlanie menu +pilot RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170115#p170115"><![CDATA[
Zrobiłem tak jak poradził mi kolega Tomek86. Teraz kod wygląda tak:<br /><br />[syntax=c]void wyswietlanie_menu(void) {<br />uint8_t flaga = 0;<br />do {<br />lcd_locate(0, 0);<br />lcd_str(&quot;zalaczania pompki&quot;);<br />wyswietlanie_czasu_na_lcd(zalaczania_pompki.godzina,<br />zalaczania_pompki.minuty, zalaczania_pompki.sekundy, 1);<br />if (Ir_key_press_flag) {<br /><br />if (command == 40)<br />flaga = 1;<br /><br />} else {<br />Ir_key_press_flag = 0;<br />command = -1;<br />flaga = 0;<br />}<br />if (flaga == 1)<br />break;<br /><br />} while (1);<br /><br />flaga = 0;<br /><br />do {<br />lcd_locate(0, 0);<br />lcd_str(&quot;wylaczania pompki&quot;);<br />wyswietlanie_czasu_na_lcd(wylaczania_pompki.godzina,<br />wylaczania_pompki.minuty, wylaczania_pompki.sekundy, 1);<br />if (Ir_key_press_flag) {<br /><br />if (command == 40)<br />flaga = 1;<br />} else {<br />Ir_key_press_flag = 0;<br />command = -1;<br />flaga = 0;<br />}<br />if (flaga == 1) {<br />break;<br />}<br /><br />} while (1);<br /><br />flaga = 0;<br /><br />do {<br /><br />if (Ir_key_press_flag) {<br /><br />if (command == 40)<br />flaga = 1;<br /><br />} else {<br />Ir_key_press_flag = 0;<br />command = -1;<br />flaga = 0;<br />}<br />if (flaga == 1) {<br />break;<br />}<br />} while (1);<br />}[/syntax]<br /><br />i co dziwne efekt jest ten sam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11179">mariuszA1985</a> — 1 paź 2016, o 15:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2016-10-01T15:05:55+01:00</updated>
<published>2016-10-01T15:05:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170114#p170114</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170114#p170114"/>
<title type="html"><![CDATA[Re: wyświetlanie menu +pilot RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170114#p170114"><![CDATA[
A po co Ci tyle pętli while ?<br /><br />Wysłane z mojego LIVE przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 1 paź 2016, o 15:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tomek86]]></name></author>
<updated>2016-10-01T15:02:10+01:00</updated>
<published>2016-10-01T15:02:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170113#p170113</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170113#p170113"/>
<title type="html"><![CDATA[Re: wyświetlanie menu +pilot RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170113#p170113"><![CDATA[
Po spełnieniu warunku w lini 18. &quot;flaga == 1&quot;, następuje wyjście  z pętli i przejście do drugiej pętli do..while, niestety zmienna flaga=1, (bo nie została ustawiona na 0), dlatego pętla 2 do..while &quot;samoczynnie&quot;, kończy swój cykl przed wcześnie.<br /><br />Zauważ, że przy 3 pętlą do..while masz już ustawione flaga=0 <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />wystarczy zmienną &quot;flaga&quot; wyzerować przed 2 pętlą do..while.<br /><br />pozdrawiam,<br />Tomek.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12012">Tomek86</a> — 1 paź 2016, o 15:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mariuszA1985]]></name></author>
<updated>2016-10-01T14:22:30+01:00</updated>
<published>2016-10-01T14:22:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170110#p170110</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170110#p170110"/>
<title type="html"><![CDATA[Re: wyświetlanie menu +pilot RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170110#p170110"><![CDATA[
Niestety to rozwiązanie zapętla program na drugiej pętli do while.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11179">mariuszA1985</a> — 1 paź 2016, o 14:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafał555]]></name></author>
<updated>2016-10-01T12:16:54+01:00</updated>
<published>2016-10-01T12:16:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170105#p170105</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170105#p170105"/>
<title type="html"><![CDATA[Re: wyświetlanie menu +pilot RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170105#p170105"><![CDATA[
W tym warunku gdzie ustawiasz flagę wyzeruj zmienną command - tak na szybko co rzuca mi się w oczy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2697">Rafał555</a> — 1 paź 2016, o 12:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mariuszA1985]]></name></author>
<updated>2016-10-01T10:48:34+01:00</updated>
<published>2016-10-01T10:48:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170092#p170092</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170092#p170092"/>
<title type="html"><![CDATA[wyświetlanie menu +pilot RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16351&amp;p=170092#p170092"><![CDATA[
Witam, <br />programowaniem mikroprocesorów zajmuje się od niedawna wiec proszę o wyrozumiałość.<br />Napisałem krótką funkcję do wyświetlania na lcd menu (void wyswietlanie_menu(void)), która ma prezentować wprowadzony wcześniej czas załączania i wyłączania pompki do akwarium. Po naciśnięciu klawisza pilota (command =40) program powinien przeskakiwać do następnego wyświetlanego parametru. Problem polega na tym, że samoczynnie bez oczekiwania na klawisz pilota, program wychodzi z pętli do while. Dzieje się tak w przed ostatniej pętli do while która wyświetla czas wylaczania pompki.<br />Proszę o pomoc w rozwiązaniu tego problemu. <br /><br />[syntax=c]void wyswietlanie_menu(void) {<br />uint8_t flaga = 0;<br />do {<br />lcd_locate(0, 0);<br />lcd_str(&quot;zalaczania pompki&quot;);<br />wyswietlanie_czasu_na_lcd(zalaczania_pompki.godzina,<br />zalaczania_pompki.minuty, zalaczania_pompki.sekundy, 1);<br />if (Ir_key_press_flag) {<br /><br />if (command == 40)<br />flaga = 1;<br /><br />} else {<br />Ir_key_press_flag = 0;<br />command = -1;<br />flaga = 0;<br />}<br />if (flaga == 1)<br />break;<br /><br />} while (1);<br /><br />do {<br />lcd_locate(0, 0);<br />lcd_str(&quot;wylaczania pompki&quot;);<br />wyswietlanie_czasu_na_lcd(wylaczania_pompki.godzina,<br />wylaczania_pompki.minuty, wylaczania_pompki.sekundy, 1);<br />if (Ir_key_press_flag) {<br /><br />if (command == 40)<br />flaga = 1;<br />} else {<br />Ir_key_press_flag = 0;<br />command = -1;<br />flaga = 0;<br />}<br />if (flaga == 1)<br />break;<br /><br />} while (1);<br />flaga=0;<br />do {<br /><br />if (Ir_key_press_flag) {<br /><br />if (command == 40)<br />flaga = 1;<br /><br />} else {<br />Ir_key_press_flag = 0;<br />command = -1;<br />flaga = 0;<br />}<br />if (flaga == 1)<br />break;<br /><br />} while (1);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11179">mariuszA1985</a> — 1 paź 2016, o 10:48</p><hr />
]]></content>
</entry>
</feed>