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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-10-24T09:22:21+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=21469&amp;mode</id>
<entry>
<author><name><![CDATA[Krzycho69]]></name></author>
<updated>2018-10-24T09:22:21+01:00</updated>
<published>2018-10-24T09:22:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212938#p212938</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212938#p212938"/>
<title type="html"><![CDATA[Re: SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212938#p212938"><![CDATA[
<div class="quotetitle">kalani napisał(a):</div><div class="quotecontent"><br />Toteż piszę: zostawić superdebounce w spokoju i dane przekazywać do callbacka przez zm. globalne o zasiegu plikowym:<br /></div><br /><br /><br />Wiem o co biega tak jak piszesz będzie najprościej.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />i w ogóle nie ingerujesz w kod SuperDebounce() .... a wszystko działa tak jak chcesz - i może na tym przykładzie zaskoczysz - do czego są callbacki.<br /></div><br /><br /><br />Czaję, poszedłem nie tą drogą co trzeba.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18327">Krzycho69</a> — 24 paź 2018, o 09:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-10-24T09:20:04+01:00</updated>
<published>2018-10-24T09:20:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212937#p212937</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212937#p212937"/>
<title type="html"><![CDATA[Re: SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212937#p212937"><![CDATA[
<div class="quotetitle">Krzycho69 napisał(a):</div><div class="quotecontent"><br />mam strukturę temperatura jak ją przekazać do SuperDebynceP?<br /></div><br />Kolega na razie jak widzę KOMPLETNIE nie rozumie callbacków <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .... Po jasny gwint przekazywać do tej funkcji superdebounce jakieś dodatkowe argumenty - toż to nieporozumienie praktycznie ... Callback tu jest po to aby nie ruszać kodu funkcji a reszta ma być robiona w funkcji callbackowej czyli tej wywołanej ....<br /><br />To w niej jak kolega wyżej pisze możesz operować DOWOLNYMI zmiennymi - jakie tylko zechcesz (globalne - jakaś struktura itp) ... zapomnij najlepiej o przekazywaniu dodatkowych argumentów do superdebounce bo za chwilę wyjdzie ci z tego takie SPAGHETTI - że sam się nie połapiesz o co chodzi.<br /><br />Krótko, Superdebounce wywoła twoją funkcję np: <br /><br />[syntax=c]void klawisz_plus( void );[/syntax]<br /><br />no toż po co w niej jakieś argumenty skoro wiesz, że ona ma zwiększać &quot;coś tam&quot; - nie ważne czy temperaturę czy co innego - masz jakąś gdzieś zmienną np: temperatura to w tej funkcji napiszesz sobie:<br /><br />[syntax=c]void klawisz_plus( void ) {<br />    temperatura++;<br />    // ew wyświetlisz tę temperaturę tutaj<br />}[/syntax]<br /><br />chyba nie muszę mówić, że analogicznie możesz sobie zrobić funkcję: <br /><br />[syntax=c]void klawisz_minus( void );[/syntax]<br /><br />i w ogóle nie ingerujesz w kod SuperDebounce() .... a wszystko działa tak jak chcesz - i może na tym przykładzie zaskoczysz - do czego są callbacki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 24 paź 2018, o 09:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krzycho69]]></name></author>
<updated>2018-10-24T08:35:25+01:00</updated>
<published>2018-10-24T08:35:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212932#p212932</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212932#p212932"/>
<title type="html"><![CDATA[Re: SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212932#p212932"><![CDATA[
[syntax=c]typedef struct{<br />int x1;<br />int max;<br />int min;<br />}t_ustawienia;<br /><br />t_ustawienia temperatura;[/syntax]<br /><br />mam strukturę temperatura jak ją przekazać do SuperDebynceP?<br /><br />[syntax=c]void SuperDebounceP(uint8_t * key_state, volatile uint8_t *KPIN,<br />uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,<br />void (*push_proc)(int x1,int max,int min), void (*rep_proc)(int x1,int max,int min) ) {<br /><br />enum {idle, debounce, go_rep, wait_rep, rep};<br /><br /><br />if(!rep_time) rep_time=20;<br />if(!rep_wait) rep_wait=150;<br /><br />uint8_t key_press = !(*KPIN &amp; key_mask);<br /><br />if( key_press &amp;&amp; !*key_state ) {<br />*key_state = debounce;<br />Timer1 = 15;<br />} else<br />if( *key_state  ) {<br /><br />if( key_press &amp;&amp; debounce==*key_state &amp;&amp; !Timer1 ) {<br />*key_state = 2;<br />Timer1=5;<br />} else<br />if( !key_press &amp;&amp; *key_state&gt;1 &amp;&amp; *key_state&lt;4 ) {<br />if(push_proc) push_proc(x1,max,min);/* KEY_UP */<br />*key_state=idle;<br />} else<br />if( key_press &amp;&amp; go_rep==*key_state &amp;&amp; !Timer1 ) {<br />*key_state = wait_rep;<br />Timer1=rep_wait;<br />} else<br />if( key_press &amp;&amp; wait_rep==*key_state &amp;&amp; !Timer1 ) {<br />*key_state = rep;<br />} else<br />if( key_press &amp;&amp; rep==*key_state &amp;&amp; !Timer1 ) {<br />Timer1 = rep_time;<br />if(rep_proc) rep_proc(x1, max, min);/* KEY_REP */<br />}<br />}<br />if( *key_state&gt;=3 &amp;&amp; !key_press ) *key_state = idle;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18327">Krzycho69</a> — 24 paź 2018, o 08:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krzycho69]]></name></author>
<updated>2018-10-24T08:27:12+01:00</updated>
<published>2018-10-24T08:27:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212930#p212930</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212930#p212930"/>
<title type="html"><![CDATA[Re: SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212930#p212930"><![CDATA[
<div class="quotetitle">kalani napisał(a):</div><div class="quotecontent"><br />Superdebounce musi &quot;znać&quot; parametry wywoływanej funkcji. Jeśli są one zewnętrzne wobec funkcji debounce to trzeba je podać w parametrach tejże funkcji. Żeby nie zrujnować uniwersalności funkcji debounce, parametry te należy zamknąć w strukturze, i przekazywać ją do debounce jako wskaźnik. Oczywiście dalsze przekazanie parametru do funkcji zwrotnej także musi być przez wskaźnik. W ten sposób funkcja debunce nie musi nawet znać wewnętrznej budowy parametru i może pozostać uniwersalna dla dowolnego zestawu parametrów.<br /></div><br /><br /><br />Sam tego nie ogarnę nie mój poziom <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />.<br />Właśnie o to chodzi żeby SuperDebunce Była uniwersalna, ponieważ w trakcie programu chciałem parametry zmieniać.<br /><br />- trzeba utworzyć strukturę <br />- ale jak wstawić parametry do SuberDebunce i funkcji zwrotnej ? - tego nie potrafię.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18327">Krzycho69</a> — 24 paź 2018, o 08:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krzycho69]]></name></author>
<updated>2018-10-24T08:08:55+01:00</updated>
<published>2018-10-24T08:08:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212928#p212928</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212928#p212928"/>
<title type="html"><![CDATA[Re: SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212928#p212928"><![CDATA[
main.c<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: <br /> *      Author: Krzysztof <br /> */<br /><br />/* DDRx - rejestr kierunku 0-wejście, 1-wyjście np DDRC |=(1&lt;&lt;PC7) - PC7 wyjście<br /> *                                                 DDRC &amp;=~(1&lt;&lt;PC6) - PC6 jako wejście<br /> * PORTx - rejestr wyjściowy ustawiamy 1 lub 0 na pinie np PORTC |=(1&lt;&lt;PC6) na wejściu 1 podciagniecie<br /> *                                                        pinu do VCC<br /> *                                                        PORTC&amp;=~(1&lt;&lt;PC7) na wyjściu 0<br /> *PINx - rejestr wejściowy do sprawdzania stanu Pinu np if !(PINC&amp;=(1&lt;&lt;PC6))<br /> *                                                   jeżeli do PC6 podłaczymy 0 to wyrażenie w<br /> *                                                   nawisie da 0 a ! zmieni je na 1 czyli TRUE<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;funkcje.h&quot;<br />#include &quot;LCD/lcd44780.h&quot;// w ustawieniach wyzwietlacza sprawdzic czy RW do GND czy procesora<br /><br />#define KL1 (1&lt;&lt;PD0)// definicje klawiszy do Super Debunce wejście do menu<br />#define KL2 (1&lt;&lt;PD1)// definicja klawisza do Superdebunce zwiększenie godzin<br />#define KL3 (1&lt;&lt;PC2)// definicja klawisza do SuperDebunce zwiekszenie minut<br /><br /><br />uint8_t k1, k2, k3, k4, k5, k6; // zmienne pomocnicze do obsługi Superdebunce<br /><br /><br />uint8_t znak_buzka&#91;&#93; = {14,17,27,17,17,21,17,14};// wzór znaku buźki w pamięci FLASH<br />uint8_t znak_termo&#91;&#93; = {4,10,10,10,17,31,31,14};// wzór znaku termometru w pamięci FLASH<br /><br />void zwiekszenie(int zmienna, int max, int min);<br />void zwiekszenie_menu1(void);<br /><br />int main(void){<br />PORTD |= KL1 | KL2; // podciaganie wejśc do 1, DDRD nie trzeba ustawiac na 0 ponieważ domyslnie<br />PORTC |= KL3;<br /><br />lcd_init();//inicjalizacja wyświetlacza<br />timer2_init();<br /><br /><br />lcd_defchar(0x80, znak_buzka);//zaladowanie znaku buzka do pamieci CGRAM wyswietlacza<br />lcd_locate(0,1);//locate dac pomiedzy zaladowaniem znaku a wyswietleniem aby byl czas na zaladowanie<br />lcd_str(&quot;\x80&quot;);//wyswietlenie znaku buzka na wyswietlaczu<br /><br />_delay_ms(1000);<br /><br />lcd_defchar(0x81, znak_termo);<br />lcd_locate(0,4);<br />lcd_str(&quot;\x81&quot;);<br /><br /><br />lcd_locate(0,6);<br />lcd_str(&quot;proba&quot;);<br />_delay_ms(1000);<br />//lcd_cls();<br />x1=5;<br />min = 1;<br />max = 7;<br /><br /><br />sei();//włączenie przerwań zaremowane<br /><br />//uint8_t a=0;<br />//uint16_t b=0;<br />while(1){<br /><br />SuperDebounce(&amp;k2, &amp;PIND, KL2, 20, 50, zwiekszenie_menu1, zwiekszenie_menu1);<br />SuperDebounceP(&amp;k1, &amp;PIND, KL1, 20, 50, zwiekszenie, zwiekszenie);<br /><br />lcd_locate(1,1);<br />lcd_int(x1);<br /><br /><br /><br /><br />}<br /><br />}<br /><br />void zwiekszenie(int x1, int max, int min) {<br />lcd_cls();<br />x1++;<br />bip();<br />if (x1 &gt; max){<br />x1 = min;<br />}<br /><br />}<br /><br />void zwiekszenie_menu1(void) {<br />lcd_cls();<br />x1++;<br />bip();<br />//if (x &gt; 3){<br />//x=0;<br />//}<br />}[/syntax]<br /><br />funkcje.h<br /><br />[syntax=c]/*<br /> * funkcje.h<br /> *<br /> *  Created on: 6 sty 2016<br /> *      Author: Krzysiek<br /> */<br /><br />#ifndef STEROWNIK_CZASOWY_FUNKCJE_H_<br />#define STEROWNIK_CZASOWY_FUNKCJE_H_<br /><br />#define BIP (1&lt;&lt;PC3) // Pin jako BIP<br />#define BIP_ON PORTC |= BIP // właczenie Buzera ustawienie na 1<br />#define BIP_OFF PORTC &amp;=~BIP // wylaczenie Buzera ustawienie na 0<br />// deklaracje zmiennych<br /><br />extern volatile uint16_t Timer1, Timer2, Timer3, Timer4, mstick; // deklaracja timerów programowych (extern - dostepne w innych plikach)<br /><br />int x1, max, min;<br /><br /><br /><br />// deklaracje funkcji<br /><br /><br />void timer2_init (void); // deklaracja funkcji ustawiającej timer2<br /><br />void SuperDebounce(uint8_t * key_state, volatile uint8_t *KPIN,<br />uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,<br />void (*push_proc)(void), void (*rep_proc)(void) );<br /><br />void SuperDebounceP(uint8_t * key_state, volatile uint8_t *KPIN,<br />uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,<br />void (*push_proc)(int x1,int max,int min), void (*rep_proc)(int x1,int max,int min) );<br /><br />void bip (void); // deklaracja funkcji Buzera<br /><br /><br /><br /><br />#endif /* STEROWNIK_CZASOWY_FUNKCJE_H_ */[/syntax]<br /><br />funkcje.c<br /><br />[syntax=c]/*<br /> *<br /> *<br /> *  Created on: 6 sty 2016<br /> *      Author: Krzysztof Gładysz<br /> */<br /><br />/* DDRx - rejestr kierunku 0-wejście, 1-wyjście np DDRC |=(1&lt;&lt;PC7) - PC7 wyjście<br /> *                                                 DDRC &amp;=~(1&lt;&lt;PC6) - PC6 jako wejście<br /> * PORTx - rejestr wyjściowy ustawiamy 1 lub 0 na pinie np PORTC |=(1&lt;&lt;PC6) na wejściu 1 podciagniecie<br /> *                                                        pinu do VCC<br /> *                                                        PORTC&amp;=~(1&lt;&lt;PC7) na wyjściu 0<br /> *PINx - rejestr wejściowy do sprawdzania stanu Pinu np if !(PINC&amp;=(1&lt;&lt;PC6))<br /> *                                                   jeżeli do PC6 podłaczymy 0 to wyrażenie w<br /> *                                                   nawisie da 0 a ! zmieni je na 1 czyli TRUE<br /> */<br /><br />// dołączone pliki biblioteczne<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />// dołaczone moje pliki nagłówkowe<br /><br />#include &quot;funkcje.h&quot;<br /><br /><br />// definicje zmiennych<br /><br />volatile uint16_t Timer1, Timer2, Timer3, Timer4, mstick; // definicja timerów<br />//Timer1  w Superdebynce<br />//Timer4 co 1 s odczyt temperatury i ADC<br />int x1, max, min;<br /><br /><br /><br />ISR(TIMER2_COMP_vect) // przerwanie do obsługi timerow programowych<br />{<br />uint16_t n;<br /><br />n = Timer1;/* 100Hz Timer1 */<br />if (n) Timer1 = --n;<br />n = Timer2;/* 100Hz Timer2 */<br />if (n) Timer2 = --n;<br />n = Timer3;/* 100Hz Timer3 */<br />if (n) Timer3 = --n;<br />n = Timer4;/* 100Hz Timer4 */<br />if (n) Timer4 = --n;<br />mstick++;<br /><br />}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br />/************** funkcja SuperDebounce do obsługi pojedynczych klawiszy ***************<br /> * AUTOR: Mirosław Kardaś<br /> * ZALETY:<br /> * - nie wprowadza najmniejszego spowalnienia<br /> * - posiada funkcję REPEAT (powtarzanie akcji dla dłużej wciśniętego przycisku)<br /> * - można przydzielić różne akcje dla trybu REPEAT i pojedynczego kliknięcia<br /> * - można przydzielić tylko jedną akcję wtedy w miejsce drugiej przekazujemy 0 (NULL)<br /> *<br /> * Wymagania:<br /> * Timer programowy utworzony w oparciu o Timer sprzętowy (przerwanie 100Hz)<br /> *<br /> * Parametry wejściowe:<br /> *<br /> * *key_state - wskaźnik na zmienną w pamięci RAM (1 bajt) - do przechowywania stanu klawisza<br /> *  *KPIN - nazwa PINx portu na którym umieszczony jest klawisz, np: PINB<br /> *  key_mask - maska klawisza np: (1&lt;&lt;PB3)<br /> *  rep_time - czas powtarzania funkcji rep_proc w trybie REPEAT<br /> *  rep_wait - czas oczekiwania do przejścia do trybu REPEAT<br /> *  push_proc - wskaźnik do własnej funkcji wywoływanej raz po zwolenieniu przycisku<br /> *  rep_proc - wskaźnik do własnej funkcji wykonywanej w trybie REPEAT<br /> **************************************************************************************/<br /><br />void SuperDebounce(uint8_t * key_state, volatile uint8_t *KPIN,<br />uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,<br />void (*push_proc)(void), void (*rep_proc)(void) ) {<br /><br />enum {idle, debounce, go_rep, wait_rep, rep};<br /><br />if(!rep_time) rep_time=20;<br />if(!rep_wait) rep_wait=150;<br /><br />uint8_t key_press = !(*KPIN &amp; key_mask);<br /><br />if( key_press &amp;&amp; !*key_state ) {<br />*key_state = debounce;<br />Timer1 = 15;<br />} else<br />if( *key_state  ) {<br /><br />if( key_press &amp;&amp; debounce==*key_state &amp;&amp; !Timer1 ) {<br />*key_state = 2;<br />Timer1=5;<br />} else<br />if( !key_press &amp;&amp; *key_state&gt;1 &amp;&amp; *key_state&lt;4 ) {<br />if(push_proc) push_proc();/* KEY_UP */<br />*key_state=idle;<br />} else<br />if( key_press &amp;&amp; go_rep==*key_state &amp;&amp; !Timer1 ) {<br />*key_state = wait_rep;<br />Timer1=rep_wait;<br />} else<br />if( key_press &amp;&amp; wait_rep==*key_state &amp;&amp; !Timer1 ) {<br />*key_state = rep;<br />} else<br />if( key_press &amp;&amp; rep==*key_state &amp;&amp; !Timer1 ) {<br />Timer1 = rep_time;<br />if(rep_proc) rep_proc();/* KEY_REP */<br />}<br />}<br />if( *key_state&gt;=3 &amp;&amp; !key_press ) *key_state = idle;<br />}<br /><br />void SuperDebounceP(uint8_t * key_state, volatile uint8_t *KPIN,<br />uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,<br />void (*push_proc)(int x1,int max,int min), void (*rep_proc)(int x1,int max,int min) ) {<br /><br />enum {idle, debounce, go_rep, wait_rep, rep};<br /><br /><br />if(!rep_time) rep_time=20;<br />if(!rep_wait) rep_wait=150;<br /><br />uint8_t key_press = !(*KPIN &amp; key_mask);<br /><br />if( key_press &amp;&amp; !*key_state ) {<br />*key_state = debounce;<br />Timer1 = 15;<br />} else<br />if( *key_state  ) {<br /><br />if( key_press &amp;&amp; debounce==*key_state &amp;&amp; !Timer1 ) {<br />*key_state = 2;<br />Timer1=5;<br />} else<br />if( !key_press &amp;&amp; *key_state&gt;1 &amp;&amp; *key_state&lt;4 ) {<br />if(push_proc) push_proc(x1,max,min);/* KEY_UP */<br />*key_state=idle;<br />} else<br />if( key_press &amp;&amp; go_rep==*key_state &amp;&amp; !Timer1 ) {<br />*key_state = wait_rep;<br />Timer1=rep_wait;<br />} else<br />if( key_press &amp;&amp; wait_rep==*key_state &amp;&amp; !Timer1 ) {<br />*key_state = rep;<br />} else<br />if( key_press &amp;&amp; rep==*key_state &amp;&amp; !Timer1 ) {<br />Timer1 = rep_time;<br />if(rep_proc) rep_proc(x1, max, min);/* KEY_REP */<br />}<br />}<br />if( *key_state&gt;=3 &amp;&amp; !key_press ) *key_state = idle;<br />}<br /><br /><br />//inicjalizacja Timear2 wykonana w postaci funkcji<br />void timer2_init (void){<br />/* Timer2 – inicjalizacja przerwania co 1ms */<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb pracy CTC<br />TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS20)|(1&lt;&lt;CS21);// preskaler = 1024<br />OCR2 = 155;// przerwanie porównania co 10ms (100Hz)<br />TIMSK |= (1&lt;&lt;OCIE2);// Odblokowanie przerwania CompareMatch<br /><br />}<br /><br />void bip (void){<br />BIP_ON;<br />_delay_ms(15);<br />BIP_OFF;<br />}[/syntax]<br /><br />Przesyłam pliki, chodzi o to, aby po wciśnięciu klawisza KL1 wykonała się funkcja SuperDebunceP, do której przekazuję funkcję zwiększenie z 3 parametrami, x1, max i min, funkcja zwiekszenie ma tylko zwiększać x1 w zadanym przedziele pomiędzy min a max.<br /><br />W tej chwili SuperDebunce wywołuje funkcję zwiększenie ponieważ czyści się ekran i słychać bip() ( buzer), ale nie zwiększa mi wartości x1, przynajmniej na wyświetlaczu tego nie widzę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18327">Krzycho69</a> — 24 paź 2018, o 08:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2018-10-24T07:56:58+01:00</updated>
<published>2018-10-24T07:56:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212927#p212927</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212927#p212927"/>
<title type="html"><![CDATA[Re: SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212927#p212927"><![CDATA[
W kodzie z poprzedniego Twojego posta podajesz jako parametry wywołania funkcji zmienne x, max i min. Jakie wartości mają te zmienne przy wywołaniu?<br />W tej funkcji:[syntax=c]void zwiekszenie_menu2(int x, int max, int min) {<br />            lcd_cls();<br />            x++;<br />            bip();<br />            if (x &gt; max){<br />                    x=min;<br />            }<br />    }[/syntax]zmienne x, min i max są znane. Natomiast nic mi nie wiadomo o tym, czy zmienne te są lokalne czy globalne.<br />Wstawisz cały kod? Będzie można coś więcej powiedzieć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 24 paź 2018, o 07:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krzycho69]]></name></author>
<updated>2018-10-24T06:55:09+01:00</updated>
<published>2018-10-24T06:55:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212923#p212923</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212923#p212923"/>
<title type="html"><![CDATA[Re: SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212923#p212923"><![CDATA[
[syntax=c]void zwiekszenie_menu2(int x, int max, int min) {<br />lcd_cls();<br />x++;<br />bip();<br />if (x &gt; max){<br />x=min;<br />}<br />}[/syntax]<br /><br />Ok, mam funkcję jak powyżej jak ją odpalić za pomocą SuperDebunce?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18327">Krzycho69</a> — 24 paź 2018, o 06:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2018-10-23T21:34:33+01:00</updated>
<published>2018-10-23T21:34:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212917#p212917</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212917#p212917"/>
<title type="html"><![CDATA[Re: SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212917#p212917"><![CDATA[
A tu masz błąd, że nie zadeklarowałeś zmiennej x<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 23 paź 2018, o 21:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krzycho69]]></name></author>
<updated>2018-10-23T21:05:46+01:00</updated>
<published>2018-10-23T21:05:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212915#p212915</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212915#p212915"/>
<title type="html"><![CDATA[Re: SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212915#p212915"><![CDATA[
<div class="quotetitle">jez2000 napisał(a):</div><div class="quotecontent"><br />W definicji masz ze przekazujesz 3 argumenty a przy wywolaniu funkcji nic nie przekazujesz zadnego. Tak jakbys mial void<br /></div><br /><br />No tak, jak wstawię liczby<br />[syntax=c]if(push_proc) push_proc(1,2,3);[/syntax]<br /><br />to się kompiluje, ale nie o to chodzi<br /><br /><br />myślałem, że może tak<br /><br />[syntax=c]if( !key_press &amp;&amp; *key_state&gt;1 &amp;&amp; *key_state&lt;4 ) {<br />if(push_proc) push_proc(x,max,min);/* KEY_UP */<br />*key_state=idle;[/syntax]<br /><br />ale też źle<br />mam błąd  <br /><br />../funkcje.c:145:28: error: 'x' undeclared (first use in this function)<br />    if(push_proc) push_proc(x,max,min);      /* KEY_UP */<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18327">Krzycho69</a> — 23 paź 2018, o 21:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jez2000]]></name></author>
<updated>2018-10-23T20:47:44+01:00</updated>
<published>2018-10-23T20:47:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212911#p212911</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212911#p212911"/>
<title type="html"><![CDATA[Re: SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212911#p212911"><![CDATA[
W definicji masz ze przekazujesz 3 argumenty a przy wywolaniu funkcji nic nie przekazujesz zadnego. Tak jakbys mial void<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11828">jez2000</a> — 23 paź 2018, o 20:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krzycho69]]></name></author>
<updated>2018-10-23T20:32:34+01:00</updated>
<published>2018-10-23T20:32:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212909#p212909</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212909#p212909"/>
<title type="html"><![CDATA[Re: SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212909#p212909"><![CDATA[
Zmieniłem deklarację i definicję<br />[syntax=c]void SuperDebounceP(uint8_t * key_state, volatile uint8_t *KPIN,<br />uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,<br />void (*push_proc)(int x,int max,int min), void (*rep_proc)(int x,int max,int min) )[/syntax]<br /><br /><br />ale teraz w treści funkcji:<br /><br />[syntax=c]if( !key_press &amp;&amp; *key_state&gt;1 &amp;&amp; *key_state&lt;4 ) {<br />if(push_proc) push_proc();/* KEY_UP */<br />*key_state=idle;[/syntax]<br /><br />mam błąd<br /><br />../funkcje.c:157:26: error: too few arguments to function 'push_proc'<br />make: *** [funkcje.o] Błąd 1<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18327">Krzycho69</a> — 23 paź 2018, o 20:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jez2000]]></name></author>
<updated>2018-10-23T19:50:43+01:00</updated>
<published>2018-10-23T19:50:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212906#p212906</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212906#p212906"/>
<title type="html"><![CDATA[Re: SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212906#p212906"><![CDATA[
No jak zmieniasz deklarację to definicję też musisz zmienić<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11828">jez2000</a> — 23 paź 2018, o 19:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krzycho69]]></name></author>
<updated>2018-10-23T19:45:43+01:00</updated>
<published>2018-10-23T19:45:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212905#p212905</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212905#p212905"/>
<title type="html"><![CDATA[Re: SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212905#p212905"><![CDATA[
A co z definicją funkcji SuperDebunce po zmianie deklaracji?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18327">Krzycho69</a> — 23 paź 2018, o 19:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jez2000]]></name></author>
<updated>2018-10-23T19:11:04+01:00</updated>
<published>2018-10-23T19:11:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212901#p212901</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212901#p212901"/>
<title type="html"><![CDATA[Re: SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212901#p212901"><![CDATA[
Można, tyle że jako wskaźnik podajesz tylko nazwę funkcji bez argumentów<br /><br />[syntax=c]SuperDebounce(&amp;k2, &amp;PIND, KL2, 20, 50, zwiekszenie, zwiekszenie)[/syntax]<br /><br />Tyle że wcześniej musisz ją zadeklarować z przynajmniej typami argumentów<br /><br />Np<br />[syntax=c]1.SuperDebounce(int PIN, int PIND, int KL, int V_1, int V_2, (void)(*zwiekszenie)(int x,int max,int min), (void)(*zwiekszenie)(int x,int max,int min));[/syntax]<br /><br />Taki przykład z tymi zmiennymi<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11828">jez2000</a> — 23 paź 2018, o 19:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krzycho69]]></name></author>
<updated>2018-10-23T18:51:01+01:00</updated>
<published>2018-10-23T18:51:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212898#p212898</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212898#p212898"/>
<title type="html"><![CDATA[SuperDebunce - funkcja z parametrami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21469&amp;p=212898#p212898"><![CDATA[
Mam pytanie odnośnie funkcji SuperDebunce do obsługi przycisków, czy można za jej pomocą wywołać funkcję z argumentami?<br /><br />Np :<br />[syntax=c]SuperDebounce(&amp;k2, &amp;PIND, KL2, 20, 50, zwiekszenie(x,max,min), zwiekszenie(x,max,min));[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18327">Krzycho69</a> — 23 paź 2018, o 18:51</p><hr />
]]></content>
</entry>
</feed>