Добавлен небольшой кусочек кода, который работает для 3-х каналов, как вам нужно.
Без дополнительных библиотек.
Функция цикла вызывает функции для проверки кнопок и значения таймера, а затем выполняетзадержка 50 мс.То, что вам еще нужно добавить, это функция нажатия / выпуска для запуска, увеличения и уменьшения нажатия кнопки.В остальном каждый цикл (50 мс) кнопки будут распознаваться как нажатые.Что значит значение settime будет все время увеличиваться.
//timing defines
#define INC_STEP 20
#define DEC_STEP 20
#define LOOP_DELAY 50
//input/output defines
#define BTN_CH_A_Start 6
#define BTN_CH_A_Inc 7
#define BTN_CH_A_Dec 8
#define LED_PIN_CH_A 9
unsigned int SetTime_CH_A = 0;
unsigned int DelayTimer_CH_A = 0;
#define BTN_CH_B_Start 10
#define BTN_CH_B_Inc 11
#define BTN_CH_B_Dec 12
#define LED_PIN_CH_B 13
unsigned int SetTime_CH_B = 0;
unsigned int DelayTimer_CH_B = 0;
#define BTN_CH_C_Start 14
#define BTN_CH_C_Inc 15
#define BTN_CH_C_Dec 16
#define LED_PIN_CH_C 17
unsigned int SetTime_CH_C = 0;
unsigned int DelayTimer_CH_C = 0;
void setup() {
Serial.begin(9600);
pinMode(BTN_CH_A_Start, INPUT_PULLUP);
pinMode(BTN_CH_A_Inc, INPUT_PULLUP);
pinMode(BTN_CH_A_Dec, INPUT_PULLUP);
pinMode(LED_PIN_CH_A, OUTPUT);
pinMode(BTN_CH_B_Start, INPUT_PULLUP);
pinMode(BTN_CH_B_Inc, INPUT_PULLUP);
pinMode(BTN_CH_B_Dec, INPUT_PULLUP);
pinMode(LED_PIN_CH_B, OUTPUT);
pinMode(BTN_CH_C_Start, INPUT_PULLUP);
pinMode(BTN_CH_C_Inc, INPUT_PULLUP);
pinMode(BTN_CH_C_Dec, INPUT_PULLUP);
pinMode(LED_PIN_CH_C, OUTPUT);
}
void CheckButtons()
{
//check if the delay timer value have to set to inital value
if (digitalRead(BTN_CH_A_Start)) DelayTimer_CH_A = SetTime_CH_A;
if (digitalRead(BTN_CH_B_Start)) DelayTimer_CH_B = SetTime_CH_B;
if (digitalRead(BTN_CH_C_Start)) DelayTimer_CH_C = SetTime_CH_C;
//check if SetTime value have to increase
if (digitalRead(BTN_CH_A_Inc)) SetTime_CH_A += INC_STEP;
if (digitalRead(BTN_CH_B_Inc)) SetTime_CH_B += INC_STEP;
if (digitalRead(BTN_CH_C_Inc)) SetTime_CH_C += INC_STEP;
//check if SetTime value have to decrease
//if button pressed check if decrease if greater 0 decrese by DEC_STEP. if not set to 0
if (digitalRead(BTN_CH_A_Dec)) if (SetTime_CH_A-DEC_STEP>=0) SetTime_CH_A -= DEC_STEP; else SetTime_CH_A=0;
if (digitalRead(BTN_CH_B_Dec)) if (SetTime_CH_B-DEC_STEP>=0) SetTime_CH_B -= DEC_STEP; else SetTime_CH_B=0;
if (digitalRead(BTN_CH_C_Dec)) if (SetTime_CH_C-DEC_STEP>=0) SetTime_CH_C -= DEC_STEP; else SetTime_CH_C=0;
}
void CheckDelayTimer()
{
//check the actual value of DelayTimer decrase if greater than 0 drectese an the output high else set output low
if (DelayTimer_CH_A>0) { DelayTimer_CH_A--; digitalWrite(LED_PIN_CH_A, 1); } else digitalWrite(LED_PIN_CH_A, 0);
if (DelayTimer_CH_B>0) { DelayTimer_CH_B--; digitalWrite(LED_PIN_CH_B, 1); } else digitalWrite(LED_PIN_CH_B, 0);
if (DelayTimer_CH_C>0) { DelayTimer_CH_C--; digitalWrite(LED_PIN_CH_C, 1); } else digitalWrite(LED_PIN_CH_C, 0);
}
void loop() {
CheckButtons();
CheckDelayTimer();
delay(LOOP_DELAY);
}