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
ISR(TIM1_CAPT_vect)
{
++ms;
ms += 100;
}
// NeoPixel Funcs
@ -447,9 +447,9 @@ void init()
init_display();
#endif
// TIM1 init
TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10);
ICR1 = (F_CPU / 1000) - 1;
// TIM1 init - prescaler 64
TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11) | (1 << CS10);
ICR1 = (F_CPU / 64 / 100) - 1;
TIMSK1 = (1 << ICIE1);
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 colour1[3] = {0xFF, 0x80, 0x00};
uint8_t colour2[3] = {0x00, 0x80, 0xFF};
uint8_t min;
uint8_t max;
if (*idx <= count / 2)
{
for (i = 0; i < count; ++i)
{
if ((i < *idx) || (i >= *idx + count / 2))
min = *idx;
max = *idx + count / 2;
for (i = 0; i < min; ++i)
{
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);
}
}
}
else
{
for (i = 0; i < count; ++i)
{
if ((i < *idx) && (i >= *idx - count / 2))
for (i = max; i < count; ++i)
{
send_pixel(colour1[0], colour1[1], colour1[2], led);
}
}
else
{
min = *idx - count / 2;
max = *idx;
for (i = 0; i < min; ++i)
{
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)++;
@ -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 colour2[3] = {0x00, 0x80, 0xFF};
uint8_t* main_colour;
uint8_t* bg_colour;
if (0 == colour)
if (colour == 0)
{
main_colour = colour1;
bg_colour = colour2;
}
else
{
main_colour = colour2;
bg_colour = colour1;
}
for (i = 0; i < count; ++i)
{
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
{
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);
}
}
}