#include "Keypad.h"
#include "rgbLedA.h"
enum COLORS_LED
{
RED = 12,
GREEN = 11,
BLUE = 10
};
uint8_t red = static_cast<uint8_t>(COLORS_LED::RED);
uint8_t green = static_cast<uint8_t>(COLORS_LED::GREEN);
uint8_t blue = static_cast<uint8_t>(COLORS_LED::BLUE);
RGB_led rgbLed (red, green, blue);
const byte Rows = 4; // количество строк на клавиатуре
const byte Cols = 4; // количество столбцов на клавиатуре
char keymap[Rows][Cols] =
{
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rPins[Rows] = {2, 3, 4, 5};
byte cPins[Cols] = {6, 7, 8, 9};
Keypad kpd = Keypad(makeKeymap(keymap), rPins, cPins, Rows, Cols);
char colorKey = '0';
char pulseKey = 'A';
bool ledState = true; // этой переменной устанавливаем состояние светодиода
long previousMillis = 0; // храним время последнего переключения светодиода
int interval = 0; // интервал между включение/выключением светодиода (1 секунда)
void runRGB(char key)
{
switch (key)
{
case '0': //все выключены
colorKey = '0';
break;
case '1': //красный
colorKey = '1';
break;
case '2': //зеленый
colorKey = '2';
break;
case '3': //синий
colorKey = '3';
break;
case '4': //красный + зеленый
colorKey = '4';
break;
case '5': //красный + синий
colorKey = '5';
break;
case '6': //зеленый + синий
colorKey = '6';
break;
case '7': //красный + синий + зеленый
colorKey = '7';
break;
case 'A':
pulseKey = 'A';
break;
case 'B':
pulseKey = 'B';
break;
case 'C':
pulseKey = 'C';
break;
case 'D':
pulseKey = 'D';
break;
};
switch (colorKey)
{
case NO_KEY:
break;
case '0': //все выключены
rgbLed.allOff();
break;
case '1': //красный
rgbLed.allOff();
rgbLed.getRed()->on();
break;
case '2': //зеленый
rgbLed.allOff();
rgbLed.getGreen()->on();
break;
case '3': //синий
rgbLed.allOff();
rgbLed.getBlue()->on();
break;
case '4': //красный + зеленый
rgbLed.allOff();
rgbLed.getRed()->on();
rgbLed.getGreen()->on();
break;
case '5': //красный + синий
rgbLed.allOff();
rgbLed.getRed()->on();
rgbLed.getBlue()->on();
break;
case '6': //зеленый + синий
rgbLed.allOff();
rgbLed.getGreen()->on();
rgbLed.getBlue()->on();
break;
case '7': //красный + синий + зеленый
rgbLed.allOff();
rgbLed.getRed()->on();
rgbLed.getBlue()->on();
rgbLed.getGreen()->on();
break;
};
switch (pulseKey)
{
case 'A':
interval = 0;
break;
case 'B':
interval = 1000;
break;
case 'C':
interval = 500;
break;
case 'D':
interval = 250;
break;
}
};
void setup() {
// put your setup code here, to run once:
}
void loop() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if(!interval)
{
runRGB(kpd.getKey());
}
else{
if (!ledState)
{
ledState = true;
runRGB(kpd.getKey());
}
else
{
ledState = false;
rgbLed.allOff();
};
}
}
}