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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-07-22T15:03:34+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=12410&amp;mode</id>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2015-07-22T15:03:34+01:00</updated>
<published>2015-07-22T15:03:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135212#p135212</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135212#p135212"/>
<title type="html"><![CDATA[Re: Obsługa przycisku.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135212#p135212"><![CDATA[
Możesz wykorzystać funkcję do obsługi klawiszy z Mirka bloga <!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-drgania-stykow-cd2.html" >http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html</a><!-- m --><br />i zrobić np. tak<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define KEY1(1&lt;&lt;PD0)<br /><br />uint16_t key_lock1;//zmienna na potrzeby funkcji key_press<br /><br />void key_press( uint16_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(void) ) ;<br />void zmien_fun(void);<br />void fun1(void);<br />void fun2(void);<br /><br />int main(void)<br />{<br />//DDRD &amp;= ~KEY1;//PD0 jako wejście<br />PORTD |= KEY1;//podciągnięcie do Vcc<br /><br />//małe opóźnienie czasem potrzebne na <br />//ustabilizowanie się stanów na pinie KEY1<br />_delay_ms(10);<br /><br />while(1)<br />{<br />key_press(&amp;key_lock1, &amp;PIND, KEY1, zmien_fun);<br />}<br />}<br /><br />void zmien_fun(void)<br />{<br />static uint8_t flaga;<br /><br />//po każdym wywołaniu funkcji<br />//zmienna flaga zmienia swój stan <br />//z 0 na 1 i z 1 na 0 (0-&gt;1-&gt;0-&gt;1)<br />flaga ^= 1;<br /><br />if(flaga)//jeśli flaga równa 1<br />{<br />fun1();//wywołaj fun1()<br />}<br />else//jeśli 0<br />{<br />fun2();//wywołaj fun2()<br />}<br />}<br /><br />void fun1(void)<br />{<br /><br />}<br /><br />void fun2(void)<br />{<br /><br />}<br /><br />void key_press(uint16_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(void) )<br />{<br />register uint8_t key_press = (*KPIN &amp; key_mask);<br /><br />if( !*klock &amp;&amp; !key_press )<br />{<br />*klock=50000;<br /><br />// reakcja na PRESS (wcinięcie przycisku)<br />if(kfun) kfun();<br /><br />}<br />else if( *klock &amp;&amp; key_press )<br />{<br />(*klock)++;<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 22 lip 2015, o 15:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daniel880]]></name></author>
<updated>2015-07-22T14:06:49+01:00</updated>
<published>2015-07-22T14:06:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135207#p135207</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135207#p135207"/>
<title type="html"><![CDATA[Re: Obsługa przycisku.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135207#p135207"><![CDATA[
Jak napisałeś i działa to po co chcesz to pisać inaczej? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><br /><div class="quotetitle">LukasKL napisał(a):</div><div class="quotecontent"><br />Jeżeli <strong>nacisnę jeden klawisz</strong> ma się wykonać jedna funkcja. <strong>Jeżeli nacisnę ten sam klawisz</strong> ma się wykonać druga funkcja.<br /></div><br /><br />Chcesz wykonać dwie różne funkcje poprzez wciśnięcie tego samego przycisku w takim sam sposób?? Skąd program ma wiedzieć, którą funkcje ma wykonać??<br /><br />Jeśli chodzi ci o włączenie i wyłączenie silnika jednym przyciskiem to spróbuj napisać coś takiego:<br />[syntax=c]if(klawisz wciśnięty &amp;&amp; flaga==1){<br />uruchom silnik();<br />flaga=0;<br />}<br /><br />if(klawisz wciśnięty &amp;&amp; flaga==0){<br />wylacz silnik();<br />flaga=1;<br />}[/syntax]<br /><br />zmienna flaga oznacza w tym momencie stan w jakim jest silnik. <br /><br />Jeśli jest<strong> uruchomiony </strong>to przyciśnięcie przycisku uruchomi <strong>drugą</strong> funkcję. <br />Jeśli jest <strong>wyłączony</strong>to przyciśnięcie przycisku uruchomi <strong>pierwszą</strong> funkcję.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2328">Daniel880</a> — 22 lip 2015, o 14:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[LukasKL]]></name></author>
<updated>2015-07-22T13:28:29+01:00</updated>
<published>2015-07-22T13:28:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135198#p135198</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135198#p135198"/>
<title type="html"><![CDATA[Re: Obsługa przycisku.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135198#p135198"><![CDATA[
[syntax=c]if( (klawisz &amp; Key2) &amp;&amp; ( flaga == 0 ) )              // jeśli klawisz wciśnięty (rezultat = 1) i flaga jest równa zero<br />                {<br />                        flaga = 1;                                                              // zmień flage na 1<br />                        _delay_ms(500);                                                 // delay 200ms<br />                } else<br />                        if( (klawisz &amp; Key2) &amp;&amp; (flaga == 1) )                // jeśli klawisz wciśnięty i flaga jest równa jeden<br />                        {<br />                                flaga = 0;                                              // zmień flage na 0<br />                                _delay_ms(500);                         // delay 200ms<br />                        }<br /> <br />                if(flaga == 1) LED1_ON();                          // jeśli flaga jest równa 1 zapal diodę<br />                else LED1_OFF();[/syntax]<br /><br />Napisałem taki kod fajnie mam rozdzielone wciśnięcie na dwa zdarzenie ale jeżeli trzymam przycisk dłużej niż 0,5s to dioda mruga czyli wchodzi z jednego zdarzenia do drugiego. Jak to napisać inaczej?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10258">LukasKL</a> — 22 lip 2015, o 13:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2015-07-22T12:28:40+01:00</updated>
<published>2015-07-22T12:28:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135193#p135193</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135193#p135193"/>
<title type="html"><![CDATA[Re: Obsługa przycisku.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135193#p135193"><![CDATA[
Na przykład: <a href="http://forum.atnel.pl/topic11094.html"  class="postlink">http://forum.atnel.pl/topic11094.html</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 22 lip 2015, o 12:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OdeOn]]></name></author>
<updated>2015-07-22T12:26:25+01:00</updated>
<published>2015-07-22T12:26:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135192#p135192</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135192#p135192"/>
<title type="html"><![CDATA[Re: Obsługa przycisku.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135192#p135192"><![CDATA[
tu znajdziesz odpowiedz: <a href="http://mirekk36.blogspot.com/2012/10/drgania-stykow-to-bajki-wiec-jak-to.html"  class="postlink">http://mirekk36.blogspot.com/2012/10/drgania-stykow-to-bajki-wiec-jak-to.html</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1407">OdeOn</a> — 22 lip 2015, o 12:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[LukasKL]]></name></author>
<updated>2015-07-22T12:06:51+01:00</updated>
<published>2015-07-22T12:06:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135190#p135190</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135190#p135190"/>
<title type="html"><![CDATA[Re: Obsługa przycisku.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135190#p135190"><![CDATA[
Rozumiem jak działają przyciski. Tylko ja chcę uzyskać ten sam efekt przy pomocy jednego przycisku. Jeżeli go włączam ma załączyć silnik. Jeżeli naciskam ten sam przycisk ma wył silnik, i znowu jeżeli nacisnę ma włączyć i tak w kółko.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10258">LukasKL</a> — 22 lip 2015, o 12:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[LukasKL]]></name></author>
<updated>2015-07-22T11:53:39+01:00</updated>
<published>2015-07-22T11:53:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135188#p135188</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135188#p135188"/>
<title type="html"><![CDATA[Obsługa przycisku.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12410&amp;p=135188#p135188"><![CDATA[
Witam chcę napisać program który działał by w następujący sposób.<br />Jeżeli nacisnę jeden klawisz ma się wykonać jedna funkcja. Jeżeli nacisnę ten sam klawisz ma się wykonać druga funkcja. I tak w kółko.<br /><br />[syntax=c]while(1)//petla while<br />{<br /><br />ATQ1070_TOUCH_EVENT(&amp;klawisz);//funkcja sprawdzająca czy przysisk został wciśnięty<br /><br />if (klawisz &amp; Key2)//Key2 to maska dla przycisku 2(jeżeli wciśnięty zmienna klawisz <br />{//przyjmuje wartość 1 a zmienna Key ma wartość na stałe 1<br />stan_wl=1;<br /><br />if ((klawisz &amp; Key2) &amp;&amp; (stan_wl))<br />{<br />LED1_ON();<br />_delay_ms(1000);<br />LED1_OFF();<br /><br />}<br />if ((klawisz &amp; Key2) &amp;&amp; !(stan_wl))<br />{<br />LED3_ON();<br />_delay_ms(1000);<br />LED3_OFF();<br />}<br />}<br />else <br />{<br />stan_wl=1;<br />}<br />}[/syntax]<br /><br />Czyli mając jeden przycisk w zależności czy został wciśnięty chcę obsłużyć dwa wątki. Próbowałem to zrobić rozróżniając stan_wl jako parzysty i nieparzysty ale w pętli While jeżeli zwiększam stan to zwieksza się cały czas.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10258">LukasKL</a> — 22 lip 2015, o 11:53</p><hr />
]]></content>
</entry>
</feed>