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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-10-31T17:23:02+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21485&amp;mode</id>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2018-10-31T17:23:02+01:00</updated>
<published>2018-10-31T17:23:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213218#p213218</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213218#p213218"/>
<title type="html"><![CDATA[Re: ws2812b strona z efektami :)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213218#p213218"><![CDATA[
Zrobiłem jeszcze taki dodatkowy efekcik <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br />.c<br />[syntax=c]/* funkcja efektu ognia odbijającego się na ścianie */<br />void FireEffect(int FirePower, volatile uint8_t * timer_sys){<br />//void tdelay( uint16_t ms );<br />if(*timer_sys==0){<br />int r = 255;<br />int g = 96;<br />int b = 12;<br />// FirePower - moc migotania ognia (kolor też się zaostrza)<br />for(int x = 0; x &lt;WS_LED_CNT; x++){<br />int flicker = rand() % FirePower;// 90<br />int r1 = r-flicker;<br />int g1 = g-flicker;<br />int b1 = b-flicker;<br />if(g1&lt;0) g1 = 0;<br />if(r1&lt;0) r1 = 0;<br />if(b1&lt;0) b1 = 0;<br />one_pixel( pasek, x, r1, g1, b1 );<br />}<br />ws281x_asm_send( pasek, WS_LED_CNT, WS_PIN );<br />*timer_sys = (1 + rand() % 10);// 50 - 150<br />}<br />}[/syntax]<br /><br />main.c<br />[syntax=c]FireEffect(90, &amp;timer_delay);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 31 paź 2018, o 17:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2018-10-29T19:28:22+01:00</updated>
<published>2018-10-29T19:28:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213144#p213144</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213144#p213144"/>
<title type="html"><![CDATA[Re: ws2812b strona z efektami :)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213144#p213144"><![CDATA[
Przekonwertowałem sobie na AtMega128, już działa, ale poradnik o wskaźnikach muszę teraz oglądnąć sobie przypomnieć <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> postaram się później opanować tego meteora i lece z innymi efektami <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 29 paź 2018, o 19:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2018-10-29T17:53:04+01:00</updated>
<published>2018-10-29T17:53:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213141#p213141</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213141#p213141"/>
<title type="html"><![CDATA[Re: ws2812b strona z efektami :)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213141#p213141"><![CDATA[
Mógłbyś pokazać jak rozwiązałeś sprawę z timerem? timer_sys? Za pomocą tego parametru zmieniasz wartość przerwania np. OCR0 = timer_sys? - muszę z tymi wskaźnikami poćwiczyć.<br /><br />A meteor działa mi tak, że wygasza się ogon na niebiesko i dopiero leci meteor <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> jeszcze z tym podziałam <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 29 paź 2018, o 17:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2018-10-28T20:22:25+01:00</updated>
<published>2018-10-28T20:22:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213106#p213106</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213106#p213106"/>
<title type="html"><![CDATA[Re: ws2812b strona z efektami :)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213106#p213106"><![CDATA[
O elegancko jak tylko dorwę zestaw to przetestuję <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Fakt z tyli floatami mnie troche poniosło <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 28 paź 2018, o 20:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2018-10-28T17:02:31+01:00</updated>
<published>2018-10-28T17:02:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213095#p213095</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213095#p213095"/>
<title type="html"><![CDATA[Re: ws2812b strona z efektami :)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213095#p213095"><![CDATA[
No właśnie - sporo tych floatów <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 28 paź 2018, o 17:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2018-10-28T15:24:46+01:00</updated>
<published>2018-10-28T15:24:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213082#p213082</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213082#p213082"/>
<title type="html"><![CDATA[Re: ws2812b strona z efektami :)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213082#p213082"><![CDATA[
A ja mam dla Ciebie jeszcze dwie rzeczy  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  efekty bouncing balls i multi color bouncing balls:<br /><br />do pliku ws281x.c:<br />[syntax=c]/* funkcja efektu odbijających się piłek w danym kolorze */<br />void BouncingBalls(uint8_t r, uint8_t g, uint8_t b, int BallCount) {<br />float Gravity = -9.81;<br />int StartHeight = 1;<br /><br />millis_init();// inicjalizacja przerwań<br />sei();// włączenie przerwań<br /><br />float Height&#91;BallCount&#93;;<br />float ImpactVelocityStart = sqrt( -2 * Gravity * StartHeight );<br />float ImpactVelocity&#91;BallCount&#93;;<br />float TimeSinceLastBounce&#91;BallCount&#93;;<br />int   Position&#91;BallCount&#93;;<br />long  ClockTimeSinceLastBounce&#91;BallCount&#93;;<br />float Dampening&#91;BallCount&#93;;<br /><br />for (int i = 0 ; i &lt; BallCount ; i++) {<br />ClockTimeSinceLastBounce&#91;i&#93; = millis();<br />Height&#91;i&#93; = StartHeight;<br />Position&#91;i&#93; = 0;<br />ImpactVelocity&#91;i&#93; = ImpactVelocityStart;<br />TimeSinceLastBounce&#91;i&#93; = 0;<br />Dampening&#91;i&#93; = 0.90 - (float)i/pow(BallCount,2);// float(i)<br />}<br /><br />while (true) {<br />for (int i = 0 ; i &lt; BallCount ; i++) {<br />TimeSinceLastBounce&#91;i&#93; =  millis() - ClockTimeSinceLastBounce&#91;i&#93;;<br />Height&#91;i&#93; = 0.5 * Gravity * pow( TimeSinceLastBounce&#91;i&#93;/1000 , 2.0 ) + ImpactVelocity&#91;i&#93; * TimeSinceLastBounce&#91;i&#93;/1000;<br /><br />if ( Height&#91;i&#93; &lt; 0 ) {<br />Height&#91;i&#93; = 0;<br />ImpactVelocity&#91;i&#93; = Dampening&#91;i&#93; * ImpactVelocity&#91;i&#93;;<br />ClockTimeSinceLastBounce&#91;i&#93; = millis();<br /><br />if ( ImpactVelocity&#91;i&#93; &lt; 0.01 ) {<br />ImpactVelocity&#91;i&#93; = ImpactVelocityStart;<br />}<br />}<br />Position&#91;i&#93; = round( Height&#91;i&#93; * (WS_LED_CNT - 1) / StartHeight);<br />}<br /><br />for (int i = 0 ; i &lt; BallCount ; i++) {<br />one_pixel( pasek, Position&#91;i&#93;, r, g, b );//setPixel(Position&#91;i&#93;,r,g,b);<br />}<br />cli();// na czas wysyłania wyłączyc przerwania<br />ws281x_asm_send( pasek, WS_LED_CNT, WS_PIN );<br />send_rgb( pasek, 0, 0, 0 );<br />sei();// po wysyłaniu trzeba włączyc przerwania<br />}<br />}<br /><br /><br /><br />/* funkcja efektu odbijających się piłek w różnych kolorach */<br />void BouncingColoredBalls(int BallCount, uint8_t colors&#91;&#93;&#91;3&#93;, bool continuous) {<br />float Gravity = -9.81;<br />int StartHeight = 1;<br />// continuous - true: odbijają się cały czas, false: kończą odbijanie<br />millis_init();// inicjalizacja przerwań<br />sei();// włączenie przerwań<br /><br />float Height&#91;BallCount&#93;;<br />float ImpactVelocityStart = sqrt( -2 * Gravity * StartHeight );<br />float ImpactVelocity&#91;BallCount&#93;;<br />float TimeSinceLastBounce&#91;BallCount&#93;;<br />int   Position&#91;BallCount&#93;;<br />long  ClockTimeSinceLastBounce&#91;BallCount&#93;;<br />float Dampening&#91;BallCount&#93;;<br />bool ballBouncing&#91;BallCount&#93;;<br />bool ballsStillBouncing = true;<br /><br />for (int i = 0 ; i &lt; BallCount ; i++) {<br />ClockTimeSinceLastBounce&#91;i&#93; = millis();<br />Height&#91;i&#93; = StartHeight;<br />Position&#91;i&#93; = 0;<br />ImpactVelocity&#91;i&#93; = ImpactVelocityStart;<br />TimeSinceLastBounce&#91;i&#93; = 0;<br />Dampening&#91;i&#93; = 0.90 - (float)i/pow(BallCount,2);<br />ballBouncing&#91;i&#93; = true;<br />}<br /><br />while (ballsStillBouncing) {<br />for (int i = 0 ; i &lt; BallCount ; i++) {<br />TimeSinceLastBounce&#91;i&#93; =  millis() - ClockTimeSinceLastBounce&#91;i&#93;;<br />Height&#91;i&#93; = 0.5 * Gravity * pow( TimeSinceLastBounce&#91;i&#93;/1000 , 2.0 ) + ImpactVelocity&#91;i&#93; * TimeSinceLastBounce&#91;i&#93;/1000;<br /><br />if ( Height&#91;i&#93; &lt; 0 ) {<br />Height&#91;i&#93; = 0;<br />ImpactVelocity&#91;i&#93; = Dampening&#91;i&#93; * ImpactVelocity&#91;i&#93;;<br />ClockTimeSinceLastBounce&#91;i&#93; = millis();<br /><br />if ( ImpactVelocity&#91;i&#93; &lt; 0.01 ) {<br />if (continuous) {<br />ImpactVelocity&#91;i&#93; = ImpactVelocityStart;<br />} else {<br />ballBouncing&#91;i&#93; = false;<br />}<br />}<br />}<br />Position&#91;i&#93; = round( Height&#91;i&#93; * (WS_LED_CNT - 1) / StartHeight);<br />}<br /><br />ballsStillBouncing = false;// założenie, że nie ma odbijających się piłek<br />for (int i = 0 ; i &lt; BallCount ; i++) {<br />one_pixel( pasek, Position&#91;i&#93;, colors&#91;i&#93;&#91;0&#93;, colors&#91;i&#93;&#91;1&#93;, colors&#91;i&#93;&#91;2&#93; );//setPixel(Position&#91;i&#93;,colors&#91;i&#93;&#91;0&#93;,colors&#91;i&#93;&#91;1&#93;,colors&#91;i&#93;&#91;2&#93;);<br />if (ballBouncing&#91;i&#93;) {<br />ballsStillBouncing = true;<br />}<br />}<br />cli();// na czas wysyłania wyłączyc przerwania<br />ws281x_asm_send( pasek, WS_LED_CNT, WS_PIN );<br />send_rgb( pasek, 0, 0, 0 );<br />sei();// po wysyłaniu trzeba włączyc przerwania<br />}<br />}[/syntax]<br /><br />funkcję one_pixel() masz w moim poprzednim poście, funkcja send_rgb() jest w bibliotece Pana Mirka (chyba), natomiast stworzyłem nowe pliki z wszystkimi potrzebnymi funkcjami millis():<br /><br />millism128.c:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/atomic.h&gt;// na potrzeby tej biblioteki<br /><br />#include &quot;millism128.h&quot;<br /><br />static volatile millis_t milliseconds;<br /><br />/* Initialise library - Inicjalizacja biblioteki */<br />void millis_init()<br />{<br />// Timer0 - konfiguracja<br />TCCR0 |= (1&lt;&lt;WGM01 );// Tryb CTC<br />TCCR0 |=  (1&lt;&lt;CS01)|(1&lt;&lt;CS00)| (1&lt;&lt;CS02); // Preskaler 1024<br />OCR0 = 17;// Przerwanie co 600Hz - 1,667ms<br />TIMSK |= (1&lt;&lt;OCIE0);// Aktywacja przerwania<br />}<br /><br />/* Get current milliseconds - Uzyskanie bierzących milisekund */<br />millis_t millis_get()<br />{<br />millis_t ms;<br />ATOMIC_BLOCK(ATOMIC_RESTORESTATE)<br />{<br />ms = milliseconds;<br />}<br />return ms;<br />}<br /><br />/* Reset milliseconds count to 0 - Reset milisekund do 0 */<br />void millis_reset()<br />{<br />ATOMIC_BLOCK(ATOMIC_RESTORESTATE)<br />{<br />milliseconds = 0;<br />}<br />}<br /><br />/* Add time - Dodanie czasu */<br />void millis_add(millis_t ms)<br />{<br />ATOMIC_BLOCK(ATOMIC_RESTORESTATE)<br />{<br />milliseconds += ms;<br />}<br />}<br /><br />/* Subtract time - Odjęcie czasu */<br />void millis_subtract(millis_t ms)<br />{<br />ATOMIC_BLOCK(ATOMIC_RESTORESTATE)<br />{<br />milliseconds -= ms;<br />}<br />}<br /><br /><br />ISR(TIMER0_COMP_vect)<br />{<br />++milliseconds;<br />}[/syntax]<br /><br />millism128.h:<br />[syntax=c]/*<br /> * Milliseconds data type (Typ danych milisekund)<br /> * Data type (Typ danych)Max time span (Maks. okres czasu)Memory used (Użyta pamięc)<br /> * - unsigned char- 255 milisekund- 1 byte \n<br /> * - unsigned int- 65.54 sekund- 2 bytes \n<br /> * - unsigned long- 49.71 dni- 4 bytes \n<br /> * - unsigned long long- 584.9 milionów lat- 8 bytes \n<br /> */<br /><br />#ifndef MILLISM128_H_<br />#define MILLISM128_H_<br /><br />typedef unsigned long millis_t;// wybór typu danych milisekund<br /><br />#define millis() millis_get()// zmiana millis_get() na millis()<br /><br />/**<br />* Initialise, must be called before anything else!<br />* Inicjalizacja, trzeba dodac przed czm kolwiek innym!<br />* @return (none)<br />*/<br />void millis_init(void);<br /><br />/**<br />* Get milliseconds.<br />* Uzyskanie milisekund.<br />* @return Milliseconds.<br />*/<br />millis_t millis_get(void);<br /><br />/**<br />* Reset milliseconds count to 0.<br />* Reset milisekund do 0.<br />* @return (none)<br />*/<br />void millis_reset(void);<br /><br />/**<br />* Add time.<br />* Dodanie czasu.<br />* @param &#91;ms&#93; Milliseconds to add.<br />* @return (none)<br />*/<br />void millis_add(millis_t ms);<br /><br />/**<br />* Subtract time.<br />* Odjęcie czasu.<br />* @param &#91;ms&#93; Milliseconds to subtract.<br />* @return (none)<br />*/<br />void millis_subtract(millis_t ms);<br /><br />#endif /* MILLISM128_H_ */[/syntax]<br /><br />do pliku ws281x.h:<br />[syntax=c]void BouncingBalls(uint8_t r, uint8_t g, uint8_t b, int BallCount);// (czerwony, zielony, niebieski, ilośc kulek)<br />void BouncingColoredBalls(int BallCount, uint8_t colors&#91;&#93;&#91;3&#93;, bool continuous);// (ilośc kulek, tablica kolorów, wybór &quot;true&quot; lub &quot;false&quot;)[/syntax]<br /><br />Uff... długo się męczyłem, ale opłaciło się  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />  Może uda się wykorzystać funkcje millis do wyrzucenia delayów w innych efektach  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />  Czekam na efekty Twoich założeń pracy  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />  Jak znajdę jeszcze czas to jeszcze coś napiszę  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 28 paź 2018, o 15:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2018-10-28T08:34:07+01:00</updated>
<published>2018-10-28T08:34:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213073#p213073</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213073#p213073"/>
<title type="html"><![CDATA[Re: ws2812b strona z efektami :)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213073#p213073"><![CDATA[
Kiedyś się bawiłem, proszę bardzo efekt &quot;Fire&quot;:<br /><br />Jak masz bibliotekę Pana Mirka to do pliku ws281x.c:<br />[syntax=c]/* funkcja symulująca ogień na pasku ledowym */<br />void Fire(int Cooling, int Sparking, int SpeedDelay){<br />void tdelay( uint16_t ms );<br />void setPixelHeatColor (int Pixel, uint8_t temperature);<br />// Cooling - chłodzenie, wskazuje, jak szybko płomień się ochładza. Więcej chłodzenia oznacza krótsze płomienie. Sugerowane wartości od 20 do 100.<br />// Sparking - iskrzenie, wskazuje szansę (na 255), że iskra się zapali. Wyższa wartość powoduje, że ogień jest bardziej aktywny. Sugerowane wartości od 50 do 200.<br />// SpeedDelay - Pozwala spowolnić akcję ognia. wyższa wartość powoduje, że płomień wydaje się wolniejszy. Sugerowane wartości od 0 do 20.<br />static uint8_t heat&#91;WS_LED_CNT&#93;;<br />int cooldown;<br /><br />// Krok 1 - schłodzenie każdej komórki<br />for( int i = 0; i &lt; WS_LED_CNT; i++){<br />cooldown = rand() % (((Cooling * 10) / WS_LED_CNT) + 2);<br /><br />if(cooldown&gt;heat&#91;i&#93;){<br />heat&#91;i&#93;=0;<br />} else {<br />heat&#91;i&#93;=heat&#91;i&#93;-cooldown;<br />}<br />}<br /><br />// Krok 2 - ciepło z każdej dryfuje w górę i jeszcze troche dryfuje<br />for( int k= WS_LED_CNT - 1; k &gt;= 2; k--){<br />heat&#91;k&#93; = (heat&#91;k - 1&#93; + heat&#91;k - 2&#93; + heat&#91;k - 2&#93;) / 3;<br />}<br /><br />// Krok 3 - losowe rozpalenie nowych iskier blisko dna<br />if( rand() % 255 &lt; Sparking ){<br />int y = rand() % 7;<br />heat&#91;y&#93; = heat&#91;y&#93; + 160 + (rand() % 255);<br />// heat&#91;y&#93; = 160 + rand() % 255;// heat&#91;y&#93; = random(160,255);<br />}<br /><br />//==================ODWROTNE DZIAŁANIE OGNIA========================//<br />//========Należy zakomentowac wcześniejszy krok 1, 2 oraz 3=========//<br />//// Krok 1 - schłodzenie każdej komórki//<br />//for( int i = 0; i &lt; WS_LED_CNT; i++){//<br />//cooldown = rand() % (((Cooling * 10) / WS_LED_CNT) + 2);//<br />////<br />//if(cooldown&gt;heat&#91;i&#93;){//<br />//heat&#91;i&#93;=0;//<br />//} else {//<br />//heat&#91;i&#93;=heat&#91;i&#93;-cooldown;//<br />//}//<br />//}//<br />////<br />//// Krok 2 - ciepło z każdej dryfuje w górę i jeszcze troche dryfuje//<br />//for( int k= 0; k &lt;= WS_LED_CNT - 2; k++){//<br />//heat&#91;k&#93; = (heat&#91;k + 1&#93; + heat&#91;k + 2&#93; + heat&#91;k + 2&#93;) / 3;//<br />//}//<br />////<br />//// Krok 3 - losowe rozpalenie nowych iskier blisko dna//<br />//if( rand() % 255 &lt; Sparking ){//<br />//int y = 53 + rand() % 60;//<br />//heat&#91;y&#93; = heat&#91;y&#93; + 160 + (rand() % 255);//<br />//}//<br />//==================================================================//<br /><br />// Krok 4 - Konwersja ciepła na kolory LED<br />for( int j = 0; j &lt; WS_LED_CNT; j++){<br />setPixelHeatColor(j, heat&#91;j&#93; );<br />}<br />ws281x_asm_send( pasek, WS_LED_CNT, WS_PIN );<br />tdelay(SpeedDelay);<br />}<br />/* funkcja do skalowania koloru ciepła na potrzeby funkcji symulującej ogień */<br />void setPixelHeatColor (int Pixel, uint8_t temperature){<br />// Skaluje &quot;ciepło&quot; od 0-255 do 0-191<br />uint8_t t192 = round((temperature/255.0)*191);<br /><br />// oblicz przyspieszenie od<br />uint8_t heatramp = t192 &amp; 0x3F; // 0..63<br />heatramp &lt;&lt;= 2; // scale up to 0..252<br /><br />// figure out which third of the spectrum we're in:<br />if( t192 &gt; 0x80){// hottest<br />one_pixel( pasek, Pixel, 255, 255, heatramp );<br />} else if( t192 &gt; 0x40 ){// middle<br />one_pixel( pasek, Pixel, 255, heatramp, 0 );<br />} else {// coolest<br />one_pixel( pasek, Pixel, heatramp, 0, 0 );<br />}<br />}<br /><br />/* funkcja aby przekazywac argument zmiennych na potrzeby powyższej funkcji */<br />void tdelay( uint16_t ms ) {<br />while( ms-- ){<br />_delay_ms(1);<br />}<br />}<br /><br />/* funkcja do wysyłania pojedynczego piksela (wartości 0-255 dla zmiennych r,g,b) */<br />void one_pixel( void * line, int x, uint8_t r, uint8_t g, uint8_t b) {// (bufor, współrzędna x - jeden pasek, kolor)<br /><br />if( x&lt;0 ) return;// ograniczenie - jeśli przekroczymy w lewo<br />if( x&gt;= WS_LED_CNT ) return;// ograniczenie - jeśli przekroczymy w prawo<br />*((uint8_t*)line + x*3) = g;// G - jawne rzutowanie line jako wskaźnik 8 bitowy<br />*((uint8_t*)line + x*3+1) = r;// R<br />*((uint8_t*)line + x*3+2) = b;// B<br />}[/syntax]<br /><br />do pliku ws281x.h:<br />[syntax=c]void Fire(int Cooling, int Sparking, int SpeedDelay);// (szybkośc chłodzenia, aktywnośc iskrzenia, szybkośc akcji ognia)<br />void one_pixel( void * line, int x, uint8_t r, uint8_t g, uint8_t b);// (bufor, współrzędna x (która dioda), czerwony, zielony, niebieski)[/syntax]<br /><br />w pliku main.c w pętli while np. takie wartości:<br />[syntax=c]Fire(55,180,15);[/syntax]<br /><br />Jak uda Ci się więcej efektów przekonwertować lub zamiast delayów zrobić na timerach to daj znać !! <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ja też jeszcze z jakimiś efektami pokombinuje. Zależy mi na Meteor Rain ale wtedy jak się starałem uruchomić ten efekt to poległem <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 28 paź 2018, o 08:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[roger]]></name></author>
<updated>2018-10-27T21:10:52+01:00</updated>
<published>2018-10-27T21:10:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213070#p213070</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213070#p213070"/>
<title type="html"><![CDATA[Re: ws2812b strona z efektami :)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213070#p213070"><![CDATA[
Z podanej strony używałem efektu &quot;Snow Sparkle&quot; z bibliotekami Pana Mirka.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8335">roger</a> — 27 paź 2018, o 21:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2018-10-27T14:01:48+01:00</updated>
<published>2018-10-27T14:01:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213063#p213063</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213063#p213063"/>
<title type="html"><![CDATA[Re: ws2812b strona z efektami :)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21485&amp;p=213063#p213063"><![CDATA[
Fajne <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 27 paź 2018, o 14:01</p><hr />
]]></content>
</entry>
</feed>