Added additional animations.
This commit is contained in:
parent
145f6b9241
commit
4a6f4a4eb8
128
flame.ino
128
flame.ino
@ -9,14 +9,14 @@
|
|||||||
#define MAX(x, y) ((x) > (y) ? (x) : (y))
|
#define MAX(x, y) ((x) > (y) ? (x) : (y))
|
||||||
|
|
||||||
#define PIN_BUTTON 3 // Input pin für Button
|
#define PIN_BUTTON 3 // Input pin für Button
|
||||||
#define PIN_LED 2 // Output pin für Led-Strip
|
#define PIN_LED 6 // Output pin für Led-Strip
|
||||||
#define NUM_PIXELS (5 * 64)
|
#define NUM_PIXELS (5 * 60)
|
||||||
|
|
||||||
#define NUM_MODES 6
|
#define NUM_MODES 8
|
||||||
|
|
||||||
// Framebuffer-Dimensions. Depends on the tube radius
|
// Framebuffer-Dimensions. Depends on the tube radius
|
||||||
#define FLAME_WIDTH 12
|
#define FLAME_WIDTH 10
|
||||||
#define FLAME_HEIGHT 27
|
#define FLAME_HEIGHT 30
|
||||||
|
|
||||||
// Intensity buffer for flames and sparks
|
// Intensity buffer for flames and sparks
|
||||||
static uint16_t flamebuffer[FLAME_HEIGHT][FLAME_WIDTH] = { { 0, }, };
|
static uint16_t flamebuffer[FLAME_HEIGHT][FLAME_WIDTH] = { { 0, }, };
|
||||||
@ -90,7 +90,6 @@ render_blueyellow (const uint16_t t)
|
|||||||
{
|
{
|
||||||
uint16_t i;
|
uint16_t i;
|
||||||
uint8_t pos;
|
uint8_t pos;
|
||||||
|
|
||||||
for (i = 0; i < NUM_PIXELS; i++)
|
for (i = 0; i < NUM_PIXELS; i++)
|
||||||
{
|
{
|
||||||
pos = (t + i) % 64;
|
pos = (t + i) % 64;
|
||||||
@ -101,6 +100,22 @@ render_blueyellow (const uint16_t t)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
render_orangewhite (const uint16_t t)
|
||||||
|
|
||||||
|
// This is a copy of render_blueyellow with colors changed to C1024 orange and white
|
||||||
|
{
|
||||||
|
uint16_t i;
|
||||||
|
uint8_t pos;
|
||||||
|
for (i = 0; i < NUM_PIXELS; i++)
|
||||||
|
{
|
||||||
|
pos = (t + i) % 64;
|
||||||
|
if (pos < 32)
|
||||||
|
pixels.setPixelColor (i, 255, 200, 200);
|
||||||
|
else
|
||||||
|
pixels.setPixelColor (i, 192, 72, 11);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
render_rainbow (const uint16_t t)
|
render_rainbow (const uint16_t t)
|
||||||
@ -195,6 +210,7 @@ render_rgbsparks (const uint16_t t)
|
|||||||
flamebuffer[y][x] = rand() % (255 * 3);
|
flamebuffer[y][x] = rand() % (255 * 3);
|
||||||
|
|
||||||
for (y = FLAME_HEIGHT; y > 0; )
|
for (y = FLAME_HEIGHT; y > 0; )
|
||||||
|
|
||||||
{
|
{
|
||||||
y--;
|
y--;
|
||||||
|
|
||||||
@ -217,7 +233,7 @@ render_rgbsparks (const uint16_t t)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Deal with multiples of three, this ensures the same base color
|
// Deal with multiples of three, this ensures the same base color
|
||||||
// the condition here is false always, if enabed this makes the
|
// the condition here is false always, if enabled this makes the
|
||||||
// colorful sparks go up.
|
// colorful sparks go up.
|
||||||
if (t % 6 == 7)
|
if (t % 6 == 7)
|
||||||
{
|
{
|
||||||
@ -235,6 +251,82 @@ render_rgbsparks (const uint16_t t)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
render_whitesparks (const uint16_t t)
|
||||||
|
{
|
||||||
|
uint8_t x, y;
|
||||||
|
|
||||||
|
// This is the blatantly bad copy of render_rgbparks but does what I want ¯\_(ツ)_/¯
|
||||||
|
|
||||||
|
x = rand() % FLAME_WIDTH;
|
||||||
|
y = rand() % FLAME_HEIGHT;
|
||||||
|
flamebuffer[y][x] = rand() % (255 * 3);
|
||||||
|
|
||||||
|
for (y = FLAME_HEIGHT; y > 0; )
|
||||||
|
|
||||||
|
{
|
||||||
|
y--;
|
||||||
|
|
||||||
|
for (x = 0; x < FLAME_WIDTH; x++)
|
||||||
|
{
|
||||||
|
switch (flamebuffer[y][x] % 3)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
pixels.setPixelColor (y * FLAME_WIDTH + x,
|
||||||
|
glut[flamebuffer[y][x] / 3], glut[flamebuffer[y][x] / 3], glut[flamebuffer[y][x] / 3]);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
pixels.setPixelColor (y * FLAME_WIDTH + x,
|
||||||
|
glut[flamebuffer[y][x] / 3], glut[flamebuffer[y][x] / 3], glut[flamebuffer[y][x] / 3]);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
pixels.setPixelColor (y * FLAME_WIDTH + x,
|
||||||
|
glut[flamebuffer[y][x] / 3], glut[flamebuffer[y][x] / 3], glut[flamebuffer[y][x] / 3]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// the condition here is false always, if enabled this makes the
|
||||||
|
// white sparks go up.
|
||||||
|
if (t % 6 == 7)
|
||||||
|
{
|
||||||
|
if (y > 1)
|
||||||
|
flamebuffer[y][x] = MAX (9, flamebuffer[y-1][x]) - 9;
|
||||||
|
else
|
||||||
|
flamebuffer[y][x] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flamebuffer[y][x] = MAX (9, flamebuffer[y][x]) - 9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
render_orangepulse (const uint16_t t)
|
||||||
|
|
||||||
|
// This is a C1024 orange full-torch glow effect
|
||||||
|
{
|
||||||
|
uint16_t i;
|
||||||
|
uint8_t pos;
|
||||||
|
// uint8_t
|
||||||
|
// for (i = 0; i < NUM_PIXELS; i++)
|
||||||
|
// {
|
||||||
|
// pos = (t + i) % 64;
|
||||||
|
// if (pos < 32)
|
||||||
|
// pixels.setPixelColor (i, 255, 200, 200);
|
||||||
|
// else
|
||||||
|
// pixels.setPixelColor (i, 192, 72, 11);
|
||||||
|
// }
|
||||||
|
for (i = 0; i < NUM_PIXELS; i++)
|
||||||
|
{
|
||||||
|
pixels.setPixelColor (i, 195, 72, 11);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Arduino init.
|
// Arduino init.
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -349,25 +441,41 @@ loop ()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
render_rainbow (t);
|
render_orangewhite (t);
|
||||||
delay_value = 10;
|
delay_value = 10;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
render_redblue (t);
|
render_rainbow (t);
|
||||||
delay_value = 10;
|
delay_value = 10;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
|
render_redblue (t);
|
||||||
|
delay_value = 10;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
render_kitt (t);
|
render_kitt (t);
|
||||||
delay_value = 20;
|
delay_value = 20;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 6:
|
||||||
render_rgbsparks (t);
|
render_rgbsparks (t);
|
||||||
delay_value = 10;
|
delay_value = 10;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 7:
|
||||||
|
render_whitesparks (t);
|
||||||
|
delay_value = 10;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Inactive for now due to RENDER_MODES:
|
||||||
|
case 8:
|
||||||
|
render_orangepulse (t);
|
||||||
|
delay_value = 10;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
render_flame ();
|
render_flame ();
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user