Задать вопрос
dmc1989
@dmc1989

Почему светодиоды сами по себе меняют цвет?

При нажатии на кнопку, микроконтроллер запускает анимацию светодиодов, но потом они просто сменяют одна другую в цикле? ( В данном вопросе я новичок, прошу сильно не ругать ) Вроде они должны заменяться после нажатия кнопки, но после первого нажатия уже на нее не реагируют, и работают на автомате. Что я делаю не правильно?
void main(void)
{    
    int buttonStatus = 0;
                                     
    // PORT C
    LED_STRIP_PORT &= ~(1<<LED_STRIP_PIN);
    LED_STRIP_DDR |= (1<<LED_STRIP_PIN); 

    while (1)  
    {           
        // check ws2812 animation type by pressing the button
        if (PINB.0 == 1) {                 
            if (buttonStatus < 3) {
                buttonStatus++;
                PORTC.0 = 1;
            } else {
                buttonStatus = 0;
                PORTC.0 = 0; 
            }
        }
    
        switch (buttonStatus) {  
            // first ws2812 animation   
            case 1:
                startFistAnimation(); 
            break;   
            // second ws2812 animation
            case 2:
                startSecondAnimation();
            break;
            // third ws2812 animation
            case 3:
                startThirdAnimation();    
            break;
            // turn off ws2812
            default:
                PORTC.0 = 0; 
            break;
        }
    } 
}
  • Вопрос задан
  • 359 просмотров
Подписаться 2 Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 2
@Smirrom
сисадмин
У Вас нет никакой задержки в цикле while (1), поэтому при нажатии на кнопку переменная buttonStatus успевает увеличиться сразу до трех. Возможно в этом проблема.
Ответ написан
ilyazh
@ilyazh
Инженер-программист
используйте прерывания. Когда происходит изменение состояние на ножке с кнопкой - изменяете цвет. Например по каждому нажатию. В основном цикле уберите изменение цвета.

Т.е. прерывание запускается только в момент нажатия кнопки и там изменяется переменная, отвечающая за цвет. В основном цикле вы только выставляет цвет светодиода, в зависимости от текущего значения переменной
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы