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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-04-06T06:37:48+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2784&amp;mode</id>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-06T06:37:48+01:00</updated>
<published>2013-04-06T06:37:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33566#p33566</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33566#p33566"/>
<title type="html"><![CDATA[Re: Problem z menu i obsługą klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33566#p33566"><![CDATA[
Ok dzięki ze informację. Chyba odnalazłem przyczynę nie działania mojej klawiatury. Po zmianie częstotliwości taktowania uP z 1MHz i preskaler równy 8,  na 8MHz to zwiększyłem preskaler do 64 by osiągnąć taką samą wartość po podzieleniu F_CPU/preskaler czyli 125000. Lecz efekt by taki że pomiar miał duże  wahania i był nie dokładny:(<br />Coś mnie naszło żeby sprawdzić w drugą stronę i dałem preskaler równy 2 i to pomogło. Pomiar stał się stabilny (na wyświetlaczu już się nie wahał z tak dużymi zakresami) i pozycje po menu już nie skaczą tylko jedno przyciśnięcie klawisza wywołuje jedną operację <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=493">Jeżyk-1</a> — 6 kwi 2013, o 06:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2013-04-05T22:48:12+01:00</updated>
<published>2013-04-05T22:48:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33545#p33545</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33545#p33545"/>
<title type="html"><![CDATA[Re: Problem z menu i obsługą klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33545#p33545"><![CDATA[
Powinno być dokładnie jak teraz napisałeś <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=225">Malutki_27</a> — 5 kwi 2013, o 22:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-05T22:41:23+01:00</updated>
<published>2013-04-05T22:41:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33543#p33543</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33543#p33543"/>
<title type="html"><![CDATA[Re: Problem z menu i obsługą klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33543#p33543"><![CDATA[
Czyli ma być tak:<br />[syntax=c]for (u08 x=0; x&lt;6; x++) if ((pom_wartosc&#91;x&#93;&lt;ADC_pomiar) &amp;&amp; (980 &gt; ADC_pomiar)) key++;[/syntax]<br />?<br />A nie tak jak było wcześniej z jednym (AND) &amp;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 5 kwi 2013, o 22:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[barney]]></name></author>
<updated>2013-04-05T22:33:44+01:00</updated>
<published>2013-04-05T22:33:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33541#p33541</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33541#p33541"/>
<title type="html"><![CDATA[Re: Problem z menu i obsługą klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33541#p33541"><![CDATA[
<div class="quotetitle">Jeżyk-1 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">Malutki_27 napisał(a):</div><div class="quotecontent">Jak ci jest wygodniej ....... ważne żeby podział był spójny i logiczny dla ciebie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Ojjj jeżyk <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> tyle znalazłem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />[syntax=c]49.            for (u08 x=0; x&lt;6; x++) if ((pom_wartosc&#91;x&#93;&lt;ADC_pomiar) &amp; (980 &gt; ADC_pomiar)) key++;[/syntax]<br />a chodzi o znaczek<br />[syntax=c]&amp;[/syntax]<br /></div><br /><br />Nie bardzo wiem o co chodzi z tym znakiem <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /></div><br /><br />Chodzi o to, że powinieneś wykonywać tutaj AND logiczny, a nie bitowy. Tutaj to będzie działać, ale coś takiego:<br />[syntax=c]if ((pom_wartosc&#91;x&#93;&lt;ADC_pomiar) &amp; ((980 &gt; ADC_pomiar)&lt;&lt;1))[/syntax]<br />nie spełni się nigdy <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=973">barney</a> — 5 kwi 2013, o 22:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-05T13:51:40+01:00</updated>
<published>2013-04-05T13:51:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33479#p33479</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33479#p33479"/>
<title type="html"><![CDATA[Re: Problem z menu i obsługą klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33479#p33479"><![CDATA[
Dodatkowa zauważyłem że teraz 2 ostatnie klawisze nie działają. Zastosowałem opóźnieniu _delay_ms(200) by zobaczyć co się dzieje w zmiennej ADC_pomiar i dosyć duże wahania są <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> Jak dobrze widzę to bez wciśniętego przycisku waha się między 920 a 1023 <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 5 kwi 2013, o 13:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-05T12:10:11+01:00</updated>
<published>2013-04-05T12:10:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33446#p33446</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33446#p33446"/>
<title type="html"><![CDATA[Re: Problem z menu i obsługą klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33446#p33446"><![CDATA[
<div class="quotetitle">Malutki_27 napisał(a):</div><div class="quotecontent"><br />Jak ci jest wygodniej ....... ważne żeby podział był spójny i logiczny dla ciebie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Ojjj jeżyk <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> tyle znalazłem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />[syntax=c]49.            for (u08 x=0; x&lt;6; x++) if ((pom_wartosc&#91;x&#93;&lt;ADC_pomiar) &amp; (980 &gt; ADC_pomiar)) key++;[/syntax]<br />a chodzi o znaczek<br />[syntax=c]&amp;[/syntax]<br /></div><br /><br />Nie bardzo wiem o co chodzi z tym znakiem <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><div class="quotetitle">Malutki_27 napisał(a):</div><div class="quotecontent"><br />Zastanów się nad uzyciem struktur bo masz ogrom pojedynczych zmiennych w których sie czlowiek może pogubić przykładem mogą być np klawisze <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />[syntax=c]typedef struct {<br />uint8_t value;<br />uint8_t lock;<br />uint8_t nazwa;<br />}TKlaw;<br />enum key {NIC, RIGHT, LEFT, UP, DOWN, OK, ESC};<br />enum {false,true};<br />TKlaw klawisze&#91;6&#93; = {{160,0,RIGHT},{355,10,LEFT},{525,10,UP},{655,10,DOWN},{785,10,OK},{885,10,ESC}};[/syntax]<br />A później korzystasz na przykład tak:<br />[syntax=c]if(klawisze&#91;DOWN&#93;.lock ) klawisze&#91;DOWN&#93;.lock = false;[/syntax]<br />Oczywiście jest to tylko propozycja z której możesz skorzystać bądź nie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br /><br />Pewnie dużo lepiej to wygląda od tego co jest teraz. Ale ta funkcja obsługi klawiszy co jest teraz działa dopóki nie zwiększyłem fusów na 8Mhz:(<br />Kod mam skrócony do takiej postać aktualnie :<br />[syntax=c]#include &lt;avr/io.h&gt;<br />    #include &lt;util/delay.h&gt;<br />    #include &lt;avr/pgmspace.h&gt;<br />    #include &lt;avr/interrupt.h&gt;<br />    #include &quot;lcd.h&quot;<br />    typedef uint8_t  u08;<br />    typedef uint16_t u16;<br /><br />    #define PIN_ADC 7<br />    volatile u16 ADC_pomiar;  //aktualny pomiar ADC<br />    volatile u08 flaga_klaw;  //flaga żądania analizy klawiatury<br /><br />    u08 przycisk_wcisniety;<br /><br />    enum key {NIC, RIGHT, LEFT, UP, DOWN, OK, ESC};<br />    u08 rozpisz_klawisze (void)<br />    {<br />            u08 key=0;<br />        const  u16 pom_wartosc                  &#91;6&#93; = {160,   355,  525, 665,  785, 885};<br />        const  u08 wartosci_klawiszy    &#91;6&#93; = {RIGHT, LEFT, UP,  DOWN, OK,  ESC};<br />        static u08 key_lock &#91;6&#93; = {0, 0, 0, 0, 0, 0};<br />        static u08 debounce_poziom=0, debounce_licznik=0;<br />        if (flaga_klaw)<br />        {<br /><br />            flaga_klaw=0;<br />            for (u08 x=0; x&lt;6; x++) if ((pom_wartosc&#91;x&#93;&lt;ADC_pomiar) &amp; (980 &gt; ADC_pomiar)) key++;<br />            for (u08 x=0; x&lt;6; x++) if (x!=(key-1)) key_lock&#91;x&#93;=0;  // Usuwanie blokad dla puszczonych klawiszy<br />            if (key==debounce_poziom)<br />                    debounce_licznik++;<br />            else<br />            {<br />                    debounce_licznik=0;<br />                    debounce_poziom=key;<br />            }<br />            if ((debounce_licznik&gt;=10) &amp;&amp; key &amp;&amp; (!key_lock&#91;key-1&#93;)) // Jezeli wcisnieto klawisz i nie ma blokady<br />            {<br /><br />                    key_lock&#91;key-1&#93;=1;<br />                    return wartosci_klawiszy&#91;key-1&#93;;<br />            }<br />        }<br /><br />        return NIC;                                                 // Jezeli nie wcisnieto klawisza<br />    }<br /><br />    inline void ustawienia(void)<br />    {<br /><br />    //--------------------Ustawienie ADC<br />        ADMUX  |= (1&lt;&lt;REFS1)|(1&lt;&lt;REFS0);            //napięcie odniesienia 2,56V<br />        ADMUX   |= PIN_ADC;<br />        //ADMUX  |= (1&lt;&lt;ADLAR);  //wynik wyrównaj do lewej<br />        ADCSRA |= (1&lt;&lt;ADEN)    //ADEN=1 włączenie przetwornika ADC)<br />               | (1&lt;&lt;ADSC)    //start pierwszego pomiaru<br />               | (1&lt;&lt;ADATE)    //włącz Free Running Mode<br />               | (1&lt;&lt;ADIE)    //włącz przerwania z ADC<br />               | (1&lt;&lt;ADPS2)<br />               | (1&lt;&lt;ADPS1)  ; //ustawienie preskalera na <br />              // | (1&lt;&lt;ADPS0);<br />    //--------------------Ustawienie ADC - KONIEC<br />        sei();<br />        lcd_init();<br />    }<br />    int main (void)<br />    {<br />        _delay_ms(10);<br /><br />        ustawienia();<br /><br />        while(1)<br />        {<br />            przycisk_wcisniety=rozpisz_klawisze();<br />            _delay_ms(100);<br />            lcd_locate(0,10);<br />            lcd_int(przycisk_wcisniety);<br />            lcd_locate(1,10);<br />            lcd_int(ADC_pomiar);<br />            lcd_str(&quot;    &quot;);<br />        }<br />    }<br /><br />    //--------------------Przerwanie ADC<br />    ISR(ADC_vect)<br />        {<br />            if (!flaga_klaw)<br />            {<br />                    ADC_pomiar=ADCW;<br />                    flaga_klaw=1;<br />            }<br />        }<br />    //--------------------Przerwanie ADC - KONEC[/syntax]<br />Jest tu sama obsługa Klawiatury i wyświetlanie na LCD informacji o wciśniętym przycisku. To co jest zbędne to usunąłem by nie zaciemniać kodu.<br />I program zachowuje się tak że co 4s pojawia się mignięcie jak by przycisk był wciśnięty. A wcześniej było tak że raz wcieknąłem przycisk i tylko raz mignął. <br />Zmieniłem preskaler ADC z 8 na 64 żeby było tak jak wcześniej przy 1MHz ale to nic nie dało <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 5 kwi 2013, o 12:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2013-04-05T11:02:51+01:00</updated>
<published>2013-04-05T11:02:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33427#p33427</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33427#p33427"/>
<title type="html"><![CDATA[Re: Problem z menu i obsługą klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33427#p33427"><![CDATA[
Jak ci jest wygodniej ....... ważne żeby podział był spójny i logiczny dla ciebie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Ojjj jeżyk <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> tyle znalazłem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />[syntax=c]49.            for (u08 x=0; x&lt;6; x++) if ((pom_wartosc&#91;x&#93;&lt;ADC_pomiar) &amp; (980 &gt; ADC_pomiar)) key++;[/syntax]<br />a chodzi o znaczek<br />[syntax=c]&amp;[/syntax]<br />Zastanów się nad uzyciem struktur bo masz ogrom pojedynczych zmiennych w których sie czlowiek może pogubić przykładem mogą być np klawisze <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />[syntax=c]typedef struct {<br />uint8_t value;<br />uint8_t lock;<br />uint8_t nazwa;<br />}TKlaw;<br />enum key {NIC, RIGHT, LEFT, UP, DOWN, OK, ESC};<br />enum {false,true};<br />TKlaw klawisze&#91;6&#93; = {{160,0,RIGHT},{355,10,LEFT},{525,10,UP},{655,10,DOWN},{785,10,OK},{885,10,ESC}};[/syntax]<br />A później korzystasz na przykład tak:<br />[syntax=c]if(klawisze&#91;DOWN&#93;.lock ) klawisze&#91;DOWN&#93;.lock = false;[/syntax]<br />Oczywiście jest to tylko propozycja z której możesz skorzystać bądź nie <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=225">Malutki_27</a> — 5 kwi 2013, o 11:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-05T09:38:27+01:00</updated>
<published>2013-04-05T09:38:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33415#p33415</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33415#p33415"/>
<title type="html"><![CDATA[Re: Problem z menu i obsługą klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33415#p33415"><![CDATA[
A czy funkcje przerywań też należy umieścić w osobnym pliku ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 5 kwi 2013, o 09:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-04-04T22:27:59+01:00</updated>
<published>2013-04-04T22:27:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33333#p33333</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33333#p33333"/>
<title type="html"><![CDATA[Re: Problem z menu i obsługą klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33333#p33333"><![CDATA[
<div class="quotetitle">Jeżyk-1 napisał(a):</div><div class="quotecontent"><br />Ok to zabieram się za podzielenie tego kodu tak jak proponujecie.<br /></div><br /><br />a jak będziesz miał po drodze jakieś pytania co do podziału to śmiało wal jak w dym - bo to WARTO jak najszybciej opanować ... to podstawa podstaw o której zwykle nie przeczytasz w żadnym kursie C no bo to taka podstawa, że nikomu nie chce się tego opisywać - no i tak koło się zamyka <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... dlatego zawziąłem się i w Bluebooku to opisałem od podszewki i z przykładami ładnymi w tabelkach nawet<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 kwi 2013, o 22:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-04T22:23:40+01:00</updated>
<published>2013-04-04T22:23:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33327#p33327</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33327#p33327"/>
<title type="html"><![CDATA[Re: Problem z menu i obsługą klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33327#p33327"><![CDATA[
Ok to zabieram się za podzielenie tego kodu tak jak proponujecie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 4 kwi 2013, o 22:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-04-04T22:17:15+01:00</updated>
<published>2013-04-04T22:17:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33324#p33324</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33324#p33324"/>
<title type="html"><![CDATA[Re: Problem z menu i obsługą klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33324#p33324"><![CDATA[
<div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />... ale przy takim szkielecie softu jedynie Ty wiesz, co się w nim dzieje... ....<br /></div><br /><br />No ja raczej w to bardzo wątpię - zresztą widać po pytaniach .... powiedziałbym nawet panie kolego jeżyk-1 - że w związku z Bluebookiem i tym forum, nawet niedopuszczalne jest wstawianie &quot;takiego czegoś&quot; na forum do analizy ... <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> bo to powiedziałbym - nawet brak szacunku dla pytająych, którzy starają się działać wg zasad dobrego programowania. Więc proszę o poprawę tego kodu albo w celu zadania pytania zaprezentowanie tylko wybranego fragmentu - kilku linijek które sprawiają ci kłopot.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 kwi 2013, o 22:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-04T21:51:23+01:00</updated>
<published>2013-04-04T21:51:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33312#p33312</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33312#p33312"/>
<title type="html"><![CDATA[Problem z menu i obsługą klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2784&amp;p=33312#p33312"><![CDATA[
Witam. <br />Troszkę robię mój program dzięki waszej pomocy lecz coś musiałem popsuć. <br />Wcześniej obsługa klawiszy działała bez problemu. I nadal działa, Ponieważ wywaliłem wszystko i zostawiłem obsługę klawiszy i działa jak ma, czyli nie ważne jak długo trzymam klawisz na chwile pojawia się tylko informacja o wciśniętym sygnale ale w moim menu to już nie dział. Przytrzymam klawisz to skacze po całym menu. Próbowałem coś sam se poradzić z tym ale, mi nie wychodzi. <br /><br />tak wygląda program: <br />[syntax=c]#include &lt;avr/io.h&gt;<br />    #include &lt;util/delay.h&gt;<br />    #include &lt;avr/pgmspace.h&gt;<br />    #include &lt;avr/interrupt.h&gt;<br />    #include &quot;lcd.h&quot;<br />#include &quot;regulator_grzalki.c&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br />    typedef uint8_t  u08;<br />    typedef int8_t  i08;<br />    typedef uint16_t u16;<br /><br />    #define PIN_ADC 7//pin do którego podłączączona jest klawiatura<br />    volatile u16 ADC_pomiar;  //aktualny pomiar ADC<br />    volatile u08 flaga_klaw;  //flaga żądania analizy klawiatury<br /><br /><br />    volatile i08 sek = 0;//zmienna sekund<br />    i08 min = 0;//zmienna minut<br />    i08 godz = 0;//zmienna godzin<br />    volatile u08 flag_timer2;// flaga tyknięcia timera co 1 sekundę<br /><br />    u08 przycisk_wcisniety;<br />    u08 grzanie_chlodzenie;//zmienna decydująca o grzaniu lub chłodzeniu 1=grzanie 2=chłodzenie 0 nic<br />    i08 moc_g;//zmienna % mocy grzania<br />    i08 moc_w;//zmienna % mocy wiana wentylatora<br /><br />//Zmienne od pomiaru temperatury<br />    volatile uint8_t flag_term;// flaga tyknięcia timera co 1 sekundę<br />    void display_temp(u08 x, u08 y);<br />    u08 czujniki_cnt;// ilość czujników na magistrali<br />    u08 subzero, cel, cel_fract_bits;//zmienne znaku(+/-) stopnie XX,0 i 00,X<br />    u08 temp;<br /><br /><br />    enum key {NIC, RIGHT, LEFT, UP, DOWN, OK, ESC};<br />    u08 rozpisz_klawisze (void)<br />    {<br />            u08 key=0;<br />        const  u16 pom_wartosc                  &#91;6&#93; = {160,   355,  525, 665,  785, 885};<br />        const  u08 wartosci_klawiszy    &#91;6&#93; = {RIGHT, LEFT, UP,  DOWN, OK,  ESC};<br />        static u08 key_lock &#91;6&#93; = {0, 0, 0, 0, 0, 0};<br />        static u08 debounce_poziom=0, debounce_licznik=0;<br />        if (flaga_klaw)<br />        {<br /><br /><br /><br />            flaga_klaw=0;<br />            for (u08 x=0; x&lt;6; x++) if ((pom_wartosc&#91;x&#93;&lt;ADC_pomiar) &amp; (980 &gt; ADC_pomiar)) key++;<br />            for (u08 x=0; x&lt;6; x++) if (x!=(key-1)) key_lock&#91;x&#93;=0;  // Usuwanie blokad dla puszczonych klawiszy<br />            if (key==debounce_poziom)<br />                    debounce_licznik++;<br />            else<br />            {<br />                    debounce_licznik=0;<br />                    debounce_poziom=key;<br />            }<br />            if ((debounce_licznik&gt;=10) &amp;&amp; key &amp;&amp; (!key_lock&#91;key-1&#93;)) // Jezeli wcisnieto klawisz i nie ma blokady<br />            {<br /><br /><br />                    key_lock&#91;key-1&#93;=1;<br />                    return wartosci_klawiszy&#91;key-1&#93;;<br />            }<br />        }<br />            //lcd_locate(1,10);<br />            //lcd_int(0);<br />        return NIC;                                                 // Jezeli nie wcisnieto klawisza<br />    }<br /><br />    inline void ustawienia(void)<br />    {<br />//--------------------Ustawienia timera zegara<br />        TIMSK |=(1&lt;&lt;TOIE2);<br />        TCNT2 = 0x00;<br />        ASSR |=(1&lt;&lt;AS2);//async<br />        while (ASSR &amp; (1&lt;&lt;TCR2UB)); //poczekaj aż będzie można cokolwiek zmienić w TCCR2<br />        TCCR2 |=(1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);//1024<br />//--------------------Ustawienia timera zegara - KONIEC<br /><br />//--------------------Ustawienie ADC<br />        ADMUX  |= (1&lt;&lt;REFS1)|(1&lt;&lt;REFS0);            //napięcie odniesienia 2,56V<br />        ADMUX   |= PIN_ADC;<br />        //ADMUX  |= (1&lt;&lt;ADLAR);  //wynik wyrównaj do lewej<br />        ADCSRA |= (1&lt;&lt;ADEN)    //ADEN=1 włączenie przetwornika ADC)<br />               | (1&lt;&lt;ADSC)    //start pierwszego pomiaru<br />               | (1&lt;&lt;ADATE)    //włącz Free Running Mode<br />               | (1&lt;&lt;ADIE)    //włącz przerwania z ADC<br />               | (1&lt;&lt;ADPS1)   //ustawienie preskalera na (ADPS1 i 2) 64<br />               | (1&lt;&lt;ADPS2);<br />//--------------------Ustawienie ADC - KONIEC<br />        sei();<br />        lcd_init();<br />    }<br />//--------------------Ustawienie timera regulatora mocy grzałki<br />    void t_moc_grzania(void){<br />            DDRD |= (1&lt;&lt;PD1);<br />        T_ZAR1_OFF;<br />            //przerwania układu detekcji zera<br />        MCUCR |= (1&lt;&lt;ISC01)|(1&lt;&lt;ISC00);// zbocze narastające<br />        GICR |= (1&lt;&lt;INT0);// odblokowanie INT0<br />        // TIMER0<br />        #define TIMER0_START TCCR0 |= (1&lt;&lt;CS01)// prescaler=8 (CS01)<br />        #define TIMER0_STOP TCCR0 &amp;= ~(1&lt;&lt;CS01)// prescaler off<br />        TCCR0 |= (1&lt;&lt;WGM01);// tryb CTC<br />        TIMSK |= (1&lt;&lt;OCIE0);// odblokowanie przerwania COMPARE MATCH<br />        OCR0 = __OCR_STEP;<br />    }<br />//--------------------Ustawienie timera regulatora mocy grzałki - KONIEC<br /><br />//--------------------Ustawienie timera regulatora mocy wiania<br />    void t_moc_wiania(void){<br />    //***** SPRZĘTOWY PWM - 1 KANAŁ OC0 (PB3) *******<br />   // ustawienie końcówki OC0 (PB3) sprzętowy PWM jako WYJŚCIE<br /><br />   // ustawienia TIMER2 w Fast PWM<br />   TCCR0 |= (1&lt;&lt;WGM01)|(1&lt;&lt;WGM00);// tryb Fast PWM<br />   TCCR0 |= (1&lt;&lt;COM01)|(1&lt;&lt;COM00);// set at TOP<br />   TCCR0 |= (1&lt;&lt;CS00);// preskaler = 1<br /><br />    }<br />//--------------------Ustawienie timera regulatora mocy wiania - KONIEC<br /><br />//--------------------Miganie podczas nastawy czasu<br />         void set_time (u08 ktora_czesc) // 0-h 1-m 2-s<br />        {<br />                if (ktora_czesc != 0) {<br />                // Godziny<br />                lcd_locate(1,0);<br />                lcd_str(&quot;  &quot;);}<br />                else{<br />                    lcd_locate(1,8);<br />                    lcd_str(&quot; GODZINY&quot;);<br />                lcd_locate(1,0);<br />                if (godz&lt;10) lcd_char('0');<br />                lcd_int(godz);<br />                }<br /><br />                if (ktora_czesc != 1) {<br />                // Minuty<br />                lcd_locate(1,3);<br />                lcd_str(&quot;  &quot;);}<br />                else{<br />                    lcd_locate(1,8);<br />                    lcd_str(&quot;  MINUTY&quot;);<br />                lcd_locate(1,3);<br />                    if (min&lt;10) lcd_char('0');<br />                    lcd_int(min);<br />                }<br /><br />                if (ktora_czesc != 2) {<br />                // Sekundy<br />                lcd_locate(1,6);<br />                lcd_str(&quot;  &quot;);}<br />                   else{<br />                    lcd_locate(1,8);<br />                    lcd_str(&quot; SEKUNDY&quot;);<br />                   lcd_locate(1,6);<br />                   if (sek&lt;10) lcd_char('0');<br />                   lcd_int(sek);<br />                   }<br /><br />                //dwukropek<br />                lcd_locate(1,5);<br />                lcd_str(&quot;:&quot;);<br />                lcd_locate(1,2);<br />                lcd_str(&quot;:&quot;);<br /><br />}<br />//--------------------Miganie podczas nastawy czasu - KONIEC<br />    void wyswietl_czas (void)<br />    {<br />        // Godziny<br />        lcd_locate(1,0);<br />        if (godz&lt;10) lcd_char('0');<br />        lcd_int(godz);<br /><br />        // Minuty<br />        lcd_locate(1,3);<br />        if (min&lt;10) lcd_char('0');<br />        lcd_int(min);<br /><br />        // Sekundy<br />        lcd_locate(1,6);<br />        if (sek&lt;10) lcd_char('0');<br />        lcd_int(sek);<br /><br />        //dwukropek<br />        if ((sek % 2) == 1 ){<br />        lcd_locate(1,5);<br />        lcd_str(&quot;:&quot;);<br />        lcd_locate(1,2);<br />        lcd_str(&quot;:&quot;);<br />        }<br />        else{<br />                lcd_locate(1,5);<br />                lcd_str(&quot; &quot;);<br />                lcd_locate(1,2);<br />                lcd_str(&quot; &quot;);<br /><br /><br />        }<br />        lcd_locate(1,8);<br />        lcd_str(&quot;        &quot;);<br /><br />    }<br /><br />//--------------------Zegar<br />    inline void zegar_przekrecenie (void)<br />    {<br />        if (sek&gt;59)<br />        {<br />            sek=0;<br />            if (++min&gt;59)<br />            {<br />                    min=0;<br />                    if (++godz&gt;23) godz=0;<br />            }<br />         }<br />    }<br />//--------------------Zegar - KONIEC<br /><br />//--------------------Opóźnienie<br />    u08 delay (u08 s)<br />    {<br />    static u08 x;<br /><br />    if(flag_timer2)<br />    {<br />    flag_timer2 = 0;<br />    if (x&gt;s){<br />    x=0;<br />    return 1;<br />    }<br />    else<br />    {<br />    x++;<br />    return 0;<br />    }<br /><br />    }<br />    return 0;  //tutaj zgubiłeś jeszcze jednego &quot;returna&quot;. Chyba nie zwracasz uwagi na ostrzeżenia kompilatora<br />    }<br />//--------------------Opóźnienie - KONIEC<br /><br />//--------------------Pomiar temperatury<br />u08 pomiar_temp(void){<br />if(flag_term) {/* sprawdzanie flagi tyknięć timera programowego co 1 sekundę */<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 0 sprawdzaj ilość dostępnych czujników */<br /><br />if( 0 == (sek%3) ) czujniki_cnt = search_sensors();<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 1 wysyłaj rozkaz pomiaru do czujników */<br />if( 1 == (sek%3) ) DS18X20_start_meas( DS18X20_POWER_PARASITE, NULL );<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 2 czyli jedną sekundę po rozkazie konwersji<br /> *  dokonuj odczytu i wyświetlania temperatur z 2 czujników jeśli są podłączone, jeśli nie<br /> *  to pokaż komunikat o błędzie<br /> */<br />if( 2 == (sek%3) ) {<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) )<br />temp = DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits);<br />else temp = 0;<br />}<br />flag_term=0;//zerujemy flagę aby tylko jeden raz w ciągu sekundy wykonać operacje<br />} // koniec sprawdzania flagi<br />    return temp;<br />}<br />void display_temp(u08 x, u08 y) {<br />lcd_locate(x,y);<br />if(subzero) lcd_str(&quot;-&quot;);/* jeśli subzero==1 wyświetla znak minus (temp. ujemna) */<br />else lcd_str(&quot; &quot;);/* jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia) */<br />lcd_int(cel);/* wyświetl dziesiętne części temperatury  */<br />lcd_str(&quot;.&quot;);/* wyświetl kropkę */<br />lcd_int(cel_fract_bits); /* wyświetl dziesiętne części stopnia */<br />lcd_str(&quot; C    &quot;); /* wyświetl znak jednostek (C - stopnie Celsiusza) */<br />}<br />//--------------------Pomiar temperatury - KONIEC<br /><br />    int main (void)<br />    {<br />        _delay_ms(10);<br />DDRB |= (1&lt;&lt;PB3);//Podanie wysokiego stanuy na port PB3 by wentylator nie<br />PORTB |= (1&lt;&lt;PB3); //włączałsię od razu przy uruchomieniu programu<br />        ustawienia();<br />        grzanie_chlodzenie=0;<br /><br />        czujniki_cnt = search_sensors();//sprawdzamy ile czujników DS18xxx widocznych jest na magistrali<br />        DS18X20_start_meas( DS18X20_POWER_PARASITE, NULL );//wysyłamy rozkaz wykonania pomiaru temperatury<br />        _delay_ms(750);//czekamy 750ms na dokonanie konwersji przez podłączone czujniki<br /><br />        if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) )//dokonujemy odczytu temperatury z pierwszego czujnika o ile został wykryty<br />        display_temp(0,5);//wyświetlamy temperaturę gdy czujnik wykryty<br />        else {<br />        lcd_locate(0,5);<br />        lcd_str(&quot; error &quot;);/* wyświetlamy informację o błędzie jeśli np brak czujnika lub błąd odczytu */<br />        }<br /><br />        while(1)//Pętla główna<br />        {<br />        if(grzanie_chlodzenie==1){//warunek sprawdzający czy grzać<br />        t_moc_grzania();//włączenie timera do regulacji mocy grzania<br />        moc_g=100;<br />        kanal1 = procent(moc_g);//% mocy grzania<br />        }<br />        if(grzanie_chlodzenie==2){//warunek sprawdzający czy chłodzić<br />        t_moc_wiania();//właczenie timera do regulacji mocy wiadnia<br />        OCR0 = procent_ch(moc_w);//zamiana mocy podanej w % na wartość od 0 do 255 OCR0<br /><br />        }<br />pomiar_temp();//Funkcja pomiaru temperaury<br /><br />            przycisk_wcisniety=rozpisz_klawisze();//funkcja obsługi klawiatury analogowej<br /><br />            zegar_przekrecenie();//zwiększanie czasu wywoływane przez TIMER2_OVF_vect<br /><br />            static i08 menu=0;//dafinicja zmiennej menu<br />            static u08 submenu_1, submenu_5;//definicja zmiennej pod submenu_1 i _5<br />            if(przycisk_wcisniety==RIGHT)menu++;//warunek sprawdzający czy przycisk RIGHT wciśnięty <br />if(menu&gt;5)menu=0;//jeżeli menu dojdzie do końca, zaczyna przesuwać się od nowa <br />            else if (przycisk_wcisniety==LEFT)menu--;//warunek sprawdzający czy przycisk LEFT wciśnięty <br />if(menu&lt;0)menu=5;//jeżeli menu dojdzie do początku, zaczyna przesuwać się od końca <br /><br /><br />switch(menu)<br />        {<br />        case 0://Menu #1<br />        lcd_locate(0,0);<br />        lcd_str(&quot;Temp:&quot;);//wyświetlenie napisu <br />        if(DS18X20_OK == temp) display_temp(0,5);//wyświetlenie temperatury.<br />        else {<br />            lcd_locate(0,5);//jeżeli błąd pojawia się napis error<br />            lcd_str(&quot;error&quot;);<br />        }<br />            wyswietl_czas();//w lini 1, wyświetlany czas<br /><br />        break;<br /><br /><br />        case 1://Menu #2<br /><br />            if(przycisk_wcisniety==OK) submenu_1++;//jeżeli OK wciśnięty przesuń się po submenu_1<br />if(submenu_1&gt;5)submenu_1=2;//jeżeli dojdzie do końca, wraca na początek<br />else if(przycisk_wcisniety==ESC){//Jeżeli wciśniemy ESC<br />        TIMSK |=(1&lt;&lt;TOIE2);//startujemy prace zegara<br />        menu=0;//wracamy do menu 1<br />        submenu_1=0;//wraca submenu_1 do pozycji 0<br />        lcd_cls();//czyszczenie LCD<br />            }<br /><br />        if(submenu_1 == 0){//jeżeli submenu 0 wyświetlać się ma zegar z aktualnym czasem<br />            lcd_locate(0,0);<br />            lcd_str(&quot;UST. ZEGARA.    &quot;);<br />            wyswietl_czas();}<br />        else{//jeżeli !=0  <br />        switch(submenu_1){//funkcja switch<br /><br />        case 1://submenu #1<br />            lcd_locate(1,0);<br />            lcd_str(&quot;STOP ZEGAR      &quot;);<br />            TIMSK &amp;= ~(1&lt;&lt;TOIE2);//Zablokowanie zegara<br />            break;<br /><br />        case 2://submenu #2<br />        set_time(0);//funkcja wygasza wartość min i sek i wyświetla napis Gorzyny<br /><br />            if(przycisk_wcisniety==UP){//Jeżeli wciśnięty UP<br />            godz++;//zwiększ wartość o 1 w zmiennej godz<br />            if(godz&gt;23)godz=0;//jeżeli osiągnie 23 to zaczyna od 0<br />            }<br />            if(przycisk_wcisniety==DOWN){//jeżeli wciśnięty DOWN<br />               godz--;//zmniejszanie wartości godzin<br />               if(godz&lt;0)godz=23;//jezeli osiągnie 0 wraca do 23<br />            }<br />            break;<br /><br />        case 3://submenu #3<br />        set_time(1);//Działa tak jak submenu #2 tylko dotyczy zmiany minut<br /><br />            if(przycisk_wcisniety==UP){<br />            min++;<br />            if(min&gt;59)min=0;<br />            }<br />            if(przycisk_wcisniety==DOWN){<br />            min--;<br />               if(min&lt;0)min=59;<br />            }<br />            break;<br /><br />        case 4://submenu #4<br />        set_time(2);//Działa tak jak submenu #2 tylko dotyczy zmiany sekund<br /><br />            if(przycisk_wcisniety==UP){<br />            sek++;<br />            if(sek&gt;59)sek=0;<br />            }<br />            if(przycisk_wcisniety==DOWN){<br />            sek--;<br />               if(sek&lt;0)sek=59;<br />            }<br />            break;<br /><br />        case 5://submenu #5<br />        wyswietl_czas();//Wyświetla ustawioną godzinę<br />        break;<br />        }//Koniec submenu_1<br />        }//Koniec else<br />        break;<br />        case 2://Menu #3<br />        lcd_locate(0,0);//wyświetla tylko napis<br />        lcd_str(&quot;UST. TEMP.      &quot;);<br />        break;<br /><br />        case 3://Menu #4<br />        lcd_locate(0,0);//wyświetla tylko napis<br />        lcd_str(&quot;UST. AUTO/MANUAL&quot;);<br />        break;<br /><br /><br />        case 4://Menu #5<br />        lcd_locate(0,0);//ustawienie mocy grzania. <br />        lcd_str(&quot;U. MOCY GRZANIA &quot;);<br />        lcd_locate(1,0);<br />        lcd_str(&quot;                &quot;);<br />        lcd_int(moc_g);<br /><br />        if(przycisk_wcisniety==UP){<br />        moc_g++;<br />        if(moc_g&gt;100)moc_g=0;<br />                    }<br />        if(przycisk_wcisniety==DOWN){<br />        moc_g--;<br />        if(moc_g&lt;0)moc_g=100;<br />        }<br />        break;<br />        case 5://Menu #6<br />        if(przycisk_wcisniety==OK){//Jeżeli wciśnięty OK<br />           submenu_5++;//przesunięcie submenu_5 o jeden<br />        if(submenu_5&gt;2)submenu_5=0;//jeżeli dojdzie do końca wyzeruj submenu<br />}<br />        if(przycisk_wcisniety==ESC){//Jeżeli wciśnięty ESC<br />        submenu_5=0;//zeruje pozycje submenu<br />           menu=0;//powraca do menu głównego<br />           lcd_cls();// czyszczenie LCD<br />        }<br /><br />        if(submenu_5 == 0){ //Warunek by nie nakładały się napsy na siebie<br />        lcd_locate(0,0);<br />        lcd_str(&quot;U. MOCY WIANIA  &quot;);<br />        lcd_locate(1,0);<br />        lcd_int(moc_w);<br />        lcd_str(&quot;                &quot;);<br />        }<br />        else{<br />        switch(submenu_5){<br />        case 1://submenu #1<br />        lcd_locate(0,0);<br />        lcd_str(&quot;USTAW % MOCY W.:&quot;);<br />        lcd_locate(1,0);<br />        lcd_int(moc_w);<br />        lcd_str(&quot;                &quot;);<br />        grzanie_chlodzenie=0;//wyłączenie funkcji regulacji mocy wiania <br /><br /><br />        if(przycisk_wcisniety==UP){//zwiększanie mocu wiania wentylatora 0-100%<br />               moc_w++;<br />                if(moc_w&gt;100)moc_w=0;<br />        }<br />                if(przycisk_wcisniety==DOWN){//zmniejszanie mocy wiania wentylatora<br />               moc_w--;<br />                if(moc_w&lt;0)moc_w=100;<br />        }<br />        break;<br />        case 2://submenu #2<br />        submenu_5=0;//powrót submenu do wartości 0<br />        grzanie_chlodzenie=2;//włączenie funkcji regulacji wiania wentylatora<br /><br />        break;//koniec switch submenu_5<br />        }<br /><br />        }<br /><br /><br /><br />        break;//koniec głównego switcha<br /><br />        }<br /><br />       }<br /><br />    }<br /><br />//--------------------Przerwanie ADC<br />    ISR(ADC_vect)<br />        {<br />            if (!flaga_klaw)<br />            {<br />                    ADC_pomiar=ADCW;<br />                    flaga_klaw=1;<br />            }<br />        }<br />//--------------------Przerwanie ADC - KONEC<br /><br />//--------------------Przerwanie zegara<br />    ISR(TIMER2_OVF_vect) {<br />    sek++;<br />    flag_timer2=1;<br />    flag_term=1;<br /><br />    }<br /><br />//--------------------Przerwanie zegara - KONIEC<br /><br />//--------------------Przerwanie regulatora mocy grzania<br />    ISR(INT0_vect) {<br />    TIMER0_STOP;<br />    T_ZAR1_OFF;<br /><br />    kroki=LICZBA_KROKOW;<br /><br />    /* podwójne buforowanie, synchronizacja do 50Hz */<br />    ika1=kanal1;<br /><br />    TCNT0 = 0;<br />    TIMER0_START;<br />    }<br /><br />    ISR(TIMER0_COMP_vect) {<br />    if(ika1 &amp;&amp; kroki == ika1) T_ZAR1_ON;<br />    kroki--;<br />    }<br />//--------------------Przerwanie regulatora mocy grzania - KONIEC[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 4 kwi 2013, o 21:51</p><hr />
]]></content>
</entry>
</feed>