// Code massiv
const uint8_t massivLength = 3;
uint8_t massiv[massivLength] = {1,2,3};
//Main RGB LED
uint8_t red = 13;
uint8_t green = 12;
//Button-LED #1
uint8_t red1 = 11;
uint8_t button1 = 10;
//Button-LED #2
uint8_t red2 = 9;
uint8_t button2 = 8;
//Button-LED #3
uint8_t red3 = 7;
uint8_t button3 = 6;
const uint8_t buttonsCount = 3;
const uint8_t Press = 2;
uint8_t massivBtn[buttonsCount] = {button1, button2, button3};
uint8_t stateBtn[buttonsCount] = {1,1,1};
uint8_t currentPosition = 0;
void setup() {
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(red1, OUTPUT);
pinMode(button1, INPUT_PULLUP);
pinMode(red2, OUTPUT);
pinMode(button2, INPUT_PULLUP);
pinMode(red3, OUTPUT);
pinMode(button3, INPUT_PULLUP);
Serial.begin(9600);
}
void DisableLed()
{
digitalWrite(red1, LOW);
digitalWrite(red2, LOW);
digitalWrite(red3, LOW);
}
void EnableLed(uint8_t number)
{
switch (number)
{
case 1:
digitalWrite(red1, HIGH);
break;
case 2:
digitalWrite(red2, HIGH);
break;
case 3:
digitalWrite(red3, HIGH);
break;
}
}
void ErrorInput()
{
Serial.println("WRONG CODE! RED LIGHT");
digitalWrite(red, HIGH);
DisableLed();
}
void RightCombination()
{
Serial.println("RIGHT CODE! GREEN LIGHT");
digitalWrite(green, HIGH);
DisableLed();
}
void ButtonPress(uint8_t number)
{
Serial.print("Button - ");
Serial.print(number);
Serial.println(" press");
if (currentPosition == 0)
{
digitalWrite(red, LOW);
digitalWrite(green, LOW);
}
if (number == massiv[currentPosition++]) {
EnableLed(currentPosition);
if (currentPosition == massivLength) {
currentPosition = 0;
RightCombination();
}
} else {
currentPosition = 0;
ErrorInput();
}
}
void readButtons()
{
for (uint8_t n = 0; n < buttonsCount; n++)
{
uint8_t btnState = digitalRead(massivBtn[n]);
if (stateBtn[n] == btnState && btnState == LOW) {
delay(10);
if (digitalRead(massivBtn[n]) == LOW) {
stateBtn[n] = Press;
ButtonPress(n + 1);
}
} else {
(stateBtn[n] != Press) ? stateBtn[n] = btnState : (btnState) ? stateBtn[n] = btnState : stateBtn[n] = Press;
}
}
}
void loop() {
readButtons();
}