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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13562&amp;mode</id>
<entry>
<author><name><![CDATA[marcin1984]]></name></author>
<updated>2015-12-03T12:28:31+01:00</updated>
<published>2015-12-03T12:28:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13562&amp;p=146947#p146947</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13562&amp;p=146947#p146947"/>
<title type="html"><![CDATA[Re: Obsługa przucisku-reakcja na zwolnienie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13562&amp;p=146947#p146947"><![CDATA[
Dziękuję kolego za pomoc.<br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5931">marcin1984</a> — 3 gru 2015, o 12:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2015-11-12T20:20:33+01:00</updated>
<published>2015-11-12T20:20:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13562&amp;p=145210#p145210</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13562&amp;p=145210#p145210"/>
<title type="html"><![CDATA[Re: Obsługa przucisku-reakcja na zwolnienie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13562&amp;p=145210#p145210"><![CDATA[
Ten zapis [syntax=c]if( !++key2_lock )[/syntax]<br />można by zapisać w ten sposób [syntax=c]if( ++key2_lock == 0 )[/syntax]<br />Czyli warunek będzie spełniony wtedy gdy zmienna key2_lock będzie miała wartość równą 0.<br /><br />Reakcja na zwolnienie klawisza działa w ten sposób.<br />Po wciśnięciu klawisza spełniony zostaje warunek <br />[syntax=c]if( !key2_lock &amp;&amp; !(PINC &amp; KEY2 ) ) key2_lock=1;[/syntax]<br />Bo zmienna key2_lock ma wartość zero i klawisz jest wciśnięty (stan niski na pinie KEY2). Warunek ten jest spełniony tak długo jak wciśnięty jest klawisz. Czyli po wciśnięciu klawisza zmienna key2_lock ustawiana jest na jeden.<br /><br />Po puszczeniu klawisza spełniony zostaje warunek<br />[syntax=c]else if( key2_lock &amp;&amp; (PINC &amp; KEY2 ) )[/syntax]<br /><br />Jeśli ten warunek jest spełniony to program w tej linii<br />[syntax=c]if( !++key2_lock )[/syntax]<br />najpierw zwiększa wartość key2_lock o jeden i sprawdza czy zmienna ma wartość zero. Ten if w tej chwili nie jest spełniony.<br /><br />W następnym obiegu pętli program znów zwiększa wartość zmiennej i sprawdza jej wartość. I tak do momentu aż zmienna &quot; się przekręci&quot; z 255 na 0. Wtedy if zostanie spełniony i wykona się to co ma się wykonać po puszczeniu przycisku. <br />Czas w którym zmienna key2_lock zwiększ swoją wartość to jest właśnie debouncing.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 12 lis 2015, o 20:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marcin1984]]></name></author>
<updated>2015-11-12T18:52:24+01:00</updated>
<published>2015-11-12T18:52:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13562&amp;p=145201#p145201</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13562&amp;p=145201#p145201"/>
<title type="html"><![CDATA[Obsługa przucisku-reakcja na zwolnienie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13562&amp;p=145201#p145201"><![CDATA[
Mam takie króciutkie pytanko co oznacza ten zapis if (!++key2_lock)   ? Przeanalizowałem cały kod z blogu Mirka nie rozumiem, tylko tej jednej linijki, co dzieje się z tą zmienną? Kod poniżej [syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /> <br />#define LED1 (1&lt;&lt;PC5)<br />#define LED2 (1&lt;&lt;PC4)<br />#define KEY1 (1&lt;&lt;PC7)<br />#define KEY2 (1&lt;&lt;PC6)<br /> <br />uint8_t key1_lock, key2_lock;<br /> <br />//**************** OBSŁUGA DWÓCH KLAWISZY<br /> <br />int main(void) {<br /> <br /> PORTC |= KEY1|KEY2;  // podciągamy linie klawiszy do VCC<br /> DDRC |= LED1|LED2;   // piny LED jako WYjścia<br /> <br /> _delay_ms(10);<br /> <br /> while(1) {<br /> <br />  // ******* KLAWISZ 1<br />  if( !key1_lock &amp;&amp; !(PINC &amp; KEY1 ) ) {<br />   key1_lock=1;<br /> <br />   // reakcja na PRESS (wcinięcie przycisku)<br />   PORTC ^= LED1;<br /> <br />  } else if( key1_lock &amp;&amp; (PINC &amp; KEY1 ) ) key1_lock++;<br /> <br />  // ******* KLAWISZ 2<br />  if( !key2_lock &amp;&amp; !(PINC &amp; KEY2 ) ) key2_lock=1;<br />  else if( key2_lock &amp;&amp; (PINC &amp; KEY2 ) ) {<br />   if( !++key2_lock ) {<br /> <br />    // reakcja na PUSH_UP (zwolnienie przycisku)<br />    PORTC ^= LED2;<br />   }<br />  }<br /> <br /> }<br /> <br />}[/syntax]<br /><br />Z góry dziękuję za podpowiedź.<br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5931">marcin1984</a> — 12 lis 2015, o 18:52</p><hr />
]]></content>
</entry>
</feed>