Цитата:
Сообщение от Fabula_4x4
Нажали круиз - включился круиз
Повторное нажатие круиза - отключение его?
При включенном круизе нажать ограничение - переключение в ограничиние?
|
именно так
+ Нажмите здесь, чтобы увидеть скрытый текст
boolean flag_cc = 0; // flag_cc - флаг состояния режима круиз-контроля
boolean flag_sl = 0; // flag_sl - флаг состояния режима ограничителя скорости
boolean flag_butt_cc = 0; // flag_butt_cc - флаг кнопки круиз-контроля
boolean flag_butt_sl = 0; // flag_butt_sl - флаг кнопки ограничителя скорости
boolean butt_cc = 0; // butt_cc - мгновенное состояние кнопки круиз-контроля
boolean butt_sl = 0; // butt_sl - мгновенное состояние кнопки ограничителя скорости
unsigned long last_press_cc=0; // переменная для хранения момента последнего нажатия кнопки (алгоритм антидребезга)
unsigned long last_press_sl=0; // переменная для хранения момента последнего нажатия кнопки (алгоритм антидребезга)
unsigned long press_time_cc1=0;
unsigned long press_time_cc2=0;
unsigned long press_time_sl=0;
void setup ()
{
pinMode(PB1, INPUT); // 6 вход кнопки CC (круиз-контроль)
pinMode(PB2, INPUT); // 7 вход кнопки SL (ограничитель скорости)
pinMode(PB3, OUTPUT); // 2 выход круиз контроля
pinMode(PB4, OUTPUT); // 3 выход ограничителя
}
void loop ()
{
digitalWrite(PB3,flag_cc); //ввод режима круиза с текущим состоянием флага круиза
digitalWrite(PB4,flag_sl); //ввод режима ограничителя с текущим состоянием флага ограничителя
butt_cc = digitalRead (PB1); // чтение состояния с кнопки круиза
butt_sl = digitalRead (PB2); // чтение состояния с кнопки ограничителя
if (butt_cc==1 && flag_butt_cc==0 && millis()-last_press_cc>250) // "millis()-last_press_cc>50" - антидребезг
{
flag_butt_cc=!flag_butt_cc; // инвертирование флага кнопки круиза при нажатии
flag_sl=0; // отмена ограничителя
flag_cc=!flag_cc; // инвертирование флага режима круиза
last_press_cc=millis();
}
if (butt_cc==0 && flag_butt_cc==1){
flag_butt_cc=!flag_butt_cc; // инвертирование флага кнопки круиза при отпускании
}
if (butt_sl==1 && flag_butt_sl==0 && millis()-last_press_sl>250) // "millis()-last_press_sl>50" - антидребезг
{
flag_butt_sl=!flag_butt_sl; // инвертирование флага ограничителя при нажатии
flag_cc=0; // отмена круиза
flag_sl=!flag_sl; // инвертирование флага режима ограничителя
last_press_sl=millis();
}
if (butt_sl==0 && flag_butt_sl==1)
{
flag_butt_sl=!flag_butt_sl; // инвертирование кнопки ограничителя при отпускании
}
}