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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-01-02T15:05:23+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21772&amp;mode</id>
<entry>
<author><name><![CDATA[mako067]]></name></author>
<updated>2019-01-02T15:05:23+01:00</updated>
<published>2019-01-02T15:05:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21772&amp;p=215323#p215323</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21772&amp;p=215323#p215323"/>
<title type="html"><![CDATA[Re: Przerywanie pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21772&amp;p=215323#p215323"><![CDATA[
Dzięki chłopaki, już mam jakiś większy pogląd na tę sprawę i wiem, że muszę zmienić mój program. <br /><br />Zabiorę się jeszcze raz do tego przy pomocy linków jak i BB.<br /><br />Jeszcze raz dziękuje.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=256">mako067</a> — 2 sty 2019, o 15:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mako067]]></name></author>
<updated>2019-01-01T14:52:52+01:00</updated>
<published>2019-01-01T14:52:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21772&amp;p=215289#p215289</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21772&amp;p=215289#p215289"/>
<title type="html"><![CDATA[Re: Przerywanie pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21772&amp;p=215289#p215289"><![CDATA[
Czy byłby to dla Ciebie problem, gdybyś to trochę &quot;szerzej&quot; opisał? <br /><br />Niestety nie czuję jakoś tego rozwiązania. Będę dozgodnnie wdzięczny.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=256">mako067</a> — 1 sty 2019, o 14:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mako067]]></name></author>
<updated>2018-12-27T00:01:48+01:00</updated>
<published>2018-12-27T00:01:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21772&amp;p=215083#p215083</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21772&amp;p=215083#p215083"/>
<title type="html"><![CDATA[Re: Przerywanie pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21772&amp;p=215083#p215083"><![CDATA[
ale dobrze rozumiem, że efekt zostanie zmieniony dopiero po przejściu przez cały efekt? Tzn. efekt zmieniony zostanie po zakończeniu trwania danego efektu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=256">mako067</a> — 27 gru 2018, o 00:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mako067]]></name></author>
<updated>2018-12-26T14:23:03+01:00</updated>
<published>2018-12-26T14:23:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21772&amp;p=215069#p215069</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21772&amp;p=215069#p215069"/>
<title type="html"><![CDATA[Przerywanie pętli]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21772&amp;p=215069#p215069"><![CDATA[
Witam wszystkich bardzo serdecznie!<br /><br />Piszę w sprawie programu do &quot;sterownika&quot; magic ledów, ws2812.<br /><br />A więc tak, napisałem sobie program, który wyrzuca na ledy poszczególne efekty. Narazie jest to tylko możliwe poprzez wcześniejsze ustalenie kolejności wyrzucania efektów w programie. Chciałbym to zmienić, aby móc osobiście zmieniać efekty po naciśnięciu jednego przycisku. Wpadłem na pomysł, że użyję instrukcji switch, po naciśnięciu przycisku zmieni się zmienna , która przełączy efekt. <br /><br />Niestety, moja niewiedza czy nieuwaga spowodowała, że nie działa to tak, jak sobie wymyśliłem. Podczas naciśnięcia przycisku zmienna się oczywiście dodaje, lecz nie przełącza się program z wiadomej przyczyny. Przełączy się dopiero po przejsciu efektu i sprawdzeniu ponownie instrukcji switch. <br /><br />W programie używam _delay_ms, ale mam to zrobione tak, że wywołuję funkcję, która zawiera w sobie tylko jeden _delay_ms, który jest powtarzany tyle razy, jaki jest argument tejże funkcji. <br /><br />Czy byłby ktoś tak dobry i powiedział mi, jak przerwać efekt i jednocześnie przenieść się na następny? Zrobić to instrukcją switch, czy może czymś innym? <br /><br />Moja funkcja main prezentuje się następująco:<br /><br />[syntax=c]/*<br />/*<br /> * main.c<br /> *<br /> *  Created on: 20 gru 2018<br /> *      Author: Maciek<br /> *<br /> *SYGNAL LEDOWY PODPIETY POD PORTA PIN A0.<br /> *JESLI CHCESZ GO ZMIENIC, WEJDZ DO PLIKU H<br /> *TYLKO TAM JEST DO ZMIANY<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 &lt;stdlib.h&gt;<br /><br />#include &lt;string.h&gt;<br /><br />#include &quot;WS2812/ws281x.h&quot;<br />#include &quot;obslugaKlawiszy.h&quot;<br /><br /><br /><br />TWSRGB ws_rgb_leds&#91; WS_LED_CNT &#93;;//tablica z ledami<br /><br /><br /><br />uint8_t multiColor = 2;<br />uint8_t zmienna = 240;<br /><br />uint8_t kolor = 0;<br />uint8_t krok = 0;<br />uint8_t saturacja = 0;<br />uint8_t jasnosc = 40;<br />uint16_t czas = 0;<br />uint8_t prawo = 150;<br />uint8_t lewo = 214;<br />uint8_t powtorz = 2;<br /><br />uint8_t przelacz = 0;<br />//uint8_t potwierdz = 0;<br /><br />#define liczbaEfektow 2<br /><br />int main(void){<br /><br />sei();<br /><br />TCCR0 = (1&lt;&lt;CS01);<br />TCCR2 = (1&lt;&lt;CS21) | (1&lt;&lt;CS20);<br /><br />czysc();<br /><br /><br /><br />while(1)<br />{<br />/*<br />for( uint8_t ptl = 0; ptl &lt; powtorz; ptl++ ){<br />rozswietlanie(70, 140);<br />}<br />czysc();<br />while(1);<br />*/<br /><br />//===============POCZATEK PROGRAMU GLOWEGO================<br /><br />switch(przelacz)<br />{<br />case 0:<br /><br />for( uint8_t ptl = 0; ptl &lt; powtorz; ptl++ )<br />{<br />rozswietlanie(jasnosc, kolor);<br />sprawdzKlawisze();<br />}<br />czysc();<br />break;<br /><br />case 1:<br /><br />for( uint8_t ptl = 0; ptl &lt; powtorz; ptl++ )<br />{<br />flyLine(jasnosc , kolor);<br />}<br />czysc();<br />break;<br /><br /><br />}<br /><br />}<br /><br />}<br /><br /><br /><br /><br /><br /><br /><br />void mk_delay ( uint16_t ms)<br />{<br />while(ms--)<br />{<br />sprawdzKlawisze();<br />_delay_ms(1);<br />}<br />}<br /><br /><br /><br />//==============KLAWSZE=============<br /><br />void sprawdzKlawisze(void)<br />{<br />DDRC &amp;= ~(KLAWISZ1 | KLAWISZ2 | KLAWISZ3 | KLAWISZ4);<br />PORTC |= KLAWISZ1 | KLAWISZ2 | KLAWISZ3 | KLAWISZ4;<br />uint8_t krok = 0;<br /><br />//=========SPRAWDZENIE, CZY WYBRANO KLAWISZ4, JESLI TAK, PRZELACZ EFEKT======================<br />if(  KLAWISZ_ON (KLAWISZ4) )<br />{<br />przelacz++;<br />if( przelacz &gt; ( liczbaEfektow - 1 ))przelacz = ( 0  );<br />}<br /><br /><br /><br />//==========SPRAWDZENIE PIERWSZEGO KLAIWSZA, CZY NALEZY PRZEJSC DO MENU KONFIGURACJI<br />if(  KLAWISZ_ON (KLAWISZ1) )<br />{<br />//==========PIERWSZE========ZMIANA KOLORU==============<br />do{<br />czysc();<br /><br />if(  KLAWISZ_ON (KLAWISZ2) )<br />{<br />krok = 255 / WS_LED_CNT * kolor;//obliczanie, dzielenie ilosci 255, maksymalnej na ilosc diod<br />hsv_to_rgb1(&amp;ws_rgb_leds&#91;2&#93;, krok, saturacja, jasnosc);<br />kolor++;<br />if( kolor &gt; 255) kolor = 255;<br />}<br /><br />if(  KLAWISZ_ON (KLAWISZ3) )<br />{<br />krok = 255 / WS_LED_CNT * kolor;//obliczanie, dzielenie ilosci 255, maksymalnej na ilosc diod<br />hsv_to_rgb1(&amp;ws_rgb_leds&#91;2&#93;, krok, saturacja, jasnosc);<br />kolor--;<br />if ( kolor &lt; 0 ) kolor = 0;<br />}<br />mk_delay(200);//czas potrzebny na ocenę poprawności ustawień<br />}while(KLAWISZ_ON (KLAWISZ1));<br /><br />//==========DRUGIE========ZMIANA SATURACJI==============<br /><br />do{<br />czysc();<br /><br />if(  KLAWISZ_ON (KLAWISZ2) )<br />{<br />krok = 255 / WS_LED_CNT * kolor;//obliczanie, dzielenie ilosci 255, maksymalnej na ilosc diod<br />hsv_to_rgb1(&amp;ws_rgb_leds&#91;2&#93;, krok, saturacja, jasnosc);<br />saturacja++;<br />if( saturacja &gt; 255) saturacja = 255;<br />}<br /><br />if(  KLAWISZ_ON (KLAWISZ3) )<br />{<br />krok = 255 / WS_LED_CNT * kolor;//obliczanie, dzielenie ilosci 255, maksymalnej na ilosc diod<br />hsv_to_rgb1(&amp;ws_rgb_leds&#91;2&#93;, krok, saturacja, jasnosc);<br />saturacja--;<br />if ( saturacja &lt; 0 ) saturacja = 0;<br />}<br />mk_delay(200);<br />}while(KLAWISZ_ON (KLAWISZ1));<br /><br />//==========TRZECIE========ZMIANA JASNOSCI==============<br /><br />do{<br />czysc();<br /><br />if(  KLAWISZ_ON (KLAWISZ2) )<br />{<br />krok = 255 / WS_LED_CNT * kolor;//obliczanie, dzielenie ilosci 255, maksymalnej na ilosc diod<br />hsv_to_rgb1(&amp;ws_rgb_leds&#91;2&#93;, krok, saturacja, jasnosc);<br />jasnosc++;<br />if( jasnosc &gt; 255) jasnosc = 255;<br />}<br /><br />if(  KLAWISZ_ON (KLAWISZ3) )<br />{<br />krok = 255 / WS_LED_CNT * kolor;//obliczanie, dzielenie ilosci 255, maksymalnej na ilosc diod<br />hsv_to_rgb1(&amp;ws_rgb_leds&#91;2&#93;, krok, saturacja, jasnosc);<br />jasnosc--;<br />if ( jasnosc &lt; 0 ) jasnosc = 0;<br /><br />}<br />}while(KLAWISZ_ON (KLAWISZ1));<br /><br />//==========CZWARTE========ZMIANA CZASU SWIECENIA==============<br /><br />do{<br />czysc();<br /><br />if(  KLAWISZ_ON (KLAWISZ2) )<br />{<br />krok = 255 / WS_LED_CNT * kolor;//obliczanie, dzielenie ilosci 255, maksymalnej na ilosc diod<br />hsv_to_rgb1(&amp;ws_rgb_leds&#91;czas&#93;, krok, saturacja, jasnosc);<br />if( czas &gt; 100) czas = czas + 100;<br />else czas+=5;<br />}<br /><br />if(  KLAWISZ_ON (KLAWISZ3) )<br />{<br />krok = 255 / WS_LED_CNT * kolor;//obliczanie, dzielenie ilosci 255, maksymalnej na ilosc diod<br />if( czas &gt; 100)<br />{<br />hsv_to_rgb1(&amp;ws_rgb_leds&#91;czas/100&#93;, krok, saturacja, jasnosc);<br />czas -= 100;<br />}<br />else<br />{<br />hsv_to_rgb1(&amp;ws_rgb_leds&#91;czas&#93;, krok, saturacja, jasnosc);<br />czas-=5;<br />}<br /><br />}<br />}while(KLAWISZ_ON (KLAWISZ1));<br /><br />}<br />}<br /><br />uint8_t KLAWISZ_ON (uint8_t KLAWISZ) //Definicja funkcji sprawdzajacej czy jest stan niski na ktoryms z klawiszy<br />{<br />        if( !(PINC &amp; KLAWISZ) )                 //Ktorys z klawiszy nacisniety ?<br />        {<br />                _delay_ms(150);                          //Drgania stykow<br /><br />                if( !(PINC &amp; KLAWISZ) )         //Ktorys z klaiwszy nacisniety ?<br />                {<br />                        return 1;                               //Jezeli ktorys z klawiszy zostal nacisniety petla sie wykona poniewaz zwaracam wartosc wieksza niz 0<br />                }<br />        }<br />        return 0;                                               //Jezeli klawisz nie nacisniety to petla sie nie wykona<br />}[/syntax]<br /><br /><br />jak widać, w mk_delay jest wsadzone sprawdzenie przycisków. Według mojego zamysłu, podczas wcisniecia przycisku nastepuje calkowite przerwanie efektu i wywolanie nastepnego efektu. Efektow jest oczywiscie wiecej niz 2, wiec narazie to tylko prototyp, ktory zostanie dopracowany.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=256">mako067</a> — 26 gru 2018, o 14:23</p><hr />
]]></content>
</entry>
</feed>