Zápisník experimentátora
Hierarchy: ATtiny85
Pred dvomi rokmi som naprogramoval simuláciu ohňa pre Arduino Uno. V tomto článku sa pokúsime túto simuláciu urobiť pomocou mikrokontroléra ATtiny85. Aby nebol program úplne rovnaký, simuláciu mierne upravíme tak, aby sa dalo blikanie ohňa nastavovať.
Použil som tieto súčiastky:
Z programu neopixel_fire01
som vybral iba podstatnú časť. Pre každú LED sa nastaví základná farba fire_color
a od nej sa odpočíta náhodná farba diff_color
. Táto farba je vypočítaná tak, aby výsledná farba stmavla najviac v zložke R
a menej v zložkách G
a B
. Výsledkom je sýty červený odtieň ohňa, ktorý prechádza v ojedinelých prípadoch až do úplne tmavej farby.
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
som vybral iba podstatnú časť. Potenciometrom, ktorý je pripojený na pin A2
sa prečíta analógová hodnota. Tá sa pomocou funkcie map upraví na vhodný rozsah. Potenciometrom môžete v jednej krajnej polohe dosiahnuť skoro neviditeľné blikanie ohňa. V druhej krajnej polohe je blikanie mimoriadne silné. Takto si môžete nastaviť intenzitu blikania celej simulácie.
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 sa nachádza na serveri GitHub.
27.03.2018