Код: Выделить всё
#define BUTTON_UP (1<<PD4) //4 ножка
#define BUTTON_DOWN (1<<PD5) //5 ножка
#define BUTTON_START (1<<PD6) //6 ножка
#define BUTTON_STOP (1<<PD7) //7 ножка
Код: Выделить всё
#define BUTTON_UP (1<<PD4) //4 ножка
#define BUTTON_DOWN (1<<PD5) //5 ножка
#define BUTTON_START (1<<PD6) //6 ножка
#define BUTTON_STOP (1<<PD7) //7 ножка
Код: Выделить всё
if (!(PIND & pin_state)) //если кнопка физически нажата (логический 0 на n ножке порта D)
{
if(Button_count<20) Button_count++; //подавление дребезга при нажатии (кнопка физически нажата 20 тактов)
else
{
Button_state=1; //регистрируем нажатие кнопки
key_delay++; //как долго кнопка нажата
}
Код: Выделить всё
if (Button_count>0)Button_count--; //подавление дребезга при отжатии
else
{
Button_state=0; //регистрируем отжатие кнопки
if (key_delay<20000) Flag=1; //регистрируем короткое нажатие
else Flag=2; //регистрируем длительное нажатие
Неудивительно, что кнопки не опознаются. Процитированная строка по каждому прерыванию от таймера инитит эти самые служебные переменные, поэтому при сравнении if'ами в Button_count ничего, кроме единицы, быть не может.bezzabotna писал(а):int Button_count=0,Button_state=0,key_delay=0,Flag=0; //служебные переменные
Может быть неудачно скопипастила?bezzabotna писал(а):Почему? Я этот кусок кода на stm32 использовала, на реальном камне. Все работало.
во-первых, можно выключить. во-вторых, иголки - это, как правило, ЕСТЕСТВЕННОЕ состояние для Fast-PWM при одном из "крайних" значений регистра сравнения.artemik32 писал(а):Можно ли выключить отдельно тот или другой канал?