#include <Keypad.h>
#define LED_RED 11
#define LED_GREEN 10
#define LED_BLUE 9
class RgbLed
{
public:
RgbLed(int pinR, int pinG, int pinB)
{
_pinRed = pinR;
_pinGreen = pinG;
_pinBlue = pinB;
digitalWrite(_pinRed, HIGH);
digitalWrite(_pinGreen, HIGH);
digitalWrite(_pinBlue, HIGH);
}
~RgbLed() = default;
void setColour(int colour)
{
//colour = 0(000) - Выключено
//colour = 1(001) - Красный
//colour = 2(010) - Зелёный
//colour = 3(011) - жёлтый
//colour = 4(100) - Синий
//colour = 5(101) - Сиреневый
//colour = 6(110) - Бюриюзовый
//colour = 7(111) - Белый
_red = !(colour & 0b1);
_green = !(colour & 0b10);
_blue = !(colour & 0b100);
digitalWrite(_pinRed, _red);
digitalWrite(_pinGreen, _green);
digitalWrite(_pinBlue, _blue);
}
void turnOn()
{
digitalWrite(_pinRed, _red);
digitalWrite(_pinGreen, _green);
digitalWrite(_pinBlue, _blue);
}
void turnOff()
{
digitalWrite(_pinRed, 1);
digitalWrite(_pinGreen, 1);
digitalWrite(_pinBlue, 1);
}
private:
int _red;
int _green;
int _blue;
int _pinRed;
int _pinGreen;
int _pinBlue;
};
RgbLed led(LED_RED, LED_GREEN, LED_BLUE);
const byte rowsPins[] = {7, 6, 5, 4};
const byte columnsPins[] = {3, 2, 1, 0};
const char keypadMap[4][4] =
{
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
Keypad keypad(makeKeymap(keypadMap), rowsPins, columnsPins, 4, 4);
bool flash = false;
int time = 0;
void keyPadProcesser(char key)
{
if (key == '0')
{
led.setColour(0);
}
else if(key == '1')
{
led.setColour(1);
}
else if(key == '2')
{
led.setColour(2);
}
else if(key == '3')
{
led.setColour(3);
}
else if(key == '4')
{
led.setColour(4);
}
else if(key == '5')
{
led.setColour(5);
}
else if(key == '6')
{
led.setColour(6);
}
else if(key == '7')
{
led.setColour(7);
}
else if(key == 'A')
{
flash = false;
led.turnOn();
}
else if(key == 'B')
{
flash = true;
time = 1000;
}
else if(key == 'C')
{
flash = true;
time = 500;
}
else if(key == 'D')
{
flash = true;
time = 250;
}
}
void setup()
{
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
keypad.addEventListener(keyPadProcesser);
}
void loop()
{
keypad.getKey();
if(flash)
{
int range = millis() % (2 * time);
if( range > 0 && range < time)
{
led.turnOff();
}
else
{
led.turnOn();
}
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
rgb2:R
rgb2:COM
rgb2:G
rgb2:B
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4