// lab2.4
// 6330300593 Pattima Sommai

void setup() {
  Serial.begin(115200);

  //Seven Segment
  pinMode(2, OUTPUT); // a
  pinMode(5, OUTPUT); // b
  pinMode(18, OUTPUT); // c
  pinMode(19, OUTPUT); // d
  pinMode(21, OUTPUT); // e
  pinMode(23, OUTPUT); // f
  pinMode(22, OUTPUT); // g 

  // keypad
  pinMode(13, OUTPUT); // r1
  pinMode(12, OUTPUT); // r2
  pinMode(14, OUTPUT); // r3
  pinMode(27, OUTPUT); // r4
  pinMode(26, INPUT_PULLUP); // c1
  pinMode(25, INPUT_PULLUP); // c2
  pinMode(33, INPUT_PULLUP); // c3
  pinMode(32, INPUT_PULLUP); // c4

  off();
}

void loop() {
  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(14, HIGH);
  digitalWrite(27, HIGH);
  if (digitalRead(26) == LOW){
    one();
  }
  else if (digitalRead(25) == LOW){
    two();
  }
  else if (digitalRead(33) == LOW){
    three();
  }
  else if (digitalRead(32) == LOW){
    A();
  }
  else{
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(14, HIGH);
    digitalWrite(27, HIGH);
    if (digitalRead(26) == LOW){
      four();
    }
    else if (digitalRead(25) == LOW){
      five();
    }
    else if (digitalRead(33) == LOW){
      six();
    }
    else if (digitalRead(32) == LOW){
      B();
    }
    else{
      digitalWrite(13, HIGH);
      digitalWrite(12, HIGH);
      digitalWrite(14, LOW);
      digitalWrite(27, HIGH);
      if (digitalRead(26) == LOW){
        seven();
      }
      else if (digitalRead(25) == LOW){
        eight();
      }
      else if (digitalRead(33) == LOW){
        nine();
      }
      else if (digitalRead(32) == LOW){
        C();
      }
      else{
        digitalWrite(13, HIGH);
        digitalWrite(12, HIGH);
        digitalWrite(14, HIGH);
        digitalWrite(27, LOW);
        if (digitalRead(26) == LOW){
          off();
          Serial.println("Can't show * on seven segment");
        }
        else if (digitalRead(25) == LOW){
          zero();
        }
        else if (digitalRead(33) == LOW){
          off();
          Serial.println("Can't show # on seven segment");
        }
        else if (digitalRead(32) == LOW){
          D();
        }
      }
    }
  }
}

void off(void){
  digitalWrite(2, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(18, HIGH);
  digitalWrite(19, HIGH);
  digitalWrite(21, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(22, HIGH);
  //Serial.println("off");
}

void zero(void){
  digitalWrite(2, LOW);
  digitalWrite(5, LOW);
  digitalWrite(18, LOW);
  digitalWrite(19, LOW);
  digitalWrite(21, LOW);
  digitalWrite(23, LOW);
  digitalWrite(22, HIGH);
  //Serial.println("0");
}

void one(void){
  digitalWrite(2, HIGH);
  digitalWrite(5, LOW);
  digitalWrite(18, LOW);
  digitalWrite(19, HIGH);
  digitalWrite(21, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(22, HIGH);
  //Serial.println("1");
}

void two(void){
  digitalWrite(2, LOW);
  digitalWrite(5, LOW);
  digitalWrite(18, HIGH);
  digitalWrite(19, LOW);
  digitalWrite(21, LOW);
  digitalWrite(23, HIGH);
  digitalWrite(22, LOW);
  //Serial.println("2");
}

void three(void){
  digitalWrite(2, LOW);
  digitalWrite(5, LOW);
  digitalWrite(18, LOW);
  digitalWrite(19, LOW);
  digitalWrite(21, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(22, LOW);
  //Serial.println("3");
}

void four(void){
  digitalWrite(2, HIGH);
  digitalWrite(5, LOW);
  digitalWrite(18, LOW);
  digitalWrite(19, HIGH);
  digitalWrite(21, HIGH);
  digitalWrite(23, LOW);
  digitalWrite(22, LOW);
  //Serial.println("4");
}

void five(void){
  digitalWrite(2, LOW);
  digitalWrite(5, HIGH);
  digitalWrite(18, LOW);
  digitalWrite(19, LOW);
  digitalWrite(21, HIGH);
  digitalWrite(23, LOW);
  digitalWrite(22, LOW);
  //Serial.println("5");
}

void six(void){
  digitalWrite(2, LOW);
  digitalWrite(5, HIGH);
  digitalWrite(18, LOW);
  digitalWrite(19, LOW);
  digitalWrite(21, LOW);
  digitalWrite(23, LOW);
  digitalWrite(22, LOW);
  //Serial.println("6");
}

void seven(void){
  digitalWrite(2, LOW);
  digitalWrite(5, LOW);
  digitalWrite(18, LOW);
  digitalWrite(19, HIGH);
  digitalWrite(21, HIGH);
  digitalWrite(23, LOW);
  digitalWrite(22, HIGH);
  //Serial.println("7");
}

void eight(void){
  digitalWrite(2, LOW);
  digitalWrite(5, LOW);
  digitalWrite(18, LOW);
  digitalWrite(19, LOW);
  digitalWrite(21, LOW);
  digitalWrite(23, LOW);
  digitalWrite(22, LOW);
  //Serial.println("8");
}

void nine(void){
  digitalWrite(2, LOW);
  digitalWrite(5, LOW);
  digitalWrite(18, LOW);
  digitalWrite(19, LOW);
  digitalWrite(21, HIGH);
  digitalWrite(23, LOW);
  digitalWrite(22, LOW);
  //Serial.println("9");
}

void A(void){
  digitalWrite(2, LOW);
  digitalWrite(5, LOW);
  digitalWrite(18, LOW);
  digitalWrite(19, HIGH);
  digitalWrite(21, LOW);
  digitalWrite(23, LOW);
  digitalWrite(22, LOW);
  //Serial.println("A");
}

void B(void){
  digitalWrite(2, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(18, LOW);
  digitalWrite(19, LOW);
  digitalWrite(21, LOW);
  digitalWrite(23, LOW);
  digitalWrite(22, LOW);
  //Serial.println("B");
}

void C(void){
  digitalWrite(2, LOW);
  digitalWrite(5, HIGH);
  digitalWrite(18, HIGH);
  digitalWrite(19, LOW);
  digitalWrite(21, LOW);
  digitalWrite(23, LOW);
  digitalWrite(22, HIGH);
  //Serial.println("C");
}

void D(void){
  digitalWrite(2, HIGH);
  digitalWrite(5, LOW);
  digitalWrite(18, LOW);
  digitalWrite(19, LOW);
  digitalWrite(21, LOW);
  digitalWrite(23, HIGH);
  digitalWrite(22, LOW);
  //Serial.println("D");
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
sevseg1:COM.1
sevseg1:COM.2
sevseg1:A
sevseg1:B
sevseg1:C
sevseg1:D
sevseg1:E
sevseg1:F
sevseg1:G
sevseg1:DP
r1:1
r1:2