#include "Keypad.h"
int led_pin[] = {13, 12, 11};
const byte Rows= 4;
const byte Cols= 4;
unsigned long timer;
int blinkTime = 0;
bool ledOn[] = {1, 1, 1};
byte rPins[Rows]= {8,7,6,5};
byte cPins[Cols]= {4,3,2,1};
char keymap[Rows][Cols]=
{
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#','D'}
};
Keypad kpd = Keypad(makeKeymap(keymap), rPins, cPins, Rows, Cols);
void setup() {
for(const auto& el : led_pin)
{
pinMode(el, OUTPUT);
digitalWrite(el, HIGH);
}
}
void loop() {
char keypressed = kpd.getKey();
if(keypressed != NO_KEY)
{
SelectColor(keypressed);
SelectBlinkTime(keypressed);
}
if(blinkTime != 0)
{
if(timer + blinkTime >= millis())
{
for(int i = 0; i < 3; i++)
{
digitalWrite(led_pin[i], ledOn[i]);
}
}
else if(timer + (2 * blinkTime) >= millis())
{
for(int i = 0; i < 3; i++)
{
digitalWrite(led_pin[i], HIGH);
}
} else {timer = millis();}
}
else
{
for(int i = 0; i < 3; i++)
{
digitalWrite(led_pin[i], ledOn[i]);
}
}
}
void SelectBlinkTime(char key)
{
switch(key)
{
case 'A':
blinkTime = 0;
break;
case 'B':
blinkTime = 1000;
timer = millis();
break;
case 'C':
blinkTime = 500;
timer = millis();
break;
case 'D':
blinkTime = 250;
timer = millis();
break;
}
}
void SelectColor(char key)
{
int ikey = key - '0';
if(ikey >=0 && ikey <= 7)
{
ledOn[0] = !(ikey & 0x01);
ledOn[1] = !(ikey & 0x02);
ledOn[2] = !(ikey & 0x04);
}
}