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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-07-31T12:01:24+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=23864&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2021-07-31T12:01:24+01:00</updated>
<published>2021-07-31T12:01:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233119#p233119</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233119#p233119"/>
<title type="html"><![CDATA[Re: MK_MATRIX_KBD i repetycja klawisza]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233119#p233119"><![CDATA[
<div class="quotetitle">Gienek_S napisał(a):</div><div class="quotecontent"><br />Przepraszam bardzo że cię irytują moje wypowiedzi.<br /></div><br />Nie nie irytują tylko się zdziwiłem - ale pewnie źle zrozumiałem - więc przepraszam<br /><br /><br /><div class="quotetitle">Gienek_S napisał(a):</div><div class="quotecontent"><br />tylko to co zauważyłem to funkcje 1. i 2. zwraca tylko raz klawisz. Natomiast funkcja 3.) zwraca klawisz po czasie LONG_PRESS_TIME po czym zwraca klawisz repetowany.<br />I dlatego żeby uzyskać w jednej funkcji zwrot naciśniętego klawisza zrobiłem taką sumę logiczną tych dwóch zdarzeń w uint8_t GetKey (void)<br /></div><br /><br />ok teraz rozumiem po co robisz sobie ten get_key - ale zastanawiam się dlaczego ?<br /><br />No bo teraz już doszliśmy razem do tego że jednak repetycja działa <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i tak jak autor to obmyślił czyli tylko dla funkcji nr 3 jak napisałeś. <br /><br />Spróbuj opisać w czym masz problem ? bo np jeśli w funkcji nr 1 masz coś tam zrobić ale dokładnie to samo chciałbyś żeby się wykonywało podczas repetycji - to przecież nie potrzebne ci ŻADNE getkeye - tylko np, załóżmy że chcę zmieniać stan diody LED za każdym razem tak ?<br /><br />No to napisz sobie zewnętrzną funkcję np:<br /><br />[syntax=c]void led_tog( void ) {<br />    PORTC ^= (1&lt;&lt;PC7);  // zmiana stanu diody LED na pinie PC7<br />}[/syntax]<br /><br /><br />i teraz wywołuj że tę funkcję z:<br /><br />[syntax=c]void key_down( uint8_t key_nr ) {<br />    led_tog();<br />}[/syntax]<br /><br />a także z:<br /><br />[syntax=c]void key_long_press( uint8_t key_nr ) {<br />    led_tog();<br />}[/syntax]<br /><br />to jest właściwa droga i właściwe podejście - te funkcje 1-3 są niejako zdarzeniami i wystarczy je oprogramować w dowolny sposób. Czyli nie wstawiaj do nich jakiegoś kodu, szczególnie jeśli ma być powtarzalny tylko włóż ten kod do właściwej nowej funkcji i wywołuj ją z metod na których ci zależy. To troszkę tak jak w programowaniu prawie że obiektowym <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=54">mirekk36</a> — 31 lip 2021, o 12:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gienek_S]]></name></author>
<updated>2021-07-31T08:02:04+01:00</updated>
<published>2021-07-31T08:02:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233116#p233116</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233116#p233116"/>
<title type="html"><![CDATA[Re: MK_MATRIX_KBD i repetycja klawisza]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233116#p233116"><![CDATA[
Przepraszam bardzo że cię irytują moje wypowiedzi. Ja tylko opisałem jak u mnie to działa, nie miałem zamiaru Ci nic tłumaczyć jak działa Twoja biblioteka.<br /><br />Jeszcze raz spróbuję przekazać moje spostrzeżenia.<br />Zakładam że w pliku &quot;mk_keyboard.h&quot; mamy:<br />#define ENABLE_ON_KEY_DOWN_EVENT1<br />#define ENABLE_ON_KEY_UP_EVENT1<br />#define ENABLE_ON_KEY_LONG_PRESS_EVENT1<br />#define LONG_PRESS_TIME50// min = 20, default = 50, MAX = 254!<br />#define LONG_PRESS_AS_AUTO_REPEAT1// 0 - DISABLE AUTO REPEAT, 1 - ENABLE AUTO REPEAT<br />#define AUTO_REPEAT_RIME15 // min = 1, default = 15, MAX = (LONG_PRESS_TIME-1) !!!<br /><br />W programie głównym wywołuję tylko funkcję MK_KBD_EVENT(); Czyli wszystko co biblioteka zwraca znajduje się odpowiednio w:<br />1.) void key_down( uint8_t key_nr )<br />2.) void key_up( uint8_t key_nr )<br />3.) void key_long_press( uint8_t key_nr )<br /><br />tylko to co zauważyłem to funkcje 1. i 2.  zwraca tylko raz klawisz. Natomiast funkcja 3.) zwraca klawisz po czasie LONG_PRESS_TIME po czym zwraca klawisz repetowany.<br />I dlatego żeby uzyskać w jednej funkcji zwrot naciśniętego klawisza zrobiłem taką sumę logiczną tych dwóch zdarzeń w uint8_t GetKey (void)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21772">Gienek_S</a> — 31 lip 2021, o 08:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2021-07-30T23:40:38+01:00</updated>
<published>2021-07-30T23:40:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233115#p233115</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233115#p233115"/>
<title type="html"><![CDATA[Re: MK_MATRIX_KBD i repetycja klawisza]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233115#p233115"><![CDATA[
<div class="quotetitle">Gienek_S napisał(a):</div><div class="quotecontent"><br />Funkcje biblioteczne key_up i key_down same nie repetują klawisza.<br /></div><br />Ale proszę cię (i bez urazy) ale nie opowiadaj bajek bo zastanawiam się czy to ty mi tłumaczysz jak działa moja biblioteka ? czy raczej zapytałeś jak działa ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Ne wiem w ogóle co ty wymyślasz z tym GetKey ... to jest niestety absurd, dlatego, że jak się ustawi repetycję w bibliotece to funkcja key_long_press() czyli callback jest wywoływany automatycznie zgodnie z interwałem czasu określonym w #define AUTO_REPEAT_RIME, i to do niej wstaw sobie BEEP'a swojego<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 30 lip 2021, o 23:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gienek_S]]></name></author>
<updated>2021-07-30T21:27:08+01:00</updated>
<published>2021-07-30T21:27:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233114#p233114</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233114#p233114"/>
<title type="html"><![CDATA[Re: MK_MATRIX_KBD i repetycja klawisza]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233114#p233114"><![CDATA[
repetycja działa jak zmodyfikowałem funkcję &quot;uint8_t GetKey (void)&quot; do postaci:<br />[syntax=c]uint8_t GetKey (void)<br />{<br />char temp = keyL;//keyD or keyU or keyL<br />char temp2= keyD;<br /><br />if (temp){<br />keyL = 0;<br />return temp;<br />}<br />if (temp2){<br />keyD = 0;<br />return temp2;<br />}<br /><br />return temp;<br />}[/syntax]<br />Funkcje biblioteczne <strong>key_up i key_down </strong> same nie repetują klawisza.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21772">Gienek_S</a> — 30 lip 2021, o 21:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2021-07-30T20:41:20+01:00</updated>
<published>2021-07-30T20:41:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233113#p233113</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233113#p233113"/>
<title type="html"><![CDATA[Re: MK_MATRIX_KBD i repetycja klawisza]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233113#p233113"><![CDATA[
wiesz co? Właśnie sprawdziłem bibliotekę i działa idealnie <br /><br />Weź sobie to przetestuj panie kochany najpierw na pliku main.c który dostałeś razem z biblioteką. Działa &quot;od kopa&quot; po pobraniu, i to na tych ustawieniach które pokazałeś z pliku *.h<br /><br />ja niestety nie mam aż na tyle czasu żeby teraz analizować twój main.c ... więc najpierw jak mówię zacznij od kodu w main.c z pliku biblioteki i jak tam coś nie będzie działało to wtedy napisz co ok?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 30 lip 2021, o 20:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gienek_S]]></name></author>
<updated>2021-07-30T20:00:14+01:00</updated>
<published>2021-07-30T20:00:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233110#p233110</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233110#p233110"/>
<title type="html"><![CDATA[Re: MK_MATRIX_KBD i repetycja klawisza]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233110#p233110"><![CDATA[
obojętnie czy:<br />#define ENABLE_ON_KEY_LONG_PRESS_EVENT1<br />czy:<br />#define ENABLE_ON_KEY_LONG_PRESS_EVENT0<br /><br />efekt jest taki sam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21772">Gienek_S</a> — 30 lip 2021, o 20:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2021-07-29T21:48:33+01:00</updated>
<published>2021-07-29T21:48:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233093#p233093</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233093#p233093"/>
<title type="html"><![CDATA[Re: MK_MATRIX_KBD i repetycja klawisza]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233093#p233093"><![CDATA[
teraz nie pamiętam szczegółów i nie mam jak sprawdzić - ale czy nie próbowałeś wyłączyć zdarzenia<br /><br />ENABLE_ON_KEY_LONG_PRESS_EVENT<br /><br />czyli ustawić go na zero? Bo jak ono jest włączone to chyba (ale może się mylę) nie będzie repetycji bo to się troszkę kłóci <br /><br />sprawdź i daj znać<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 lip 2021, o 21:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gienek_S]]></name></author>
<updated>2021-07-29T20:52:19+01:00</updated>
<published>2021-07-29T20:52:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233089#p233089</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233089#p233089"/>
<title type="html"><![CDATA[MK_MATRIX_KBD i repetycja klawisza]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23864&amp;p=233089#p233089"><![CDATA[
Witam.<br />Testuję tę bibliotekę i nie potrafię uzyskać repetycji klawiszy.<br />Konfiguracja biblioteki:<br />[syntax=cpp]//--- wybór portu klawiatury ---<br />#define KBD_PORTPORTE<br />#define KBD_PINPINE<br />#define KBD_DIRDDRE<br /><br />//--- typ klawiatury ---<br />#define KBD_TYPEROW_KEYS// KBD_4X3 lub KBD_4X4 lub ROW_KEYS<br /><br />#define ROW_KEYS_COUNT4// jeśli KBD_TYPE = ROW_KEYS to ustaw ilość klawiszy: 1 - 8<br /><br />// jeśli zdefiniowana jest maska to przestaje mieć znaczenie ROW_KEYS_COUNT<br />// wystarczy odkomentować poniższą definicję i ustawić jedynki w miejscach przycisków<br />#define ROW_KEYS_MASK0b111100// własna maska - jedynki w miejscach pinów z przyciskami<br /><br />// tylko do celów testowych z klawiaturami jednorzędowymi<br />//#define ROW_GND_PIN4// ustawienie stanu niskiego GND dla testów prostej jednorzędowej klawiatury<br /><br />//--- wybór reakcji: wciśnięcie, zwolnienie przycisku albo oba zdarzenia ---<br />#define ENABLE_ON_KEY_DOWN_EVENT1<br />#define ENABLE_ON_KEY_UP_EVENT1<br /><br />#define ENABLE_ON_KEY_LONG_PRESS_EVENT1<br /><br />#define LONG_PRESS_TIME50// min = 20, default = 50, MAX = 254!<br /><br />#define LONG_PRESS_AS_AUTO_REPEAT1// 0 - DISABLE AUTO REPEAT, 1 - ENABLE AUTO REPEAT<br />#define AUTO_REPEAT_RIME15 // min = 1, default = 15, MAX = (LONG_PRESS_TIME-1) !!!<br /><br /><br />#define USE_ASCII_CODES1<br /><br />//-------------------------------- koniec konfiguracji biblioteki ----------[/syntax]<br /><br />Program główny:<br />[syntax=cpp]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br /><br />#include &quot;MK_MENU_LIB/mk_menu.h&quot;<br />#include &quot;MK_MENU_LIB/menu_items.h&quot;<br />#include &quot;MK_MENU_USER_FILES/mk_menu_display.h&quot;<br />#include &quot;MK_MENU_USER_FILES/mk_menu_exe.h&quot;<br /><br />//Tylko dla wersji 3.0<br />//#include &quot;MK_MENU_LIB/mk_menu_include.h&quot;<br /><br />#include &quot;MK_MATRIX_KBD/mk_keyboard.h&quot;<br />#include &quot;makra.h&quot;<br />#include &quot;bity.h&quot;<br /><br />/*======================================================<br /> * Definicje BUZ-era i ALarmu<br /> */<br />#define PORT_BUZA<br />#define PIN_BUZ6<br />#define PORT_ALC<br />#define PIN_AL2<br /><br />#define BUZDAJ_BIT(&amp;CONCAT(PORT, PORT_BUZ)).CONCAT(Bit, PIN_BUZ)<br />#define BEEPBUZ=1; _delay_ms(5); BUZ=0;<br /><br />#define INIT_BUZCONCAT(DDR, PORT_BUZ)|= 1&lt;&lt;PIN_BUZ<br />#define ALDAJ_BIT(&amp;CONCAT(PORT, PORT_AL)).CONCAT(Bit, PIN_AL)<br />#define INIT_ALCONCAT(DDR, PORT_AL)|= 1&lt;&lt;PIN_AL<br /><br />uint8_t rep;<br />uint8_t keyD, keyU, keyL;<br /><br />// nagłówki własnych funkcji do zdarzeń (callbacków)<br />//void key_down( uint8_t key_nr, char ascii );<br />//void key_up( uint8_t key_nr, char ascii );<br />//void key_long_press( uint8_t key_nr, char ascii );<br /><br />void key_down( uint8_t key_nr );<br />void key_up( uint8_t key_nr );<br />void key_long_press( uint8_t key_nr );<br />uint8_t GetKey (void);<br /><br /><br />int main (void)<br />{<br />//uint8_t klawisz;<br /><br />mk_kbd_init();// inicjalizacja biblioteki<br />// rejestracja własnych funkcji zdarzeń<br />#if ENABLE_ON_KEY_DOWN_EVENT == 1<br />register_on_key_down_callback( key_down );<br />#endif<br /><br />#if ENABLE_ON_KEY_UP_EVENT == 1<br />register_on_key_up_callback( key_up );<br />#endif<br /><br />#if ENABLE_ON_KEY_LONG_PRESS_EVENT == 1<br />register_on_key_long_press_callback( key_long_press );<br />#endif<br /><br />INIT_BUZ;<br />BEEP;<br />INIT_AL;<br /><br />lcd_init();<br />lcd_locate(0,0);<br />lcd_int(1234);<br />lcd_locate(1,4);<br />lcd_hex(1234);<br />lcd_locate(0,5);<br />lcd_str_P(PSTR(&quot;SB-01An&quot;));<br /><br />    /* Timer2 – inicjalizacja przerwania co 10ms */<br />    TCCR2     |= ( 1 &lt;&lt; WGM21 );        // tryb pracy CTC<br />    TCCR2     |= ( 1 &lt;&lt; CS22 ) | ( 0 &lt;&lt; CS21 ) | ( 1 &lt;&lt; CS20 );    // preskaler = 1024<br />    OCR2      = (F_CPU / 1024UL / 100UL)-1; // przerwanie porównania co 10ms (100Hz)<br />    TIMSK     |= ( 1 &lt;&lt; OCIE2 );        // Odblokowanie przerwania CompareMatch<br /><br />    sei();// globalne zezwolenie na przerwania<br /><br />    for (;;){<br />    MK_KBD_EVENT();// zdarzenie biblioteki obsługi klawiatury<br /><br />    if (GetKey()){<br />    BEEP;<br />    }<br />    }<br />}<br /><br /><br />// procedura obsługi przerwania<br />ISR( TIMER2_COMP_vect ) {<br /><br />isr_kbd_matrix_proc();// wywołanie funkcji przerwania biblioteki klawiatury<br />}<br /><br />//moja funkcja odczytu klawiatury na bazie callbacków<br />uint8_t GetKey (void)<br />{<br />char temp = keyD;//keyD or keyU or keyL<br /><br />if (temp){<br />keyD = 0;<br />//BEEP;<br />}<br /><br />return temp;<br />}<br /><br /><br /><br />// własna funkcja reagująca na key down<br />void key_down( uint8_t key_nr ) {<br /><br />keyD = key_nr;//moje przekazanie klawisza z callbacka do GetKey<br /><br />}<br /><br />// własna funkcja reagująca na key up<br />void key_up( uint8_t key_nr ) {<br /><br />keyU = key_nr;//moje przekazanie klawisza<br /><br />}<br /><br />// własna funkcja reagująca na long press<br />void key_long_press( uint8_t key_nr ) {<br /><br />static uint8_t lastk;<br /><br />keyL = key_nr;//moje przekazanie klawisza<br /><br />if( key_nr != lastk ) rep=0;<br /><br />    lastk = key_nr;<br />}[/syntax]<br />BEEP sygnalizuje mi nowe naciśnięcia klawisza. I to działa poprawnie. Ale jak przytrzymam dowolny klawisz to nie jest on repetowany bo powinien mi powtarzać tego BEEP-a. <br />Co jest nie tak ?<br />P.S. Procesor ATMega128A<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21772">Gienek_S</a> — 29 lip 2021, o 20:52</p><hr />
]]></content>
</entry>
</feed>