Fix animation stuttering.

This commit is contained in:
DWW 2022-03-13 14:43:55 +02:00
parent 3cca26fe67
commit 3d65b42a63

View File

@ -72,7 +72,7 @@ uint64_t old_time_ms = 0;
// ms Counter Func // ms Counter Func
ISR(TIM1_CAPT_vect) ISR(TIM1_CAPT_vect)
{ {
++ms; ms += 100;
} }
// NeoPixel Funcs // NeoPixel Funcs
@ -447,9 +447,9 @@ void init()
init_display(); init_display();
#endif #endif
// TIM1 init // TIM1 init - prescaler 64
TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10); TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11) | (1 << CS10);
ICR1 = (F_CPU / 1000) - 1; ICR1 = (F_CPU / 64 / 100) - 1;
TIMSK1 = (1 << ICIE1); TIMSK1 = (1 << ICIE1);
sei(); sei();
} }
@ -459,33 +459,43 @@ void sun_and_moon(uint8_t count, uint8_t* idx, uint8_t colour, uint8_t led)
uint8_t i; uint8_t i;
uint8_t colour1[3] = {0xFF, 0x80, 0x00}; uint8_t colour1[3] = {0xFF, 0x80, 0x00};
uint8_t colour2[3] = {0x00, 0x80, 0xFF}; uint8_t colour2[3] = {0x00, 0x80, 0xFF};
uint8_t min;
uint8_t max;
if (*idx <= count / 2) if (*idx <= count / 2)
{ {
for (i = 0; i < count; ++i) min = *idx;
{ max = *idx + count / 2;
if ((i < *idx) || (i >= *idx + count / 2))
for (i = 0; i < min; ++i)
{ {
send_pixel(colour1[0], colour1[1], colour1[2], led); send_pixel(colour1[0], colour1[1], colour1[2], led);
} }
else for (i = min; i < max; ++i)
{ {
send_pixel(colour2[0], colour2[1], colour2[2], led); send_pixel(colour2[0], colour2[1], colour2[2], led);
} }
} for (i = max; i < count; ++i)
}
else
{
for (i = 0; i < count; ++i)
{
if ((i < *idx) && (i >= *idx - count / 2))
{ {
send_pixel(colour1[0], colour1[1], colour1[2], led); send_pixel(colour1[0], colour1[1], colour1[2], led);
} }
}
else else
{
min = *idx - count / 2;
max = *idx;
for (i = 0; i < min; ++i)
{ {
send_pixel(colour2[0], colour2[1], colour2[2], led); send_pixel(colour2[0], colour2[1], colour2[2], led);
} }
for (i = min; i < max; ++i)
{
send_pixel(colour1[0], colour1[1], colour1[2], led);
}
for (i = max; i < count; ++i)
{
send_pixel(colour2[0], colour2[1], colour2[2], led);
} }
} }
(*idx)++; (*idx)++;
@ -498,29 +508,32 @@ void clock_bg(uint8_t count, uint8_t* idx, uint8_t colour, uint8_t led)
uint8_t colour1[3] = {0xFF, 0x80, 0x00}; uint8_t colour1[3] = {0xFF, 0x80, 0x00};
uint8_t colour2[3] = {0x00, 0x80, 0xFF}; uint8_t colour2[3] = {0x00, 0x80, 0xFF};
uint8_t* main_colour; if (colour == 0)
uint8_t* bg_colour;
if (0 == colour)
{ {
main_colour = colour1;
bg_colour = colour2;
}
else
{
main_colour = colour2;
bg_colour = colour1;
}
for (i = 0; i < count; ++i) for (i = 0; i < count; ++i)
{ {
if (i == *idx) if (i == *idx)
{ {
send_pixel(main_colour[0], main_colour[1], main_colour[2], led); send_pixel(colour1[0], colour1[1], colour1[2], led);
} }
else else
{ {
send_pixel(bg_colour[0], bg_colour[1], bg_colour[2], led); send_pixel(colour2[0], colour2[1], colour2[2], led);
}
}
}
else
{
for (i = 0; i < count; ++i)
{
if (i == *idx)
{
send_pixel(colour2[0], colour2[1], colour2[2], led);
}
else
{
send_pixel(colour1[0], colour1[1], colour1[2], led);
}
} }
} }