//////////////////////////////////////////////////////////////////////////////
///// Name : Sittinon
///// Proposition : LED dice circuit
//////////////////////////////////////////////////////////////////////////////
void setup() {

  for (int i = 2; i <= 18; i++){ // loop i start 2 => i = 18
    pinMode(i, OUTPUT); // กำหนด i ให้ส่งสัญญาณOutput
  }
  Serial.begin(115200); // เรียกใช้ port Serial ด้วยความเร็ว 115200 bit/s
  randomSeed(analogRead(A0)); // กำหนดSeedให้ใช้ฟังก์ชันRandom
  pinMode(21, INPUT_PULLUP); // กำหนดModeของ21 ให้เป็น Input-pullup (มีค่าเริ่มต้นเป็น 1 )

}

void displayNumber(int number){ 

  digitalWrite(5, number > 1 ? HIGH : LOW); // กำหนด pinGPIO5 เป็น high เมื่อ number มีค่า > 1
  digitalWrite(17, number > 3 ? HIGH : LOW); // กำหนด pinGPIO17 เป็น high เมื่อ number มีค่า > 3
  digitalWrite(16, number == 6 ? HIGH : LOW); // กำหนด pinGPIO16 เป็น high เมื่อ number มีค่า = 6
  digitalWrite(4, number % 2 == 1 ? HIGH : LOW); // กำหนด pinGPIO4 เป็น high เมื่อ number ÷ 2 แล้วเหลือเศษ 1
  digitalWrite(18, number == 6 ? HIGH : LOW); // กำหนด pinGPIO18 เป็น high เมื่อ number มีค่า = 6
  digitalWrite(2, number > 3 ? HIGH : LOW); // กำหนด pinGPIO2 เป็น high เมื่อ numeber มีค่า > 3
  digitalWrite(15, number > 1 ? HIGH : LOW); // กำหนด pinGPIO15 เป็น high เมื่อ number มีค่า > 1
}

bool firstTime = true; // ประกาศตัวแปล firstTime ชนิด bool ค่าเริ่มต้นเป็น true
void loop() {

  while (digitalRead(21) == HIGH){  // ทำงานเมื่อ pin21 = high
  }
  if (firstTime) {  // ทำงานเมื่อ firstTime เป็น true
    Serial.println(micros()); // พิมพ์ค่าของ micros ไปยัง Serial Monitor
    randomSeed(micros()); // random ค่า micros
    firstTime = false;  // เปลี่ยนค่า firstTime เป็น false เพื่อหยุดการ random
  }
  for (int i = 0; i < 18; i++) {  // loop i start 0 => i = 18
    int num = random(1, 7); // random number 1 to 6
    displayNumber(num); // เรียกใช้ function displayNumber
    Serial.println(num);  // create number to Serial Monitor
    delay(50 + 20 * i); // หน่วยเวลาในการแสดงผลLED (millisecond)
}
}