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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-08-22T19:16:41+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21165&amp;mode</id>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2018-08-22T19:16:41+01:00</updated>
<published>2018-08-22T19:16:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210913#p210913</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210913#p210913"/>
<title type="html"><![CDATA[Re: Sposoby na reagowanie na zmiany stanów wielu przycisków.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210913#p210913"><![CDATA[
To może tablica jednowymiarowa 25 elementów (każdy określa stan jednego przycisku)<br />Każdy element tablicy może opisywać 256 stanów przycisku<br />Nakładając maski można uzyskać niezłe efekty<br />Na przykład |= 0b000000001 coś tam <br />|= 0b00000010 inne coś tam <br />zobacz jakie możliwości ?!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 22 sie 2018, o 19:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adrian-info]]></name></author>
<updated>2018-08-22T18:44:59+01:00</updated>
<published>2018-08-22T18:44:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210912#p210912</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210912#p210912"/>
<title type="html"><![CDATA[Re: Sposoby na reagowanie na zmiany stanów wielu przycisków.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210912#p210912"><![CDATA[
Znam to rozwiązanie Mirka i niestety nie widzę zastosowania w moim przypadku - oczywiście z niektórych mechanizmów skorzystałem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Dodam, że niektóre przyciski na fizycznej klawiaturze są bistabilne a niektóre monostabilne. Stąd potrzeba pamiętania w tablicy stanu aktualnego i poprzedniego przycisków. Przynajmniej tak to mi się wymyśliło <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=12988">adrian-info</a> — 22 sie 2018, o 18:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adrian-info]]></name></author>
<updated>2018-08-22T17:29:09+01:00</updated>
<published>2018-08-22T16:40:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210907#p210907</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210907#p210907"/>
<title type="html"><![CDATA[Re: Sposoby na reagowanie na zmiany stanów wielu przycisków.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210907#p210907"><![CDATA[
Więc działa to tak:<br />Reaguję na wciśnięcie przycisku jeden raz i na zwolnienie przycisku - inna reakcja.<br />Czyli każdy z przycisków ma 2 niezależne stany do obsłużenia.<br />Nie obsługuję kombinacji klawiszy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />I każdy z klawiszy ma co innego do zrobienia <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Jest to wysyłanie konkretnych kodów (znaków) klawiatury. Każdy przycisk ma inny zestaw klawiszy do wysłania w zależności czy jest wciśnięty czy zwolniony.<br /><br />Chyba źle się wyraziłem to piszę jeszcze raz:<br />Nie chodzi o kod naciśniętego przycisku. Po naciśnięciu danego przycisku wysyłany jest kod klawisza klawiatury komputerowej do tego symulatora. Po zwolnieniu przycisku - wysyłany jest kolejny - inny kod klawisza klawiatury komputerowej.<br />Nie o samo wysyłanie mi jednak chodzi tylko o alternatywny sposób &quot;przelecenia&quot; przez tablicę dwuwymiarową i może coś innego niż switch case <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=12988">adrian-info</a> — 22 sie 2018, o 16:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2018-08-22T14:05:08+01:00</updated>
<published>2018-08-22T14:05:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210893#p210893</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210893#p210893"/>
<title type="html"><![CDATA[Re: Sposoby na reagowanie na zmiany stanów wielu przycisków.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210893#p210893"><![CDATA[
No to zmienia postać rzeczy.<br />No bo pojawia się cała masa zagadnień.<br />Zaglądasz w klawisze trafiają ci się dwa naciśnięte przyciski<br />No i teraz co?<br />Zaczynasz &quot;obrabiać&quot; kolejno 1 potem 2 <br />Jak nie kontrolujesz czy przyciski zostały zwolnione to w następnym kółku znowu obrabiasz to samo.<br />Może tak ma być ale jak nie?<br />Wtedy musisz czekać na zwolnienie przycisków.<br />Nieco się to może rozrastać <br />Każdy przycisk ma wtedy stany &quot;naciśnięty nieobsłużony&quot; &quot;naciśnięty obsłużony&quot; &quot;zwolniony&quot;<br /><br />Ciekawy temat.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 22 sie 2018, o 14:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adrian-info]]></name></author>
<updated>2018-08-22T13:47:35+01:00</updated>
<published>2018-08-22T13:47:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210892#p210892</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210892#p210892"/>
<title type="html"><![CDATA[Re: Sposoby na reagowanie na zmiany stanów wielu przycisków.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210892#p210892"><![CDATA[
Ahaaa, nie dodałem najważniejszego - <strong>wiele klawiszy może mieć różne stany</strong>. Klika zwarte, kilka rozwarte!!!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12988">adrian-info</a> — 22 sie 2018, o 13:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2018-08-22T13:37:00+01:00</updated>
<published>2018-08-22T13:37:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210889#p210889</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210889#p210889"/>
<title type="html"><![CDATA[Re: Sposoby na reagowanie na zmiany stanów wielu przycisków.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210889#p210889"><![CDATA[
OK <br />Ale nie do końca rozumiem po co Ci tablica?<br />Czy nie wystarczyło by po napotkaniu zwarcia np x1 y3 <br />wpisać do zmiennej key wartość i dalej obrabiać już tylko jedna zmienną ?<br />Poniżej kawałek kodu<br />[syntax=c]uint8_t SPRAWDZ_KL( void ) {<br /><br />    int n = 20;    //Wejścia piny 4, 5, 6, 7       //Wyjścia piny 0, 1, 2, 3<br /><br />    outp( 0b11110111, PORTC );                     // wystawiamy &quot;0&quot; do PORTC PC3<br />    DELAY_KEYB;                   // czekamy chwilę aż zero się ustabilizuje to jest zadeklarowane w   key_zenek.h<br />    if ( bit_is_clear( PINC, PC4 ) ) n = 3;   // C4 + C3 = &quot;3&quot;<br />    if ( bit_is_clear( PINC, PC5 ) ) n = 2;   // C5 + C3 = &quot;2&quot;<br />    if ( bit_is_clear( PINC, PC6 ) ) n = 1;   // C6 + C3 = &quot;1&quot;<br />    if ( bit_is_clear( PINC, PC7 ) ) n = 11;  // C7 + C3 =  strzałka w górę<br /><br />    outp( 0b1111011, PORTC );                      // wystawiamy &quot;0&quot; do PORTC PC2<br />    DELAY_KEYB;<br />    if ( bit_is_clear( PINC, PC4 ) ) n = 6;    // C4 + C2 = &quot;6&quot;<br />    if ( bit_is_clear( PINC, PC5 ) ) n = 5;    // C5 + C2 = &quot;5&quot;<br />    if ( bit_is_clear( PINC, PC6 ) ) n = 4;    // C6 + C2 = &quot;4&quot;<br />    if ( bit_is_clear( PINC, PC7 ) ) n = 12;   // C7 + C2 = strzałka w dół<br />.<br />.<br />.<br />i tak dalej[/syntax]<br /><br /><br />Efektem działania funkcji jest kod naciśniętego klawisza <br />Można to zrobić zdecydowanie lepiej bez tych nieszczęsnych delay <br />Mirekk to pokazywał<br />Ale ja mam tak, bo tak to zostało napisane gdzieś w 2004 roku i jakoś tak mi się przykleiło<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 22 sie 2018, o 13:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adrian-info]]></name></author>
<updated>2018-08-22T13:30:12+01:00</updated>
<published>2018-08-22T13:30:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210888#p210888</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210888#p210888"/>
<title type="html"><![CDATA[Re: Sposoby na reagowanie na zmiany stanów wielu przycisków.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210888#p210888"><![CDATA[
Nie wiem czy się dobrze rozumiemy, funkcje są z parametrem, a każdy klawisz robi co innego no i jakoś muszę jeszcze przelecieć przez dwuwymiarową tablicę <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=12988">adrian-info</a> — 22 sie 2018, o 13:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2018-08-22T13:25:34+01:00</updated>
<published>2018-08-22T13:25:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210886#p210886</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210886#p210886"/>
<title type="html"><![CDATA[Re: Sposoby na reagowanie na zmiany stanów wielu przycisków.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210886#p210886"><![CDATA[
Tak na szybko. <br />Robisz coś w ten sposób [syntax=c]case 0:<br />                funkcja_obsługi_klawisza();<br />                break;<br />              case 1:<br />                funkcja_obsługi_klawisza();<br />                break;<br />              case 2:<br />                funkcja_obsługi_klawisza();<br />                break;<br />              case 3:<br />                funkcja_obsługi_klawisza();<br />                break;<br />              case 4:<br />                funkcja_obsługi_klawisza();<br />                break;[/syntax]<br />Może po prostu zamiast case x<br />wywołać funkcje z parametrem czyli <br />[syntax=c]funkcja_obsługi_klawisza(x);[/syntax]<br />nie musiałbyś wtedy sprawdzać case tylko przekazać parametr do funkcji<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 22 sie 2018, o 13:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adrian-info]]></name></author>
<updated>2018-08-22T13:51:01+01:00</updated>
<published>2018-08-22T13:15:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210884#p210884</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210884#p210884"/>
<title type="html"><![CDATA[Sposoby na reagowanie na zmiany stanów wielu przycisków...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21165&amp;p=210884#p210884"><![CDATA[
Witam wszystkich <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Chciałbym zapytać brać programistyczną o poradę - burzę mózgów.<br />Otóż popełniam sterownik do klawiatury fizycznej do symulatora kolejnictwa MaSzyna. Sterownik generalnie działa ale może macie ciekawsze - bardziej finezyjne sposoby na sprawdzanie i reagowanie na zmianę stanów przycisków.<br /><br />Działa to przykładowo tak: <br />(25 przycisków) w przerwaniu sczytuję do dwuwymiarowej tablicy stany przycisków poprzez multipleksowanie.<br />W pętli głównej używam dwóch for-ów i 2 switch case-ów (tzn. w jednym case jest 5 wystąpień drugiego case) do reagowania na zmiany w przyciskach, jak w poniższym przykładzie:<br /><br />[syntax=c]for (i = 0; i &lt; 5; i++) {<br />    for (u = 0; u &lt; 5; u++) {<br />      if (old_klawisze&#91;i&#93;&#91;u&#93; != klawisze&#91;i&#93;&#91;u&#93;) {<br />        switch (i) {<br />          case 0:<br />            switch (u) {<br />              case 0:<br />                funkcja_obsługi_klawisza();<br />                break;<br />              case 1:<br />                funkcja_obsługi_klawisza();<br />                break;<br />              case 2:<br />                funkcja_obsługi_klawisza();<br />                break;<br />              case 3:<br />                funkcja_obsługi_klawisza();<br />                break;<br />              case 4:<br />                funkcja_obsługi_klawisza();<br />                break;<br />            } break;<br /><br />          case 1:<br />             switch (u) {<br />                case 0:<br />                funkcja_obsługi_klawisza();<br />                break;<br />              case 1:<br />                funkcja_obsługi_klawisza();<br />                break;<br />              case 2:<br />                funkcja_obsługi_klawisza();<br />                break;<br />              case 3:<br />                funkcja_obsługi_klawisza();<br />                break;<br />              case 4:<br />                funkcja_obsługi_klawisza();<br />                break;<br />            }<br />            break;<br />          case 2:<br />           itd..<br />            break;<br />          case 3:<br />               itd..<br />            break;<br />          case 4:<br />                itd..<br />            break;<br />        }[/syntax]<br /><br /><br />Warunek konieczny - wiele klawiszy może mieć różne stany w jednym czasie - kilka wciśnięte, kilka nie.<br /><br />Czy macie jakieś fajne pomysły na to rozwiązanie? - pytanie retoryczne <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=12988">adrian-info</a> — 22 sie 2018, o 13:15</p><hr />
]]></content>
</entry>
</feed>