#define RED 11
#define GREEN 10
#define BLUE 9
#include "Keypad.h"
int redHighLow = HIGH;
int greenHighLow = HIGH;
int blueHighLow = HIGH;
unsigned long previousMillis;
int ledState = HIGH;
char keypressed;
int delay_num = 0;
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'}
};
// соединения клавиатуры с выводами Arduino:
byte rPins[Rows]= {12,8,7,6};
byte cPins[Cols]= {5,4,3,2};
// создаем объект класса Keypad
Keypad kpd= Keypad(makeKeymap(keymap), rPins, cPins, Rows, Cols);
void color_switch(int red, int green, int blue){
digitalWrite(BLUE, blue);
digitalWrite(GREEN, green);
digitalWrite(RED, red);
}
void blink(int num, unsigned long currentMillis){
if(currentMillis - previousMillis > num){
previousMillis = currentMillis;
if(ledState == LOW){
digitalWrite(BLUE, HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(RED, HIGH);
ledState = HIGH;
} else {
color_switch(redHighLow, greenHighLow, blueHighLow);
ledState = LOW;
}
}
}
void setup()
{
Serial.begin(9600);
pinMode(9, OUTPUT);
digitalWrite(9, HIGH);
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
pinMode(11, OUTPUT);
digitalWrite(11, HIGH);
}
void loop()
{
unsigned long currentMillis = millis();
blink(delay_num, currentMillis);
keypressed = kpd.getKey();
if (keypressed != NO_KEY){
switch(keypressed){
case '0':{
redHighLow = HIGH;
greenHighLow = HIGH;
blueHighLow = HIGH;
color_switch(redHighLow, greenHighLow, blueHighLow);
break;
}
case '1':{
redHighLow = HIGH;
greenHighLow = HIGH;
blueHighLow = LOW;
color_switch(redHighLow, greenHighLow, blueHighLow);
break;
}
case '2':{
redHighLow = HIGH;
greenHighLow = LOW;
blueHighLow = HIGH;
color_switch(redHighLow, greenHighLow, blueHighLow);
break;
}
case '3':{
redHighLow = LOW;
greenHighLow = HIGH;
blueHighLow = HIGH;
color_switch(redHighLow, greenHighLow, blueHighLow);
break;
}
case '4':{
redHighLow = HIGH;
greenHighLow = LOW;
blueHighLow = LOW;
color_switch(redHighLow, greenHighLow, blueHighLow);
break;
}
case '5':{
redHighLow = LOW;
greenHighLow = HIGH;
blueHighLow = LOW;
color_switch(redHighLow, greenHighLow, blueHighLow);
break;
}
case '6':{
redHighLow = LOW;
greenHighLow = LOW;
blueHighLow = HIGH;
color_switch(redHighLow, greenHighLow, blueHighLow);
break;
}
case '7':{
redHighLow = LOW;
greenHighLow = LOW;
blueHighLow = LOW;
color_switch(redHighLow, greenHighLow, blueHighLow);
break;
}
case 'A':{
delay_num = 0;
color_switch(redHighLow, greenHighLow, blueHighLow);
break;
}
case 'B':{
delay_num = 1000;
break;
}
case 'C':{
delay_num = 500;
break;
}
case 'D':{
delay_num = 250;
break;
}
default : {break;}
}
}
}