Zápisník experimentátora
Hierarchy: ATtiny85
Před dvěma lety jsem naprogramoval simulaci ohně pro Arduino Uno. V tomto článku se pokusíme tuto simulaci udělat pomocí mikrokontroléru ATtiny85. Aby nebyl program úplně stejný, simulaci mírně upravíme tak, aby se dalo blikání ohně nastavovat.
Použil jsem tyto součástky:
Z programu neopixel_fire01
jsem vybral pouze podstatnou část. Pro každou LED se nastaví základní barva fire_color
a od ní se odečte náhodná barva diff_color
. Tato barva je vypočtena tak, aby výsledná barva ztmavla nejvíce ve složce R
a méně v složkách G
a B
. Výsledkem je sytý červený odstín ohně, který prochází v ojedinělých případech až do úplně tmavé barvy.
void NeoFire::Draw()
{
Clear();
for(int i=0;i<CNT;i++)
{
AddColor(i, fire_color);
int r = random(RANDOM_MAX);
uint32_t diff_color = strip.Color ( r, r/2, r/2);
SubstractColor(i, diff_color);
}
strip.show();
}
Z programu neopixel_fire02
jsem vybral pouze podstatnou část. Potenciometrem, který je připojen na pin A2
se přečte analogová hodnota. Ta se pomocí funkce map upraví na vhodný rozsah. Potenciometrem můžete v jedné krajní poloze dosáhnout skoro neviditelné blikání ohně. V druhé krajní poloze je blikání mimořádně silné. Takto si můžete nastavit intenzitu blikání celé simulace.
void NeoFire::Draw()
{
Clear();
int pot = analogRead(A2);
pot = map(pot, 0, 1023, 0, RANDOM_MAX);
for(int i=0;i<CNT;i++)
{
AddColor(i, fire_color);
int r = random(pot);
uint32_t diff_color = strip.Color (r, r/2, r/2);
SubstractColor(i, diff_color);
}
strip.show();
}
Zdrojový kód se nachází na serveru GitHub.
30.03.2018