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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-05-09T19:50:12+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=15311&amp;mode</id>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-05-09T19:50:12+01:00</updated>
<published>2016-05-09T19:50:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160304#p160304</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160304#p160304"/>
<title type="html"><![CDATA[Re: Obsługa dwóch klawiszy na raz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160304#p160304"><![CDATA[
OK.<br />Przyznaję się bez bicia, pospieszyłem się no i pochrzaniłem.<br />W ramach pokuty napisałem i SPRAWDZIŁEM -działa bez timera i drgań styków.<br /><br />Zasada prosta: 3 przyciski, 6 diod LED. (sześć funkcji)<br />Wykonanie funkcji jest zależne od kolejności przyduszenia klawiszy i wykonuje się ona tylko raz.np:<br /><br />trzymając przyciśnięty pierwszy naciskasz drugi, to wykonuje się funkcja 1-2 ,<br />trzymając przyciśnięty drugi naciskasz trzeci, to wykonuje się funkcja 2-3 , itd.<br /><br />aby mogła się wykonać ponownie funkcja, trzeba puścić wszystkie klawisze.<br /><br /><br />- oto takie coś.na &quot;ATmega8&quot;  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br />#define LED_1 (1&lt;&lt;PD0)/* definicja pinow do ktorych podlaczone sa diody*/<br />#define LED_2 (1&lt;&lt;PD1)<br />#define LED_3 (1&lt;&lt;PD2)<br />#define LED_4 (1&lt;&lt;PD3)<br />#define LED_5 (1&lt;&lt;PD4)<br />#define LED_6 (1&lt;&lt;PD5)<br /><br />#define LED_1_TOG PORTD ^= LED_1/*  makrodefinicja – zmiany stanu diod */<br />#define LED_2_TOG PORTD ^= LED_2<br />#define LED_3_TOG PORTD ^= LED_3<br />#define LED_4_TOG PORTD ^= LED_4<br />#define LED_5_TOG PORTD ^= LED_5<br />#define LED_6_TOG PORTD ^= LED_6<br /><br />#define K1 (1&lt;&lt;PC0)      /* definicja pinow klawiszy*/<br />#define K2 (1&lt;&lt;PC1)<br />#define K3 (1&lt;&lt;PC2)<br /><br />#define K1_DOWN (!(PINC &amp; K1))   /* definicje ulatwiajace, nacisniecie przycisku */<br />#define K2_DOWN (!(PINC &amp; K2))<br />#define K3_DOWN (!(PINC &amp; K3))<br /><br />int8_t FK1,FK2,FK3,flag_tog=1;    /* flagi klawiszy wyzerowane, flaga funkcji - zezwala na jej wykonanie*/<br /><br /><br />void fun_1_2(void){  LED_1_TOG;  } /*funkcje numerowane kolejnoscia nacisniecia klawisza*/<br />void fun_1_3(void){  LED_2_TOG;  }<br />void fun_2_1(void){  LED_3_TOG;  } /* dla przykladu zmiana stanu diody */<br />void fun_2_3(void){  LED_4_TOG;  }<br />void fun_3_1(void){  LED_5_TOG;  }<br />void fun_3_2(void){  LED_6_TOG;  }<br /><br /><br />int main(void)<br />{<br /><br />DDRC &amp;= ~( K1 | K2 | K3);/* wejscia */<br />    PORTC |= K1 | K2 | K3;         /* podciągniete do vcc*/<br /><br />  DDRD |= LED_1 | LED_2 | LED_3 | LED_4 | LED_5 | LED_6 ;/* wyjscia */<br />    PORTD |= LED_1 | LED_2 | LED_3 | LED_4 | LED_5 | LED_6 ;/* stan wysoki na poczatek */<br /><br />while(1)<br />{<br /><br /><br />if(  K1_DOWN  ) {         /* jezeli klawisz &quot;1&quot; wcisniety */<br />if(FK2 &amp;&amp; flag_tog){ fun_2_1();flag_tog=0; }      /* jezeli wcisniety z flaga klawisza &quot;2&quot;<br />                                                  oraz ma zezwolenie na wykonanie funkcji: wykonuje ja<br />                                                  i blokuje ponowne wykonanie do czasu puszczenia<br />                                                  wszystkich klawiszy */<br /><br />else if(FK3 &amp;&amp; flag_tog){fun_3_1();flag_tog=0; }  /* jezeli wcisniety z flaga klawisza &quot;3&quot; .........*/<br /><br />else {FK1=1;}         /* jezeli wcisniety jako pierwszy: zaznacza to wystawieniem swojej flagi,<br />       aby po nacisnieciu nastepnego bylo wiadomo ze jest cos juz nacisniete*/<br />}<br /><br /><br />if(  K2_DOWN  ) {         /* jezeli klawisz &quot;2&quot; wcisniety */<br />if(FK1 &amp;&amp; flag_tog){ fun_1_2();flag_tog=0; }<br />else if(FK3 &amp;&amp; flag_tog){fun_3_2();flag_tog=0; }<br />else {FK2=1;}<br />}<br />if(  K3_DOWN  ) {<br />if(FK1 &amp;&amp; flag_tog){ fun_1_3();flag_tog=0; }<br />else if(FK2 &amp;&amp; flag_tog){fun_2_3();flag_tog=0; }<br />else {FK3=1;}<br />}<br /><br />if(!K1_DOWN &amp;&amp; !K2_DOWN &amp;&amp; !K3_DOWN) { FK1=FK2=FK3=0;flag_tog=1; } /* jezeli wszystkie klawisze zwolnione; zeruje flagi<br />              i zezwala na ponowne wykonanie dowolnej funkcji*/<br /><br /><br /><br />}<br /><br />}[/syntax]<br />Wiem, wiem .. można to napisać dużo lepiej i czytelniej <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 9 maja 2016, o 19:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2016-05-08T22:47:14+01:00</updated>
<published>2016-05-08T22:47:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160264#p160264</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160264#p160264"/>
<title type="html"><![CDATA[Re: Obsługa dwóch klawiszy na raz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160264#p160264"><![CDATA[
Hmmm....<br />Dotyczy pierwszego IF'a<br />Po co zerować flaga_2 skoro żeby wejść do tej sekcji ta flaga musi być 0?<br />Po co w wewnętrznym if'ie jest warunek &amp;&amp; flaga_1 skoro linijkę wcześniej tę flagę właśnie ustawiliśmy? Przecież w tym miejscu ona zawsze będzie 1.<br />Gdzie jest kasowanie flag jak przycisk się wciśnie i puści?<br />No i oczywiście drgania styków pięknie powyższe rozkrzaczą.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 8 maja 2016, o 22:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-05-08T18:42:53+01:00</updated>
<published>2016-05-08T18:42:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160231#p160231</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160231#p160231"/>
<title type="html"><![CDATA[Re: Obsługa dwóch klawiszy na raz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160231#p160231"><![CDATA[
Tak na szybko, mam nadzieję że nie pochrzaniłem  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />}<br /> [syntax=c]/*  np.  */<br />if (  ((!(PINB &amp; (1&lt;&lt;PB1))) &amp;&amp; !flaga_2 ){                /* jeżeli pierwszy wcisnięty i flaga drugiego zwolniona*/<br /><br />           flaga_1 =1;                        /* flaga pierwszego wciśniętego jako pierwszy*/<br />           flaga_2 =0;                        /* flaga wciśniętego drugiego wyzerowana bo to nie ten */<br /><br />       if (  ((!(PINB &amp; (1&lt;&lt;PB2))) &amp;&amp;  flaga_1)  {        /* oraz jeżeli drugi wcisnięty po wciśnięciu pierwszego*/<br />           <br />                    /*  wykonaj coś*/<br />                    }<br />    }<br />if (  ((!(PINB &amp; (1&lt;&lt;PB2)))  &amp;&amp; !flaqa_1 ){                /* jeżeli drugi wcisnięty i flaga pierwszego zwolniona*/<br /><br />           flaga_2 =1;                        /* flaga drugiego wciśniętego jako pierwszy*/<br />           flaga_1 =0;                        /* flaga wciśniętego pierwszego wyzerowana bo to nie ten */<br /><br />       if (  ((!(PINB &amp; (1&lt;&lt;PB1))) &amp;&amp;  flaga_2)  {        /* oraz jeżeli pierwszy wcisnięty po wciśnięciu drugiego */<br />           <br />                    /*  wykonaj coś innego*/<br />                    }<br />    }[/syntax]<br />może nad tym pomyśleć?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 8 maja 2016, o 18:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2016-05-08T17:56:24+01:00</updated>
<published>2016-05-08T17:56:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160227#p160227</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160227#p160227"/>
<title type="html"><![CDATA[Re: Obsługa dwóch klawiszy na raz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160227#p160227"><![CDATA[
Właśnie zaczołem testować ale pojawił się problem. Mianowicie, jak w takim razie odróżnić który klawisz został pierwszy wciśnięty ?? np. klawisz 1 potem klawisz 3 to akcja 1. I w drugą stronę jeśli klawisz 3 a potem 1 to akcja 2.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 8 maja 2016, o 17:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2016-05-06T10:23:59+01:00</updated>
<published>2016-05-06T10:23:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160098#p160098</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160098#p160098"/>
<title type="html"><![CDATA[Re: Obsługa dwóch klawiszy na raz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160098#p160098"><![CDATA[
Jeżeli naciśnięcie pierwszego klawisza to akcja1, drugiego klawisza to akcja2 a naciśnięcie ich razem to akcja3 to już tak łatwo nie będzie. Trzeba zaprząc timer i stworzyć jakąś maszynę stanów żeby odróżnić wciśnięcie klawisza od wciśnięcia dwóch klawiszy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 6 maja 2016, o 10:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2016-05-06T07:21:10+01:00</updated>
<published>2016-05-06T07:21:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160089#p160089</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160089#p160089"/>
<title type="html"><![CDATA[Re: Obsługa dwóch klawiszy na raz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160089#p160089"><![CDATA[
Dziękuję za odpowiedź <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=6944">Ghann</a> — 6 maja 2016, o 07:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matekogon]]></name></author>
<updated>2016-05-05T19:51:54+01:00</updated>
<published>2016-05-05T19:51:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160055#p160055</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160055#p160055"/>
<title type="html"><![CDATA[Re: Obsługa dwóch klawiszy na raz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160055#p160055"><![CDATA[
I kolega był szybszy z odpowiedzią .  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1380">matekogon</a> — 5 maja 2016, o 19:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-05-05T19:49:21+01:00</updated>
<published>2016-05-05T19:49:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160054#p160054</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160054#p160054"/>
<title type="html"><![CDATA[Re: Obsługa dwóch klawiszy na raz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160054#p160054"><![CDATA[
Witam<br /><br />[syntax=c]if ((!(PINB &amp; (1&lt;&lt;PB1))) &amp;&amp; (!(PINB &amp; (1&lt;&lt;PB1)))){/* jeżeli pierwszy i drugi wcisnięty*/<br /> <br />}<br /><br />/*  albo  np.  */<br />if ((!(PINB &amp; (1&lt;&lt;PB1))){                /* jeżeli pierwszy wcisnięty*/................<br />       if ((!(PINB &amp; (1&lt;&lt;PB2))){        /* oraz jeżeli drugi wcisnięty*/<br />          ....................<br />          }<br />    }[/syntax]<br /><br />Tak myślę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 5 maja 2016, o 19:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2016-05-05T19:37:48+01:00</updated>
<published>2016-05-05T19:37:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160052#p160052</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160052#p160052"/>
<title type="html"><![CDATA[Obsługa dwóch klawiszy na raz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15311&amp;p=160052#p160052"><![CDATA[
Witam. <br /><br />Obsługa jednego klawisza wygląda następująco:<br /><br />[syntax=c]if (!(PINB &amp; (1&lt;&lt;PB1))){<br /><br />}[/syntax]<br /><br />Wciśnięcie klawisza powoduje jakąś reakcję. A jeśli mam dwa klawisze, i chcę aby naciśnięcie dwóch jednocześnie spowodowało jakąś reakcję ?? Jak to obsłużyć programowo ??<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 5 maja 2016, o 19:37</p><hr />
]]></content>
</entry>
</feed>