#include "Button.h"
Button Buttons[4];
int16_t TimerLeds[4];
uint8_t StateLeds[4];
uint8_t LedPinStart = 6;
uint16_t PreMillis = 0;
void InitButtons()
{
Buttons[0].Init(2, ButtonClick);
Buttons[1].Init(3, ButtonClick);
Buttons[2].Init(4, ButtonClick);
Buttons[3].Init(5, ButtonClick);
}
void InitLeds()
{
for(int8_t i = 0; i < 4; i++)
pinMode(LedPinStart + i, OUTPUT);
for(int8_t c = 0; c < 3; c++)
{
for(int8_t i = 0; i < 4; i++)
{
digitalWrite(LedPinStart + i, HIGH);
delay(100);
digitalWrite(LedPinStart + i, LOW);
}
}
delay(500);
for(uint8_t c = 0; c < 3; c++)
{
for(uint8_t i = 0; i < 4; i++)
digitalWrite(LedPinStart + i, HIGH);
if (c < 2)
delay(100);
else
delay(500);
for(uint8_t i = 0; i < 4; i++)
digitalWrite(LedPinStart + i, LOW);
if (c < 2)
delay(100);
else
delay(500);
}
}
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("setup start!!!");
InitButtons();
InitLeds();
PreMillis = millis();
}
void loop()
{
// put your main code here, to run repeatedly:
for(uint8_t i = 0; i < 4; i++)
Buttons[i].Loop();
const uint16_t DeltaMillis = millis() - PreMillis;
LedsLoop(DeltaMillis);
PreMillis = millis();
}
void ButtonClick(const Button* _self)
{
Serial.print("Button1 click - ID = ");
Serial.println(_self->ID);
SetLedState(_self->ID, true, 1000);
}
void SetLedState(const uint8_t _led_id, const bool _state, const uint16_t _time)
{
if (_state)
TimerLeds[_led_id] = _time;
else
TimerLeds[_led_id] = 0;
}
void LedsLoop(const uint8_t _delta_millis)
{
for(uint8_t i = 0; i < 4; i++)
{
if(TimerLeds[i] > 0)
{
TimerLeds[i] -= _delta_millis;
if (StateLeds[i] == 0)
{
StateLeds[i] = 1;
digitalWrite(LedPinStart + i, HIGH);
}
}
else if(StateLeds[i] > 0)
{
StateLeds[i] = 0;
TimerLeds[i] = 0;
digitalWrite(LedPinStart + i, LOW);
}
}
}