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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-10-19T21:10:27+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=23978&amp;mode</id>
<entry>
<author><name><![CDATA[hopek]]></name></author>
<updated>2021-10-19T21:10:27+01:00</updated>
<published>2021-10-19T21:10:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233966#p233966</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233966#p233966"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa - wprowadzanie liczb do zmiennej]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233966#p233966"><![CDATA[
<div class="quotetitle">embedownik napisał(a):</div><div class="quotecontent"><br />Ja sie doczepie do wyswietlania na lcd z poziomu przerwania<br /></div> Tak wiem, przerzucę wyświetlanie na LCD do pętli głównej, na tę chwilę chciałem dotrzeć do momentu kiedy wszystko w ogóle działa <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Tak naprawdę funkcja <strong>keypad_press</strong> wykonuje się tylko raz po wciśnięciu klawisza a tam chcę operować tylko na zmiennych potrzebnych do poruszania się po menu oraz wbijania parametrów programu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Jak mi się uda skończyć urządzenie to koledzy z pracy będą mieli trochę lżej przy światłowodach <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=1692">hopek</a> — 19 paź 2021, o 21:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[embedownik]]></name></author>
<updated>2021-10-19T10:35:46+01:00</updated>
<published>2021-10-19T10:35:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233933#p233933</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233933#p233933"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa - wprowadzanie liczb do zmiennej]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233933#p233933"><![CDATA[
Ja sie doczepie do wyswietlania na lcd z poziomu przerwania - teraz dziala ok bo robi tylko to, ale jak to rozbudujesz o nowe funkcje to bedzie problem. Plus troche to poubierac w jakiejs funkcje/podzielic na pliki itp bo wyglada troche jak sketch z arduino - w sensie wszystko w jednym pliku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21689">embedownik</a> — 19 paź 2021, o 10:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2021-10-19T07:43:06+01:00</updated>
<published>2021-10-19T07:43:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233932#p233932</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233932#p233932"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa - wprowadzanie liczb do zmiennej]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233932#p233932"><![CDATA[
Ważne, że działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Nie analizowałem kodu, ale w zależności od ilości wprowadzonych cyfr końcowy wynik wystarczy uzależnić od pozycji cyfry i mnożnika x100 x10 x1 (tu przykład dla trzech cyfr)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 19 paź 2021, o 07:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[hopek]]></name></author>
<updated>2021-10-19T07:34:13+01:00</updated>
<published>2021-10-19T07:34:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233931#p233931</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233931#p233931"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa - wprowadzanie liczb do zmiennej]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233931#p233931"><![CDATA[
Jednak forum Atnel jest niezawodne - skłania człowieka do myślenia  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br /><div class="quotetitle">SylwekK napisał(a):</div><div class="quotecontent"><br />W programie głównym możesz utworzyć, np. tablicę i licznik cyfr. Potwierdzenie wprowadzonych liczb może być timerem (po 1-2 sekundach automatycznie zatwierdza wklepane liczby) , albo którymś klawiszem wybranym do tego celu.<br /></div><br /><br />Zrobiłem prawie tak samo jak podpowiedziałeś tyle że chyba w mało elegancki sposób   <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /> <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> <br />Ogólnie wszystko działa ok, nie ma różnicy czy wpiszę z klawiatury 085 czy 85 lub 009 czy tylko 9 <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 15 paź 2021<br /> *      Author: Hopek<br />* modified by @author Hopek last on 2021-10-15 21:21:28.202<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/sleep.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />volatile uint8_t key_cnt, kbd;<br />volatile uint8_t press;<br />uint8_t key_press_cnt;//zmienna wskazująca ponowne wciśnięcie tego samego klawisza<br />uint8_t licznik_cyfr;<br /><br />#define KBD_PORT PORTC<br />#define KBD_PINPINC<br />#define KBD_DDR DDRC<br /><br />//definicje pinów / portów<br />#define ROW0 (1&lt;&lt;PC0)<br />#define ROW1 (1&lt;&lt;PC1)<br />#define ROW2 (1&lt;&lt;PC2)<br />#define ROW3 (1&lt;&lt;PC3)<br /><br />#define COL0 (1&lt;&lt;PC4)<br />#define COL1 (1&lt;&lt;PC5)<br />#define COL2 (1&lt;&lt;PC6)<br />#define COL3 (1&lt;&lt;PC7)<br /><br />//makra do sprzwdzania stanów pinów<br />#define ROW0_LOW !(KBD_PIN &amp; ROW0)<br />#define ROW1_LOW !(KBD_PIN &amp; ROW1)<br />#define ROW2_LOW !(KBD_PIN &amp; ROW2)<br />#define ROW3_LOW !(KBD_PIN &amp; ROW3)<br /><br />void isr_kbd_proc(void);<br />void keypad_press(uint8_t kbd_key , uint8_t key_cnt);<br />uint8_t digit_tab&#91;4&#93;;<br />uint16_t digit1;<br />uint8_t digit2, digit3;<br />uint16_t digit_result;<br /><br />int main (void)<br />{<br />lcd_init();<br /><br />lcd_cls();<br />_delay_ms(500);<br />lcd_locate(0,0);<br />lcd_str_P(PSTR(&quot;START...&quot;));<br />_delay_ms(500);<br /><br />/* Timer2 – inicjalizacja przerwania co 10ms */<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb pracy CTC<br />TCCR2 |= (1&lt;&lt;CS22)|(1&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);<br /><br />KBD_DDR &amp;= ~(ROW0 | ROW1 | ROW2 | ROW3);<br /><br /><br />KBD_PORT |= (ROW0 | ROW1 |  ROW2 | ROW3);<br />KBD_DDR |= (COL0 | COL1 | COL2 | COL3);<br /><br />lcd_cls();<br />sei();<br />while(1)<br />{<br /><br /><br /><br />}<br />}<br /><br /><br /><br />ISR(TIMER2_COMP_vect)<br />{<br /><br />isr_kbd_proc();<br /><br />}<br /><br />void keypad_press (uint8_t kbd_key, uint8_t key_cnt)<br />{<br />if(kbd_key &lt;= 9)<br />{<br />if(licznik_cyfr&lt;3)<br />{<br />licznik_cyfr++;<br />digit_tab&#91;licznik_cyfr&#93; = kbd_key;<br /><br />switch (licznik_cyfr)<br />{<br />case 1:<br />digit1  = digit_tab&#91;1&#93;;<br />digit_result = digit1;<br />break;<br />case 2:<br />digit2 = digit_tab&#91;2&#93;;<br />digit1 = digit1 * 10;<br />digit_result = digit1 + digit2;<br />break;<br /><br />case 3:<br />digit3 = digit_tab&#91;3&#93;;<br />digit1 = digit1 * 10;<br />digit2 = digit2 * 10;<br />digit_result = digit1 + digit2 + digit3;<br />break;<br />}<br /><br /><br />}<br />}<br /><br />else if(kbd_key==10)<br />{<br />licznik_cyfr=0;<br />for(uint8_t i=0; i&lt;4; i++)<br />{<br />digit_tab&#91;i&#93; = 0;<br />}<br />digit1=0;<br />digit2=0;<br />digit3=0;<br /><br />digit_result=0;<br />}<br /><br />if(kbd_key==13)<br />{<br /><br /><br />}<br /><br />lcd_locate(0,0);<br />lcd_str_P(PSTR(&quot;K:&quot;));<br />lcd_int(kbd_key);<br />lcd_str_P(PSTR(&quot; &quot;));<br /><br /><br />lcd_locate(0,6);<br />lcd_str_P(PSTR(&quot;SUMA: &quot;));<br />lcd_int(digit_result);<br />lcd_str_P(PSTR(&quot;    &quot;));<br /><br />lcd_locate(0,16);<br />lcd_str_P(PSTR(&quot;PRS: &quot;));<br />lcd_int(key_cnt);<br />lcd_str_P(PSTR(&quot;    &quot;));<br /><br />lcd_locate(1,0);<br />lcd_str_P(PSTR(&quot;KCNT: &quot;));<br />lcd_int(licznik_cyfr);<br />lcd_str_P(PSTR(&quot;    &quot;));<br /><br />lcd_locate(1,12);<br />lcd_str_P(PSTR(&quot;tab= &quot;));<br />lcd_int(digit_tab&#91;1&#93;);<br />lcd_str_P(PSTR(&quot; &quot;));<br />lcd_int(digit_tab&#91;2&#93;);<br />lcd_str_P(PSTR(&quot; &quot;));<br />lcd_int(digit_tab&#91;3&#93;);<br />lcd_str_P(PSTR(&quot; &quot;));<br /><br />}<br /><br />void isr_kbd_proc(void)<br />{<br />static uint8_t kbd_cnt;<br />static uint8_t kbd_code;<br />static uint8_t kbd_code_tmp;<br />static uint8_t licznik;<br /><br />//licznik resetujący stan wciśnięcia klawisza<br />if( kbd_code &gt; 254)<br />{<br />if(licznik)<br />{<br />licznik--;<br />if(!licznik)<br />{<br />press=0;<br />key_cnt=0;<br />}<br />}<br />}<br />//---------------------------żonglujemy portami po kolei i odczytujemy stany klawiszy<br />if(++kbd_cnt&gt;7)<br />{<br />kbd_cnt=0;<br />}<br /><br />switch(kbd_cnt)<br />{<br />case 0:<br />KBD_PORT &amp;= ~COL0;<br />KBD_PORT |= COL1;<br />KBD_PORT |= COL2;<br />KBD_PORT |= COL3;<br />break;<br /><br />case 1:<br />if(ROW0_LOW) kbd_code = 1;<br />else if(ROW1_LOW) kbd_code = 4;<br />else if(ROW2_LOW) kbd_code = 7;<br />else if(ROW3_LOW) kbd_code = 10;<br />else kbd_code = 255;<br />break;<br /><br />case 2:<br />KBD_PORT |= COL0;<br />KBD_PORT &amp;= ~COL1;<br />KBD_PORT |= COL2;<br />KBD_PORT |= COL3;<br />break;<br /><br />case 3:<br />if(ROW0_LOW) kbd_code = 2;<br />else if(ROW1_LOW) kbd_code = 5;<br />else if(ROW2_LOW) kbd_code = 8;<br />else if(ROW3_LOW) kbd_code = 0;<br />else kbd_code = 255;<br />break;<br /><br />case 4:<br />KBD_PORT |= COL0;<br />KBD_PORT |= COL1;<br />KBD_PORT &amp;= ~COL2;<br />KBD_PORT |= COL3;<br />break;<br /><br />case 5:<br />if(ROW0_LOW) kbd_code = 3;<br />else if(ROW1_LOW) kbd_code = 6;<br />else if(ROW2_LOW) kbd_code = 9;<br />else if(ROW3_LOW) kbd_code = 11;<br />else kbd_code = 255;<br />break;<br /><br />case 6:<br />KBD_PORT |= COL0;<br />KBD_PORT |= COL1;<br />KBD_PORT |= COL2;<br />KBD_PORT &amp;= ~COL3;<br />break;<br /><br />case 7:<br />if(ROW0_LOW) kbd_code = 12;<br />else if(ROW1_LOW) kbd_code = 13;<br />else if(ROW2_LOW) kbd_code = 14;<br />else if(ROW3_LOW) kbd_code = 15;<br />else kbd_code = 255;<br />break;<br /><br />}<br /><br />//---------------------------------------gdy wykryjemy wciśnięcie jakiegokolwiek klawisza<br />if(kbd_code &lt; 255)<br />{<br /><br />press=1;<br />licznik=7;//ustawiamy opóżnienie po jakim można wykryć ponowne wciśnięcie klawisza<br /><br />if(!key_cnt)<br />{<br />//kbd = kbd_code;<br /><br />key_cnt++;<br /><br />if(kbd_code == kbd_code_tmp)<br />{<br />key_press_cnt++;<br />}<br /><br />else if(kbd_code != kbd_code_tmp)<br />{<br />key_press_cnt=1;<br />kbd_code_tmp = kbd_code;<br />}<br />kbd = kbd_code;<br />keypad_press(kbd_code, key_press_cnt);<br /><br />}<br /><br />}<br /><br />}[/syntax]<br /><br />Dziękuję za pomoc! <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=1692">hopek</a> — 19 paź 2021, o 07:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2021-10-19T07:03:23+01:00</updated>
<published>2021-10-19T07:03:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233929#p233929</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233929#p233929"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa - wprowadzanie liczb do zmiennej]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233929#p233929"><![CDATA[
W programie głównym możesz utworzyć, np. tablicę i licznik cyfr. Potwierdzenie wprowadzonych liczb może być timerem (po 1-2 sekundach automatycznie zatwierdza wklepane liczby) , albo którymś klawiszem wybranym do tego celu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 19 paź 2021, o 07:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[hopek]]></name></author>
<updated>2021-10-18T17:49:53+01:00</updated>
<published>2021-10-18T17:49:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233911#p233911</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233911#p233911"/>
<title type="html"><![CDATA[Klawiatura matrycowa - wprowadzanie liczb do zmiennej]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23978&amp;p=233911#p233911"><![CDATA[
Cześć wszystkim. Jako że rzadko tu zaglądam bo do tej pory radziłem sobie jakoś ze wszystkim sam to teraz proszę o pomoc bo się zastanawiam jak mam wykonać w programie taką prostą czynność jak wprowadzanie liczb z klawiatury matrycowej 4x4. Napisałem sobie jakąś tam obsługę takiej klawiatury i działa to ok. Chciałbym w przyszłym urządzeniu móc wpisywać wartości z klawiatury. Przykładowo wartość <strong>19</strong> lub <strong>150</strong>. W jaki sposób to ogarniacie u siebie? Kod który obsługuje klawiaturę umie przesłać do wywoływanej funkcji 2 wartości jako argumenty (kod klawisza oraz licznik wciśnięcia tego samego klawisza). Chcę użyć takiej klawiatury, ale generalnie nie ma to znaczenia: <br /><br /><a href="https://obrazkiforum.atnel.pl/1692/a17f8f1eee60dde6b5a54f14ae3b4c2b.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/1692/a17f8f1eee60dde6b5a54f14ae3b4c2b.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1692">hopek</a> — 18 paź 2021, o 17:49</p><hr />
]]></content>
</entry>
</feed>