R13_Forum

Проекты => Автоэлектроника => Тема начата: Пишу_Видяхи от Декабря 02, 2022, 10:24:48 pm

Название: Бегущий поворотник.
Отправлено: Пишу_Видяхи от Декабря 02, 2022, 10:24:48 pm
Помещу кусок кода сюда, так как в комментариях общаться неудобно.

int __attribute__((noreturn)) main(void)
{
DDRB |= (1<<LED_PIN);   //Делаем нужный пин выходом
 
//uint8_t i=0;
uint8_t a=MAX_LED;

clear_LED();
switch (rezim)
    {
case 1:
r_01();
break;
case 3:
case 4:
raduga(MAX_LED);
break;
    }

while (1){
switch (rezim){
case 0://режим поворотника
if(a==0){
a=MAX_LED;
_delay_ms(200); // для красоты
clear_LED();
ws2812_sendarray((uint8_t *)led,MAX_LED*3);
_delay_ms(500); // для красоты
}
led[a].r=RED;led[a].g=GREEN;led[a].b=BLUE;
ws2812_sendarray((uint8_t *)led,MAX_LED*3);
_delay_ms(STEP);
a--;
break;
    case 1:
step_right_loop();
ws2812_sendarray((uint8_t *)led,MAX_LED*3);
_delay_ms(STEP*MAX_LED);
break;
case 3:
step_right_loop();
ws2812_sendarray((uint8_t *)led,MAX_LED*3);
_delay_ms(STEP*3);
break;
    case 2:
if (a%2==0) full(); else clear_LED();
ws2812_sendarray((uint8_t *)led,MAX_LED*3);
_delay_ms(STEP*10);
a++;
break;
    case 4:
right_in();
//_delay_ms(200); // для красоты
//clear_LED();
ws2812_sendarray((uint8_t *)led,MAX_LED*3);
//_delay_ms(500); // для красоты
break;
}
  }

}
Название: Re: Бегущий поворотник.
Отправлено: lygalovag от Декабря 05, 2022, 08:05:12 am
Вставил весь кусок. компиляция прошла. залил. бежит с 24 до 2. 1 не зажигает. думал может не работал первый, залил старую прошивку, зажигает с 1 по 24. в чём загвоздка?
Название: Re: Бегущий поворотник.
Отправлено: Пишу_Видяхи от Декабря 07, 2022, 08:18:37 am
Попробуйте заменить этот кусок кода:
case 0://режим поворотника
if(a==0){
a=MAX_LED;
_delay_ms(200); // для красоты
clear_LED();
ws2812_sendarray((uint8_t *)led,MAX_LED*3);
_delay_ms(500); // для красоты
}
led[a-1].r=RED;led[a-1].g=GREEN;led[a-1].b=BLUE;
ws2812_sendarray((uint8_t *)led,MAX_LED*3);
_delay_ms(STEP);
a--;
break;
Вывод в массиве сдвинут на 1 пиксель и до нулевого элемента не доходит.
led[a-1].r=RED;led[a-1].g=GREEN;led[a-1].b=BLUE;
эта строка должна исправить.