#include "KTS_Button.h"
#define ARRSIZE(x) sizeof(x) / sizeof(x[0])
#define BLINK_INTERVAL 100
#define LONG_PRESS_TIMEOUT 600
#define BTN_ONE_PIN 8
#define BTN_TWO_PIN 5
#define LED_LOW_L 6
#define LED_LOW_R 7
#define LED_HIGH_L 10
#define LED_HIGH_R 11
KTS_Button buttons[] = { BTN_ONE_PIN, BTN_TWO_PIN };
byte leds[] = { LED_LOW_L, LED_LOW_R, LED_HIGH_L, LED_HIGH_R };
void setup() {
for (byte i = 0; i < ARRSIZE(leds); i++)
pinMode(leds[i], OUTPUT);
buttons[1].setLongPressTimeout(LONG_PRESS_TIMEOUT);
}
void loop() {
static uint32_t timeCapture;
static bool highBeam = false;
static bool lightsOn = true;
ActionType btnOneAction = buttons[1].read();
if (btnOneAction == SINGLE_PRESS && lightsOn)
highBeam = !highBeam;
else if (btnOneAction == LONG_PRESS)
lightsOn = !lightsOn;
if (buttons[0].isHeld() && lightsOn) {
if ((millis() - timeCapture) > BLINK_INTERVAL) {
timeCapture = millis();
for (byte i = 0; i < (highBeam ? 4 : 2); i++)
digitalWrite(leds[i], !digitalRead(leds[i]));
}
}
else {
for (byte i = 0; i < ARRSIZE(leds); i++) {
if (i < 2)
digitalWrite(leds[i], lightsOn);
else
digitalWrite(leds[i], highBeam && lightsOn);
}
}
}