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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-10-05T13:52:54+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=11800&amp;mode</id>
<entry>
<author><name><![CDATA[marmur]]></name></author>
<updated>2015-10-05T13:52:54+01:00</updated>
<published>2015-10-05T13:52:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=141528#p141528</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=141528#p141528"/>
<title type="html"><![CDATA[Re: Klawiatura analogowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=141528#p141528"><![CDATA[
Ciężko trochę interpretuje się Twój kod, ze względu na lekkie niechlujstwo, ale postaram się pomóc.<br /><br />Po krótkiej analizie wydaje mi się, że problem leży w zmiennej a i warunku jej dotyczącym.<br /><br />Po każdej wpisanej cyfrze pinu zwiększasz ją o jeden, czyli generalnie po wpisaniu czwartej cyfry zostaje wykonany warunek<br />[syntax=c]//Resetowanie ekranu<br />                if (a&gt;=4) {<br />                        _delay_ms(2000);<br />                        lcd_cls();<br />                        a=0;<br />                        i=0;<br />                        enter=0;<br />                }[/syntax]<br /><br />Twój program zostaje &quot;ubity&quot; na 2 sek, zmienna a się resetuje, zmienna enter również. Zatem warunek enter==1 jest niespoełniony.<br />Dopiero po przejściu delaya czyli te 2 sek, zmienna enter przy wcisnietym klawiszu zostaje ustawiona na 1 i wykonuje sie warunek<br />[syntax=c]//////////////Porównanie haseł<br />                if ((tab1&#91;0&#93;==tab2&#91;0&#93;)&amp;&amp;(tab1&#91;1&#93;==tab2&#91;1&#93;)&amp;&amp;(tab1&#91;2&#93;==tab2&#91;2&#93;)&amp;&amp;(tab1&#91;3&#93;==tab2&#91;3&#93;)&amp;&amp;(enter==1)){<br />                        lcd_cls();<br />                        lcd_str(&quot;HASLO PRAWIDLOWE&quot;);<br />                        //_delay_ms(1000);<br />                }[/syntax]<br /><br />Gotowego rozwiązania nie będę Ci podrzucał, ale myślę że wiesz co poprawić <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Pozdrawiam!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10570">marmur</a> — 5 paź 2015, o 13:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Swoszaki]]></name></author>
<updated>2015-10-05T11:14:20+01:00</updated>
<published>2015-10-05T11:14:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=141526#p141526</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=141526#p141526"/>
<title type="html"><![CDATA[Re: Klawiatura analogowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=141526#p141526"><![CDATA[
To jak? Pomoże ktoś?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3892">Swoszaki</a> — 5 paź 2015, o 11:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Swoszaki]]></name></author>
<updated>2015-10-02T18:43:23+01:00</updated>
<published>2015-10-02T18:43:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=141247#p141247</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=141247#p141247"/>
<title type="html"><![CDATA[Re: Klawiatura analogowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=141247#p141247"><![CDATA[
Witam po trochę dłuższej przerwie spowodowanej różnymi innymi zajęciami.<br /><br />Temat dalej dotyczy klawiaturki. Wykonałem sobie już całą 12 przyciskowa klawiaturkę (0...9 Reset,Enter). Wszystkie cyferki pięknie wyświetlają się na lcd, przycisk kasowania ekranu też działa.<br /><br />Problem jest taki....<br /><br />Chciałbym, aby po wpisaniu prawidłowego hasła (1,2,3,4) oraz naciśnięciu przycisku Enter wyskakiwało &quot;Hasło prawidłowe&quot;....i to działa, ale tylko w przypadku jak po wpisaniu tych cyfr trzymam klawisz enter wciśnięty przez 1-2 sekundy. W innym przypadku następuje &quot;czyszczenie ekranu&quot;.<br /><br />Domyślam się, że problem jest gdzieś w tych linijkach....<br />[syntax=c]//Resetowanie ekranu<br />      if (a&gt;=4) {<br />      _delay_ms(2000);<br />      lcd_cls();<br />      a=0;<br />      i=0;<br />      enter=0;<br />      }[/syntax]<br />oraz <br />[syntax=c]//////////////Porównanie haseł<br />      if ((tab1&#91;0&#93;==tab2&#91;0&#93;)&amp;&amp;(tab1&#91;1&#93;==tab2&#91;1&#93;)&amp;&amp;(tab1&#91;2&#93;==tab2&#91;2&#93;)&amp;&amp;(tab1&#91;3&#93;==tab2&#91;3&#93;)&amp;&amp;(enter==1)){<br />      lcd_cls();<br />      lcd_str(&quot;HASLO PRAWIDLOWE&quot;);<br />      //_delay_ms(1000);<br />      }[/syntax]<br />Czy ktoś mógłby doradzić mi co tam nie chwyta...?<br /><br />Wrzucam cały kod programu<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &lt;avr/interrupt.h&gt;<br /><br />volatile uint16_t Timer1, Timer2;<br /><br />uint8_t sw_on ;<br /><br />//zmienna do czyszczenia ekranu lcd po wpisaniu 4 cyfr<br />uint8_t a=0, i=0, enter=0;<br />uint16_t tab2&#91;4&#93;;<br />uint16_t tab1&#91;&#93;={1,2,3,4};<br /><br />//stałe dla poszczególnych klawiszy<br />#define ADC_K1 340<br />#define ADC_K2 570<br />#define ADC_K3 745<br />#define ADC_K4 870<br />//stała różnica<br />#define ADC_RANGE 50<br /><br />//definicje LED<br />#define LED1 (1&lt;&lt;PD1)<br />#define LED2 (1&lt;&lt;PD2)<br /><br />#define LED1_ON PORTD &amp;= ~LED1<br />#define LED1_OFF PORTD |= LED1<br />#define LED1_TOG PORTD ^= LED1<br /><br />#define LED2_ON PORTD &amp;= ~LED2<br />#define LED2_OFF PORTD |= LED2<br />#define LED2_TOG PORTD ^= LED2<br /><br />uint16_t pomiar(uint8_t kanal);<br />uint32_t pm,pm1,pm2;<br />uint8_t keys&#91;4&#93;,keys1&#91;4&#93;, keys2&#91;4&#93;;<br /><br />int main(void)<br /> {<br />  DDRB |= (1&lt;&lt;PB7);// ustawiamy kierunek linii podświetlenia LCD jako WYJŚCIE<br />  PORTB |= (1&lt;&lt;PB7);// załączamy podświetlenie LCD - stan wysoki<br /><br />  //PortD jako wyjście<br />  DDRD |= LED1|LED2;<br /><br />  //Wygaszenie LED<br />  LED1_OFF; LED2_OFF;<br /><br />  // timer0 - konfig<br />  TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00); //prescaler = 1024<br />  TIMSK |= (1&lt;&lt;TOIE0); // zezwolenie na przerwanie OVF<br /><br />  //inicjalizacja LCD<br />  lcd_init();<br /><br />  //napis początkowy<br />  lcd_str(&quot;WITAJ&quot;);<br />  _delay_ms(3000);<br />  lcd_cls();<br />  lcd_str(&quot;PODAJ HASLO&quot;);<br />  _delay_ms(1000);<br />  //lcd_cls();<br />  lcd_locate(1,0);<br /><br />  //wybor napiecia odniesienia - VCC<br />  //ADMUX |= (1&lt;&lt;REFS0);<br />   //wewnętrzne źródło napięcia 2,56V<br />  ADMUX |=(1&lt;&lt;REFS1)|(1&lt;&lt;REFS0);<br />  ADCSRA |= (1&lt;&lt;ADEN) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS0);<br /><br />  //zezwolenie na przerwania<br />  sei();<br /><br />  //pętla główna programu<br />  while(1)<br />   {<br />    pm = pomiar(7);//pomiar z portu PA7 (ADC7)<br />    pm1 = pomiar(6);//pomiar z portu PA6 (ADC6)<br />    pm2 = pomiar(5);//pomiar z portu PA5 (ADC5)<br /><br /><br />///////Pierwsza kolumna. Przyciski (1,5,7,Reset)<br /><br />      if( pm &lt; ADC_K1+ADC_RANGE )<br />        {<br />       if( keys&#91;0&#93;&lt;10 ) keys&#91;0&#93;++;<br />        } else keys&#91;0&#93;=0;<br />      if( pm &gt; ADC_K2-ADC_RANGE &amp;&amp; pm &lt; ADC_K2+ADC_RANGE  )<br />        {<br />           if( keys&#91;1&#93;&lt;10 ) keys&#91;1&#93;++;<br />          } else keys&#91;1&#93;=0;<br />      if( pm &gt; ADC_K3-ADC_RANGE &amp;&amp; pm &lt; ADC_K3+ADC_RANGE  )<br />        {<br />           if( keys&#91;2&#93;&lt;10 ) keys&#91;2&#93;++;<br />        } else keys&#91;2&#93;=0;<br />      if( pm &gt; ADC_K4-ADC_RANGE &amp;&amp; pm &lt; ADC_K4+ADC_RANGE  )<br />        {<br />       if( keys&#91;3&#93;&lt;10 ) keys&#91;3&#93;++;<br />        } else keys&#91;3&#93;=0;<br /><br />///////Druga kolumna. Przyciski (2,4,8,0)<br /><br />      if( pm1 &lt; ADC_K1+ADC_RANGE )<br />        {<br />       if( keys1&#91;0&#93;&lt;10 ) keys1&#91;0&#93;++;<br />        } else keys1&#91;0&#93;=0;<br />      if( pm1 &gt; ADC_K2-ADC_RANGE &amp;&amp; pm1 &lt; ADC_K2+ADC_RANGE  )<br />        {<br />           if( keys1&#91;1&#93;&lt;10 ) keys1&#91;1&#93;++;<br />          } else keys1&#91;1&#93;=0;<br />      if( pm1 &gt; ADC_K3-ADC_RANGE &amp;&amp; pm1 &lt; ADC_K3+ADC_RANGE  )<br />        {<br />           if( keys1&#91;2&#93;&lt;10 ) keys1&#91;2&#93;++;<br />        } else keys1&#91;2&#93;=0;<br />      if( pm1 &gt; ADC_K4-ADC_RANGE &amp;&amp; pm1 &lt; ADC_K4+ADC_RANGE  )<br />        {<br />       if( keys1&#91;3&#93;&lt;10 ) keys1&#91;3&#93;++;<br />        } else keys1&#91;3&#93;=0;<br /><br />//////////Trzecia kolumna (3,6,9,Enter)<br /><br />            if( pm2 &lt; ADC_K1+ADC_RANGE )<br />              {<br />             if( keys2&#91;0&#93;&lt;10 ) keys2&#91;0&#93;++;<br />              } else keys2&#91;0&#93;=0;<br />            if( pm2 &gt; ADC_K2-ADC_RANGE &amp;&amp; pm2 &lt; ADC_K2+ADC_RANGE  )<br />              {<br />                 if( keys2&#91;1&#93;&lt;10 ) keys2&#91;1&#93;++;<br />                } else keys2&#91;1&#93;=0;<br />            if( pm2 &gt; ADC_K3-ADC_RANGE &amp;&amp; pm2 &lt; ADC_K3+ADC_RANGE  )<br />              {<br />                 if( keys2&#91;2&#93;&lt;10 ) keys2&#91;2&#93;++;<br />              } else keys2&#91;2&#93;=0;<br />            if( pm2 &gt; ADC_K4-ADC_RANGE &amp;&amp; pm2 &lt; ADC_K4+ADC_RANGE  )<br />              {<br />             if( keys2&#91;3&#93;&lt;10 ) keys2&#91;3&#93;++;<br />              } else keys2&#91;3&#93;=0;<br /><br />//////////////////////////////<br /><br />            //klawisz 1<br />        if( keys&#91;0&#93;==9 ){<br />        lcd_int(1);<br />        a=a+1;<br />        tab2&#91;i&#93;=1;<br />        i++;<br />        }<br />        //klawisz 4<br />      if( keys&#91;1&#93;==9 ){<br />      lcd_int(4);<br />      a=a+1;<br />      tab2&#91;i&#93;=4;<br />      i++;<br />      }<br />      //klawisz 7<br />      if( keys&#91;2&#93;==9 ){<br />      lcd_int(7);<br />      a=a+1;<br />      tab2&#91;i&#93;=7;<br />      i++;<br />      }<br />      //klawisz Reset<br />      if( keys&#91;3&#93;==9 ){<br />      lcd_cls();<br />      a=0;<br />      i=0;<br />      enter=0;<br />      }<br /><br />//////////////////////////////////////<br /><br />      //klawisz 2<br />        if( keys1&#91;0&#93;==9 ){<br />        lcd_int(2);<br />        a=a+1;<br />        tab2&#91;i&#93;=2;<br />        i++;<br />        }<br />        //klawisz 5<br />      if( keys1&#91;1&#93;==9 ){<br />      lcd_int(5);<br />      a=a+1;<br />      tab2&#91;i&#93;=5;<br />      i++;<br />      }<br />      //klawisz 8<br />      if( keys1&#91;2&#93;==9 ){<br />      lcd_int(8);<br />      a=a+1;<br />      tab2&#91;i&#93;=8;<br />      i++;<br />      }<br />      //klawisz Reset<br />      if( keys1&#91;3&#93;==9 ){<br />      lcd_int(0);<br />      a=a+1;<br />      tab2&#91;i&#93;=0;<br />      i++;<br />      }<br /><br />///////////////////////////<br /><br />      //klawisz 3<br />      if( keys2&#91;0&#93;==9 ){<br />          lcd_int(3);<br />          a=a+1;<br />          tab2&#91;i&#93;=3;<br />          i++;<br />          }<br />      //klawisz 6<br />      if( keys2&#91;1&#93;==9 ){<br />          lcd_int(6);<br />          a=a+1;<br />          tab2&#91;i&#93;=6;<br />          i++;<br />          }<br />      //klawisz 9<br />      if( keys2&#91;2&#93;==9 ){<br />          lcd_int(9);<br />          a=a+1;<br />          tab2&#91;i&#93;=9;<br />          i++;<br />          }<br />      //klawisz Enter<br />      if( keys2&#91;3&#93;==9 ){<br />      enter=1;<br />      a=a+1;<br />      //i++;<br />          }<br /><br />      //Resetowanie ekranu<br />      if (a&gt;=4) {<br />      _delay_ms(2000);<br />      lcd_cls();<br />      a=0;<br />      i=0;<br />      enter=0;<br />      }<br /><br />//////////////Porównanie haseł<br />      if ((tab1&#91;0&#93;==tab2&#91;0&#93;)&amp;&amp;(tab1&#91;1&#93;==tab2&#91;1&#93;)&amp;&amp;(tab1&#91;2&#93;==tab2&#91;2&#93;)&amp;&amp;(tab1&#91;3&#93;==tab2&#91;3&#93;)&amp;&amp;(enter==1)){<br />      lcd_cls();<br />      lcd_str(&quot;HASLO PRAWIDLOWE&quot;);<br />      //_delay_ms(1000);<br />      }<br />   }<br /> }<br /><br /><br />//funkcja pomiaru<br />    uint16_t pomiar(uint8_t kanal)<br />    {<br />     ADMUX = (ADMUX &amp; 0xF8) | kanal;<br />     ADCSRA |= (1&lt;&lt;ADSC);<br />     while (ADCSRA &amp; (1&lt;&lt;ADSC));<br />     return ADCW;<br />    }<br /><br />//Procedrua przerwania<br />ISR( TIMER0_OVF_vect )<br />{<br /> TCNT0 = 256-78; // częstotliwość 100 Hz<br /> uint16_t n = Timer1;<br /> if(n) Timer1=--n;<br /> n = Timer2;<br /> if(n) Timer2=--n;<br />}[/syntax]<br />Z góry dziękuję.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3892">Swoszaki</a> — 2 paź 2015, o 18:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Swoszaki]]></name></author>
<updated>2015-05-26T21:02:43+01:00</updated>
<published>2015-05-26T21:02:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=130172#p130172</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=130172#p130172"/>
<title type="html"><![CDATA[Re: Klawiatura analogowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=130172#p130172"><![CDATA[
Po pewnej liczbie kombinacji udało się <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> A wystarczyło podejść troszkę od innej strony...<br />[syntax=c]if( keys&#91;0&#93;==9 ){<br />        LED1_TOG;<br />        lcd_int(1);<br />        a=a+1;<br />        tab2&#91;i&#93;=1;<br />        i++;<br />        }<br />      if( keys&#91;1&#93;==9 ){<br />      LED2_TOG;<br /><br />      lcd_int(2);<br />      a=a+1;<br />      tab2&#91;i&#93;=2;<br />      i++;<br /><br />      }<br />      if( keys&#91;2&#93;==9 ){<br />      LED3_TOG;<br />      lcd_int(3);<br />      a=a+1;<br />      tab2&#91;i&#93;=3;<br />      i++;<br /><br />      }<br />      if( keys&#91;3&#93;==9 ){<br />      LED4_TOG;<br />      lcd_int(4);<br />      a=a+1;<br />      tab2&#91;i&#93;=4;<br />      i++;<br />      }<br /><br />      if (a==4) {<br />      _delay_ms(1000);<br />      lcd_cls();<br />      a=0;<br />      i=0;<br /><br />      }<br /><br />      if ( (tab1&#91;0&#93; ==tab2&#91;0&#93;) &amp;&amp; (tab1&#91;1&#93; ==tab2&#91;1&#93;) &amp;&amp; (tab1&#91;2&#93; ==tab2&#91;2&#93;) &amp;&amp; (tab1&#91;3&#93; ==tab2&#91;3&#93;) ){<br />      LED5_OFF;<br />      lcd_cls();<br />      lcd_str(&quot;HASLO PRAWIDLOWE&quot;);<br />      _delay_ms(1000);<br />      }else LED5_ON;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3892">Swoszaki</a> — 26 maja 2015, o 21:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Swoszaki]]></name></author>
<updated>2015-05-25T17:40:09+01:00</updated>
<published>2015-05-25T17:40:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=130082#p130082</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=130082#p130082"/>
<title type="html"><![CDATA[Re: Klawiatura analogowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=130082#p130082"><![CDATA[
Zrobiłem tak, ale dalej jest to samo....czy wpisze 1234, czy 4231,czy 1342 to dioda led gaśnie....<br />[syntax=c]if( keys&#91;0&#93;==9 ){<br />        LED1_TOG;<br />        lcd_int(1);<br />        a=a+1;<br />        cy1=cy1+1;<br />        }<br />      if( keys&#91;1&#93;==9 ){<br />      LED2_TOG;<br />      lcd_int(2);<br />      a=a+1;<br />      cy2=cy2+2;<br /><br />      }<br />      if( keys&#91;2&#93;==9 ){<br />      LED3_TOG;<br />      lcd_int(3);<br />      a=a+1;<br />      cy3=cy3+3;<br /><br />      }<br />      if( keys&#91;3&#93;==9 ){<br />      LED4_TOG;<br />      lcd_int(4);<br />      a=a+1;<br />      cy4=cy4+4;<br />      }<br /><br />      if (a&gt;4) {<br />      lcd_cls();<br />      a=0;<br />      cy1=0;cy2=0;cy3=0;cy4=0;<br /><br />      }<br />      if (suma==((1000*cy1)+(100*cy2)+(10*cy3)+(cy4))) {<br />      LED5_OFF;<br />      }else LED5_ON;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3892">Swoszaki</a> — 25 maja 2015, o 17:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-05-25T09:45:09+01:00</updated>
<published>2015-05-25T09:45:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=130048#p130048</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=130048#p130048"/>
<title type="html"><![CDATA[Re: Klawiatura analogowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=130048#p130048"><![CDATA[
Witam<br /><div class="quotetitle">Swoszaki napisał(a):</div><div class="quotecontent"><br />...Sumy ...problem w tym, że jeżeli hasło było np 1234 , to jakakolwiek kolejność cyfr powodowała &quot;zadziałanie kodu&quot;.<br /></div><br />Nie wiem jak masz, ale sumę powinieneś porównywać:<br />cy1*1000 + cy2*100 + cy3*10 + cy4<br />W takim przypadku  jest tylko jedna możliwość zgodności.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 25 maja 2015, o 09:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Swoszaki]]></name></author>
<updated>2015-05-24T19:41:28+01:00</updated>
<published>2015-05-24T19:41:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=130037#p130037</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=130037#p130037"/>
<title type="html"><![CDATA[Klawiatura analogowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11800&amp;p=130037#p130037"><![CDATA[
Witam,<br /><br />Po obejrzeniu serii poradników Pana Mirka  z serii ADC stworzyłem sobie prostą klawiaturkę składającą się z 4 klawiszy (docelowo ma być 12, ale chciałem sprawdzić na początku, czy to wszystko zadziała). Wszystko pięknie działa, 4 diody led pięknie się zapalają po wciśnięciu odpowiednich klawiszy, na lcd wyświetlają się pięknie cyferki odpowiadające klawiszom. Działa też funkcja Auto Repeat (którą na chwilę obecną skasowałem).<br /><br />Dalej sobie pomyślałem, aby stworzyć taki prosty zamek szyfrujący. Z początku próbowałem porównywać hasła i klawisze na zasadzie Sumy lub iloczynu (Wiem, że to banalne). I nawet do pewnego stopnia działało....problem w tym, że jeżeli hasło było np 1234 , to jakakolwiek kolejność cyfr powodowała &quot;zadziałanie kodu&quot;.<br /><br />Kolejna próba to porównanie tablic... niestety tutaj pojawia się problem z pętlą FOR, którą dodałem....Mianowicie każda cyfra pojawia się 4 razy na wyświetlaczu... &quot;Hasło działa jedynie gdy pod &quot;tab1&quot; jest wpisana 4 razy ta sama cyfra.... Domyślam się, że problem jest albo z pętlą, albo z wyświetleniem cyfr na wyświetlaczu....<br /><br />Dlatego zwracam się z prośba o pomoc, jak to zrobić, żeby działało.....poniżej wrzucam kod programu<br /> <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &lt;avr/interrupt.h&gt;<br /><br />volatile uint16_t Timer1, Timer2;<br /><br />uint8_t sw_on ;<br /><br />//zmienna do czyszczenia ekranu lcd po wpisaniu 4 cyfr<br />uint8_t a=0;<br /><br />//tablice do porównania<br />uint8_t tab1&#91;&#93;={1,2,3,4};<br />uint8_t tab2&#91;4&#93;;<br /><br /><br />//stałe dla poszczególnych klawiszy<br />#define ADC_K1 323<br />#define ADC_K2 550<br />#define ADC_K3 730<br />#define ADC_K4 850<br />//stała różnica<br />#define ADC_RANGE 70<br /><br />//definicje LED<br />#define LED1 (1&lt;&lt;PB1)<br />#define LED2 (1&lt;&lt;PB2)<br />#define LED3 (1&lt;&lt;PB3)<br />#define LED4 (1&lt;&lt;PB4)<br />#define LED5 (1&lt;&lt;PB5)<br /><br />#define LED1_ON PORTB &amp;= ~LED1<br />#define LED1_OFF PORTB |= LED1<br />#define LED1_TOG PORTB ^= LED1<br /><br />#define LED2_ON PORTB &amp;= ~LED2<br />#define LED2_OFF PORTB |= LED2<br />#define LED2_TOG PORTB ^= LED2<br /><br />#define LED3_ON PORTB &amp;= ~LED3<br />#define LED3_OFF PORTB |= LED3<br />#define LED3_TOG PORTB ^= LED3<br /><br />#define LED4_ON PORTB &amp;= ~LED4<br />#define LED4_OFF PORTB |= LED4<br />#define LED4_TOG PORTB ^= LED4<br /><br />#define LED5_ON PORTB &amp;= ~LED5<br />#define LED5_OFF PORTB |= LED5<br />#define LED5_TOG PORTB ^= LED5<br /><br /><br />uint16_t pomiar(uint8_t kanal);<br />uint32_t pm,i;<br />uint8_t keys&#91;4&#93;;<br /><br />int main(void)<br /> {<br />  DDRB |= (1&lt;&lt;PB0);// ustawiamy kierunek linii podświetlenia LCD jako WYJŚCIE<br />  PORTB |= (1&lt;&lt;PB0);// załączamy podświetlenie LCD - stan wysoki<br /><br />  //Portb jako wyjście<br />  DDRB |= LED1|LED2|LED3|LED4|LED5;<br /><br />  //Wygaszenie LED<br />  LED1_OFF; LED2_OFF; LED3_OFF; LED4_OFF, LED5_ON;<br /><br />  // timer0 - konfig<br />  TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00); //prescaler = 1024<br />  TIMSK |= (1&lt;&lt;TOIE0); // zezwolenie na przerwanie OVF<br /><br />  //inicjalizacja LCD<br />  lcd_init();<br /><br />  //wybor napiecia odniesienia - VCC<br />  //ADMUX |= (1&lt;&lt;REFS0);<br />   //wewnętrzne źródło napięcia 2,56V<br />  ADMUX |=(1&lt;&lt;REFS1)|(1&lt;&lt;REFS0);<br />  ADCSRA |= (1&lt;&lt;ADEN) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS0);<br /><br />  //zezwolenie na przerwania<br />  sei();<br /><br />//pętla główna programu<br />  while(1)<br />   {<br />    pm = pomiar(7);//pomiar z portu PA7 (ADC7)<br /><br />    //Który przycisk został wciśnięty<br />      if( pm &lt; ADC_K1+ADC_RANGE )<br />        {<br />       if( keys&#91;0&#93;&lt;10 ) keys&#91;0&#93;++;<br />        } else keys&#91;0&#93;=0;<br />      if( pm &gt; ADC_K2-ADC_RANGE &amp;&amp; pm &lt; ADC_K2+ADC_RANGE  )<br />        {<br />           if( keys&#91;1&#93;&lt;10 ) keys&#91;1&#93;++;<br />          } else keys&#91;1&#93;=0;<br />      if( pm &gt; ADC_K3-ADC_RANGE &amp;&amp; pm &lt; ADC_K3+ADC_RANGE  )<br />        {<br />           if( keys&#91;2&#93;&lt;10 ) keys&#91;2&#93;++;<br />        } else keys&#91;2&#93;=0;<br />      if( pm &gt; ADC_K4-ADC_RANGE &amp;&amp; pm &lt; ADC_K4+ADC_RANGE  )<br />        {<br />       if( keys&#91;3&#93;&lt;10 ) keys&#91;3&#93;++;<br />        } else keys&#91;3&#93;=0;<br /><br /><br />      for(i = 0 ; i&lt;4; i++)<br />      {<br /><br />        if( keys&#91;0&#93;==9 ){<br />        LED1_TOG;<br />        lcd_int(1);<br />        a=a+1;<br />        tab2&#91;i&#93;=1;<br />        }<br />      if( keys&#91;1&#93;==9 ){<br />      LED2_TOG;<br />      lcd_int(2);<br />      a=a+1;<br />      tab2&#91;i&#93;=2;<br /><br />      }<br />      if( keys&#91;2&#93;==9 ){<br />      LED3_TOG;<br />      lcd_int(3);<br />      a=a+1;<br />      tab2&#91;i&#93;=3;<br /><br />      }<br />      if( keys&#91;3&#93;==9 ){<br />      LED4_TOG;<br />      lcd_int(4);<br />      a=a+1;<br />      tab2&#91;i&#93;=4;<br />      }<br />      }<br />      if (a&gt;4) {<br />      lcd_cls();<br />      a=0;<br /><br />      }<br /><br />if ((tab1&#91;0&#93;==tab2&#91;0&#93;)&amp;&amp;(tab1&#91;1&#93;==tab2&#91;1&#93;)&amp;&amp;(tab1&#91;2&#93;==tab2&#91;2&#93;)&amp;&amp;(tab1&#91;3&#93;==tab2&#91;3&#93;)){<br />LED5_OFF;<br />}else LED5_ON;<br /> <br /><br />     }<br /> }<br />//funkcja pomiaru<br />    uint16_t pomiar(uint8_t kanal)<br />    {<br />     ADMUX = (ADMUX &amp; 0xF8) | kanal;<br />     ADCSRA |= (1&lt;&lt;ADSC);<br />     while (ADCSRA &amp; (1&lt;&lt;ADSC));<br />     return ADCW;<br />    }<br /><br />//Procedrua przerwania<br />ISR( TIMER0_OVF_vect )<br />{<br /> TCNT0 = 256-78; // częstotliwość 100 Hz<br /> uint16_t n = Timer1;<br /> if(n) Timer1=--n;<br /> n = Timer2;<br /> if(n) Timer2=--n;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3892">Swoszaki</a> — 24 maja 2015, o 19:41</p><hr />
]]></content>
</entry>
</feed>