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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-09-28T18:13:47+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13045&amp;mode</id>
<entry>
<author><name><![CDATA[tomson5]]></name></author>
<updated>2015-09-28T18:13:47+01:00</updated>
<published>2015-09-28T18:13:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140975#p140975</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140975#p140975"/>
<title type="html"><![CDATA[Re: obsługa przycisku bistabilnego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140975#p140975"><![CDATA[
Dziękuje za pomoc. problem rozwiązany. Przy okazji testuję sobie przytoczone przykłady.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2382">tomson5</a> — 28 wrz 2015, o 18:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-09-26T05:50:18+01:00</updated>
<published>2015-09-26T05:50:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140735#p140735</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140735#p140735"/>
<title type="html"><![CDATA[Re: obsługa przycisku bistabilnego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140735#p140735"><![CDATA[
Witam<br />Można też tak:<br />[syntax=c]switch (mode){<br />case 1:<br />if(KEY_DOWN)mode=2;<br /><br />TO DO Twój kod<br />break;<br /><br /><br />case 2:<br />if(KEY_UP)mode=1;<br /><br />TO DO Twój  drugi kod<br /><br />break;[/syntax]<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 26 wrz 2015, o 05:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tomson5]]></name></author>
<updated>2015-09-25T20:57:10+01:00</updated>
<published>2015-09-25T20:57:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140723#p140723</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140723#p140723"/>
<title type="html"><![CDATA[Re: obsługa przycisku bistabilnego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140723#p140723"><![CDATA[
@chemik0 Robię podobnie do ciebie. Jutro spróbuję przetestować dokładnie tak jak ty masz.<br />@Krauser dziękuję za kod. chciałbym pozostać przy tym co mam. kod jest w 99% już zrobiony. brakuje mi tylko tego drugiego stanu przycisku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2382">tomson5</a> — 25 wrz 2015, o 20:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-09-25T19:58:15+01:00</updated>
<published>2015-09-25T19:58:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140715#p140715</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140715#p140715"/>
<title type="html"><![CDATA[Re: obsługa przycisku bistabilnego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140715#p140715"><![CDATA[
Spróbuj taki kodzik:<br />[syntax=c]typedef struct __attribute__ ((packed))<br />{<br />    uint8_t action_press : 1; //flaga zmiany stanu<br />    uint8_t action_release : 1; //flaga zmiany stanu<br />    uint8_t state : 1;<br />    uint8_t hold : 1;<br />    uint8_t hold_cnt;<br />} KEY;<br /><br />KEY key_up;<br /><br />enum {RELEASED, PRESSED};<br />//...<br />while(1)<br />{<br />   if(!Timer1) //timer programowy, okres 10ms<br />   {<br />       Timer1 = 4; //40ms<br />       if(key_up.state == RELEASED &amp;&amp; (!KEY_DOWN))<br />        {<br />            key_up.state = PRESSED;<br />            key_up.action_press = true;<br />        }<br />        if(key_up.state == PRESSED &amp;&amp; (KEY_DOWN))<br />        {<br />            key_up.state = RELEASED;<br />            key_up.action_release = true;<br />        }<br />        if(key_up.state == PRESSED)<br />        {<br />            if(++key_up.hold_cnt &gt; 25) key_up.hold = true;<br />        }<br />        else<br />        {<br />            key_up.hold_cnt = 0;<br />            key_up.hold = false;<br />        }<br />   }<br />   if(!Timer2) //timer programowy, okres 10ms<br />   {<br />       Timer2 = 10; //100ms<br />        if(key_up.action_press)<br />        {<br />            key_up.action_press = false;<br />            //coś do zrobienia po wciśnięciu<br />        }<br />        if(key_up.hold)<br />        {<br />           //coś innego do zrobienia co 100ms gdy trzymany<br />        }<br />        if(key_up.action_release)<br />        {<br />            key_up.action_release = false;<br />            //coś do zrobienia gdy puszczony<br />        }<br />   }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 25 wrz 2015, o 19:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[chemik0]]></name></author>
<updated>2015-09-25T19:45:21+01:00</updated>
<published>2015-09-25T19:45:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140712#p140712</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140712#p140712"/>
<title type="html"><![CDATA[Re: obsługa przycisku bistabilnego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140712#p140712"><![CDATA[
Witaj,<br />U mnie takie rozwiązanie działa.<br /><br />[syntax=c]#define S1_DDR DDRD<br />#define S1_PORT PORTD<br />#define S1 (1&lt;&lt;PD6)<br /><br />uint8_t set_r1 = 0; // zmienna pomocnicza do przekaźnika 1<br /><br />// Warunke sprawdzający stan klawiszy i wł/wył przekaźnik 1<br />if (!(PIND &amp; S1) &amp;&amp; set_r1 == 0) // jesli S1 = 0 i zmienna pom. = 0<br />{<br />REL1_TOG; // zmień stan przekaźnika<br />set_r1 = 1; // ustaw zmienną pom. na 1<br />}<br /><br />// Warunke sprawdzający stan klawiszy i wł/wył przekaźnik 1<br />if ((PIND &amp; S1) &amp;&amp; set_r1 == 1) // jesli S1 = 1 i zmienna pom. = 1<br />{<br />REL1_TOG; // zmień stan przekaźnika<br />set_r1 = 0; // ustaw zmienną pom. na 0<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=91">chemik0</a> — 25 wrz 2015, o 19:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tomson5]]></name></author>
<updated>2015-09-25T19:37:27+01:00</updated>
<published>2015-09-25T19:37:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140707#p140707</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140707#p140707"/>
<title type="html"><![CDATA[Re: obsługa przycisku bistabilnego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140707#p140707"><![CDATA[
Wejście mam podciągnięte rezystorem do minusa. Chcę wyzwalać stanem wysokim.<br />flagę mam po to aby to co jest w IFie wykonało się tylko raz.<br />[syntax=c]if (KEY_DOWN &amp;&amp; flaga_startu == 0)<br />{<br />//To ma się wykonać tylko raz.<br />//Nawet gdy przycisk jest cały czas wciśnięty<br />//Dopiero wyciśnięcie przycisku ma zezwolić na ponowne wykonanie gdy znowu przycisk będzie wciśnięty.<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2382">tomson5</a> — 25 wrz 2015, o 19:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-09-25T19:29:57+01:00</updated>
<published>2015-09-25T19:29:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140704#p140704</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140704#p140704"/>
<title type="html"><![CDATA[Re: obsługa przycisku bistabilnego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140704#p140704"><![CDATA[
Masz podciągnięte wejście przycisku do plusa? Oba stany wciśnięcia i puszczenia wymagają osobnych flag pomocniczych.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 25 wrz 2015, o 19:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tomson5]]></name></author>
<updated>2015-09-25T19:46:52+01:00</updated>
<published>2015-09-25T19:19:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140699#p140699</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140699#p140699"/>
<title type="html"><![CDATA[obsługa przycisku bistabilnego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13045&amp;p=140699#p140699"><![CDATA[
Witam<br />Wyłożyłem się tym razem na podstawowej rzeczy jaką jest obsługa przycisków.<br />Jednak w tym konkretnym przypadku chodzi mi o przycisk bistabilny.<br />Chciałbym rozpoznawać nie tylko jego wciśnięcie ale i wyciśnięcie jeśli tak mogę to ująć.<br /><br />To co do tej pory mam :<br />[syntax=c]#define KEY_PIN (1&lt;&lt;PB0)<br />#define KEY_DOWN (PINB &amp; KEY_PIN)<br />#define KEY_UP !(PINB &amp; KEY_PIN)[/syntax]<br /><br />W funkcji main<br />[syntax=c]int main(void)<br />DDRB &amp;= ~KEY_PIN;// kierunek piny Pb0 - wejściowy[/syntax]<br /><br />W pętli <br /><br />[syntax=c]while(1){<br />if (KEY_DOWN &amp;&amp; flaga_startu == 0)<br />{<br />//Tutaj mi wszystko działa<br />flaga_startu = 1;<br />}<br />if (KEY_UP )<br />{<br />//a tutaj nie chce działać<br />flaga_startu = 0;<br />}<br />}[/syntax]<br /><br />Pomijam tutaj oczywiście drganie styków.<br /><br /><br /><strong><span style="color: #FF0000">&gt;&gt;&gt; POPRAW KODY --- SunRiver</span></strong><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2382">tomson5</a> — 25 wrz 2015, o 19:19</p><hr />
]]></content>
</entry>
</feed>