/*
*Simulazione del sistema di sicurezza di una cassaforte.
*Può essere definita la lunghezza del codice la quale dovrà essere rispettata (non può essere nè più lungo nè più corto)
*Vengono inseriti 2 codici: uno di sicurezza, e uno immesso dall'utente.
*Tramite un pulsate, l'utente può azzerare il proprio codice per "ritenteare".
*Se i due codici combaciano, verrà accesa una luce verde, altrimenti rossa.
*
*Autore: Matteo Ghilardini
*Ultima modifica: 29.05.2018
*/
//4 X 4 Switch matrix pressing code by haneefputtur.com
//Using Push Buttons to create 4 X 4 Switch matrix. Can be extended to more buttons
//Data will be displayed in serial monitor for testing project

byte h = 0, v = 0; //variables used in for loops
const unsigned long period = 50; //little period used to prevent error
unsigned long kdelay = 0;      // variable used in non-blocking delay
const byte rows = 4;           //number of rows of keypad
const byte columns = 4;          //number of columnss of keypad
const byte Output[rows] = {11, 10, 9, 8}; //array of pins used as output for rows of keypad
const byte Input[columns] = {7, 6, 5, 4}; //array of pins used as input for columnss of keypad
String code = "";
int codeLength = 6;
bool codeChanged = false;
boolean isReading = true;
String userCode = "";
int funz;
byte keypad() // function used to detect which button is used
{
  static bool no_press_flag = 0; //static flag used to ensure no button is pressed
  for (byte x = 0; x < columns; x++) // for loop used to read all inputs of keypad to ensure no button is pressed
  {
    if (digitalRead(Input[x]) == HIGH); //read evry input if high continue else break;
    else
      break;
    if (x == (columns - 1)) //if no button is pressed
    {
      no_press_flag = 1;
      h = 0;
      v = 0;
    }
  }
  if (no_press_flag == 1) //if no button is pressed
  {
    for (byte r = 0; r < rows; r++) //for loop used to make all output as low
      digitalWrite(Output[r], LOW);
    for (h = 0; h < columns; h++) // for loop to check if one of inputs is low
    {
      if (digitalRead(Input[h]) == HIGH) //if specific input is remain high (no press on it) continue
        continue;
      else    //if one of inputs is low
      {
        for (v = 0; v < rows; v++) //for loop used to specify the number of row
        {
          digitalWrite(Output[v], HIGH);  //make specified output as HIGH
          if (digitalRead(Input[h]) == HIGH) //if the input that selected from first sor loop is change to high
          {
            no_press_flag = 0;              //reset the no press flag;
            for (byte w = 0; w < rows; w++) // make all outputs as low
              digitalWrite(Output[w], LOW);
            return v * 4 + h; //return number of button
          }
        }
      }
    }
  }
  return 50;
}
void setup()
{
  for (byte i = 0; i < rows; i++) //for loop used to make pin mode of outputs as output
  {
    pinMode(Output[i], OUTPUT);
  }
  for (byte s = 0; s < columns; s++) //for loop used to makk pin mode of inputs as inputpullup
  {
    pinMode(Input[s], INPUT_PULLUP);
  }
  Serial.begin(9600); //to use serial monitor we set the buad rate
  pinMode(20, OUTPUT); //RED
  pinMode(22, INPUT); //switch read
  pinMode(19, INPUT); //button read
  pinMode(24, OUTPUT); //BLUE
  pinMode(26, OUTPUT); //GREEN
  pinMode(52, OUTPUT); //+5
  pinMode(50, OUTPUT); //GND
  pinMode(37, OUTPUT); //green Center
  pinMode(35, OUTPUT); //green LeftUp
  pinMode(33, OUTPUT); //green Up
  pinMode(31, OUTPUT); //green RightUp
  pinMode(29, OUTPUT); //green LeftDown
  pinMode(27, OUTPUT); //green Down
  pinMode(25, OUTPUT); //green RightDown
  pinMode(23, OUTPUT); //green DOT
}
void loop()
{
  digitalWrite(52, HIGH);
  digitalWrite(50, LOW);
  int pot = map(analogRead(A15), 0, 1023, 0, 9);
  if (codeChanged == false) {
    codeLength = pot;
  } else {
    digitalWrite(23, HIGH);//dot
  }
  if (codeLength == 0) {
    digitalWrite(37, LOW);//center
    digitalWrite(35, LOW);//LU
    digitalWrite(33, LOW);//U
    digitalWrite(31, HIGH);//RU
    digitalWrite(29, LOW);//LD
    digitalWrite(27, LOW);//D
    digitalWrite(25, HIGH);//RD
  } else if (codeLength == 1) {
    digitalWrite(37, HIGH);//center
    digitalWrite(35, LOW);//LU
    digitalWrite(33, HIGH);//U
    digitalWrite(31, HIGH);//RU
    digitalWrite(29, HIGH);//LD
    digitalWrite(27, HIGH);//D
    digitalWrite(25, LOW);//RD
  } else if (codeLength == 2) {
    digitalWrite(37, HIGH);//center
    digitalWrite(35, LOW);//LU
    digitalWrite(33, HIGH);//U
    digitalWrite(31, HIGH);//RU
    digitalWrite(29, LOW);//LD
    digitalWrite(27, HIGH);//D
    digitalWrite(25, HIGH);//RD
  } else if (codeLength == 3) {
    digitalWrite(37, HIGH);//center
    digitalWrite(35, HIGH);//LU
    digitalWrite(33, LOW);//U
    digitalWrite(31, HIGH);//RU
    digitalWrite(29, LOW);//LD
    digitalWrite(27, LOW);//D
    digitalWrite(25, HIGH);//RD
  } else if (codeLength == 4) {
    digitalWrite(37, HIGH);//center
    digitalWrite(35, HIGH);//LU
    digitalWrite(33, HIGH);//U
    digitalWrite(31, LOW);//RU
    digitalWrite(29, LOW);//LD
    digitalWrite(27, HIGH);//D
    digitalWrite(25, HIGH);//RD
  } else if (codeLength == 5) {
    digitalWrite(37, HIGH);//center
    digitalWrite(35, HIGH);//LU
    digitalWrite(33, HIGH);//U
    digitalWrite(31, LOW);//RU
    digitalWrite(29, HIGH);//LD
    digitalWrite(27, HIGH);//D
    digitalWrite(25, HIGH);//RD
  } else if (codeLength == 6) {
    digitalWrite(37, LOW);//center
    digitalWrite(35, LOW);//LU
    digitalWrite(33, HIGH);//U
    digitalWrite(31, HIGH);//RU
    digitalWrite(29, LOW);//LD
    digitalWrite(27, LOW);//D
    digitalWrite(25, HIGH);//RD
  } else if (codeLength == 7) {
    digitalWrite(37, HIGH);//center
    digitalWrite(35, HIGH);//LU
    digitalWrite(33, HIGH);//U
    digitalWrite(31, HIGH);//RU
    digitalWrite(29, HIGH);//LD
    digitalWrite(27, HIGH);//D
    digitalWrite(25, HIGH);//RD
  } else if (codeLength == 8) {
    digitalWrite(37, HIGH);//center
    digitalWrite(35, HIGH);//LU
    digitalWrite(33, HIGH);//U
    digitalWrite(31, HIGH);//RU
    digitalWrite(29, LOW);//LD
    digitalWrite(27, HIGH);//D
    digitalWrite(25, HIGH);//RD
  }
  if (digitalRead(22) == LOW) {
    digitalWrite(20, HIGH); //RED
    digitalWrite(24, LOW); //BLUE
    digitalWrite(26, HIGH); //GREEN
    Serial.println(digitalRead(19));
    if (digitalRead(19) == HIGH) {
      userCode = "";
    }
    isReading = true;
  } else {
    digitalWrite(20, HIGH); //RED
    digitalWrite(24, HIGH); //BLUE
    digitalWrite(26, HIGH); //GREEN
    isReading = false;
  }
  if (millis() - kdelay > period) //used to make non-blocking delay
  {
    kdelay = millis(); //capture time from millis function
    switch (keypad())  //switch used to specify which button
    {
      case 0:
        codeChanged = true;
        Serial.println(3);
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += 3;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, LOW); //E-1
            digitalWrite(51, LOW); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += 3;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, LOW); //E-1
            digitalWrite(51, LOW); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
          //ABCD
        }
        break;
      case 1:
        codeChanged = true;
        Serial.println(7);
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += 7;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, LOW); //D-2
            digitalWrite(45, LOW); //E-1
            digitalWrite(51, LOW); //F-9
            digitalWrite(53, LOW); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += 7;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, LOW); //D-2
            digitalWrite(45, LOW); //E-1
            digitalWrite(51, LOW); //F-9
            digitalWrite(53, LOW); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
          //ABC
        }
        break;
      case 2:
        codeChanged = true;
        Serial.println('B');
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += "B";
            digitalWrite(49, LOW); //A-7
            digitalWrite(47, LOW); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += "B";
            digitalWrite(49, LOW); //A-7
            digitalWrite(47, LOW); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
        }
        break;
      case 3:
        codeChanged = true;
        Serial.println('F');
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += "F";
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, LOW); //B-6
            digitalWrite(41, LOW); //C-4
            digitalWrite(43, LOW); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += "F";
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, LOW); //B-6
            digitalWrite(41, LOW); //C-4
            digitalWrite(43, LOW); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
        }
        break;
      case 4:
        codeChanged = true;
        Serial.println(2);
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += 2;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, LOW); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, LOW); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += 2;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, LOW); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, LOW); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
        }
        //ABGED
        break;
      case 5:
        codeChanged = true;
        Serial.println(6);
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += 6;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, LOW); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += 6;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, LOW); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
          //ACDEFG
        }
        break;
      case 6:
        codeChanged = true;
        Serial.println('A');
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += "A";
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, LOW); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += "A";
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, LOW); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
        }
        break;
      case 7:
        codeChanged = true;
        Serial.println('E');
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += "E";
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, LOW); //B-6
            digitalWrite(41, LOW); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += "E";
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, LOW); //B-6
            digitalWrite(41, LOW); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
        }
        break;
      case 8:
        codeChanged = true;
        Serial.println(1);
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += 1;
            digitalWrite(49, LOW); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, LOW); //D-2
            digitalWrite(45, LOW); //E-1
            digitalWrite(51, LOW); //F-9
            digitalWrite(53, LOW); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += 1;
            digitalWrite(49, LOW); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, LOW); //D-2
            digitalWrite(45, LOW); //E-1
            digitalWrite(51, LOW); //F-9
            digitalWrite(53, LOW); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
          //BC
        }
        break;
      case 9:
        codeChanged = true;
        Serial.println(5);
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += 5;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, LOW); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, LOW); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += 5;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, LOW); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, LOW); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
          //ACDFG
        }
        break;
      case 10:
        codeChanged = true;
        Serial.println(9);
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += 9;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, LOW); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += 9;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, LOW); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
          //ABCDFG
        }
        break;
      case 11:
        codeChanged = true;
        Serial.println('D');
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += "D";
            digitalWrite(49, LOW); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, LOW); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += "D";
            digitalWrite(49, LOW); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, LOW); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
        }
        break;
      case 12:
        codeChanged = true;
        Serial.println(0);
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += 0;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, LOW); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += 0;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, LOW); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
          //ABCDEF
        }

        break;
      case 13:
        codeChanged = true;
        Serial.println(4);
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += 4;
            digitalWrite(49, LOW); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, LOW); //D-2
            digitalWrite(45, LOW); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += 4;
            digitalWrite(49, LOW); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, LOW); //D-2
            digitalWrite(45, LOW); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
          //BCFG
        }
        break;
      case 14:
        codeChanged = true;
        Serial.println(8);
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += 8;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += 8;
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, HIGH); //B-6
            digitalWrite(41, HIGH); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, HIGH); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
          //ABCDEFG
        }
        break;
      case 15:
        codeChanged = true;
        Serial.println('C');
        if (code.length() <= codeLength || userCode.length() <= codeLength) {
          if (isReading == false && code.length() <= codeLength) {
            code += "C";
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, LOW); //B-6
            digitalWrite(41, LOW); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, LOW); //G-10
            digitalWrite(39, LOW); //DOT-5
          } else if (isReading == true && userCode.length() <= codeLength) {
            userCode += "C";
            digitalWrite(49, HIGH); //A-7
            digitalWrite(47, LOW); //B-6
            digitalWrite(41, LOW); //C-4
            digitalWrite(43, HIGH); //D-2
            digitalWrite(45, HIGH); //E-1
            digitalWrite(51, HIGH); //F-9
            digitalWrite(53, LOW); //G-10
            digitalWrite(39, LOW); //DOT-5
          }
        }
        break;
      default:
        ;
    }
    Serial.print("Code: ");
    Serial.println(code + "-" + userCode);

    if (code.length() > codeLength && userCode.length() > codeLength) {
      if (userCode == code) {
        digitalWrite(24, HIGH); //BLUE
        digitalWrite(20, HIGH); //RED
        digitalWrite(26, LOW); //GREEN
      } else {
        digitalWrite(24, HIGH); //BLUE
        digitalWrite(20, LOW); //RED
        digitalWrite(26, HIGH); //GREEN
      }
      delay(100);
    }
  }
}