////////////////////////////////////////////////////////////////////////////////////////////////////
// 七段顯示器計時功能(陣列、迴圈)
// // 七段顯示器腳位設定
// int pin[8] = {15, 2, 4, 5, 18, 19, 21, 22};
// // 數字
// int num[10][8] = {
//   {1, 1, 1, 0, 1, 1, 1, 0}, //0
//   {0, 0, 1, 0, 1, 0, 0, 0}, //1
//   {1, 1, 0, 0, 1, 1, 0, 1}, //2
//   {0, 1, 1, 0, 1, 1, 0, 1}, //3
//   {0, 0, 1, 0, 1, 0, 1, 1}, //4
//   {0, 1, 1, 0, 0, 1, 1, 1}, //5
//   {1, 1, 1, 0, 0, 1, 1, 1}, //6
//   {0, 0, 1, 0, 1, 1, 1, 0}, //7
//   {1, 1, 1, 0, 1, 1, 1, 1}, //8
//   {0, 1, 1, 0, 1, 1, 1, 1}  //9
// };
// void displayNum(int number, int ms){
//   for(int i=0; i<4; i++){
//     digitalwrite(pin[i], num[number])[i];
//   }
//   delay(ms);
// }
// void setup(){
//   for(int j=0; j<10; j++){
//     for(int i=0; i<8; i++){
//       pinMode(pin[i], OUTPUT);
//     }
    
//   }
// void loop(){
//     for(int j=0; j<10; j++){
//       digitalWrite(j, 1000);
//     }
    
//   }
// }
////////////////////////////////////////////////////////////////////////////////////////////////////




////////////////////////////////////////////////////////////////////////////////////////////////////
#include <WiFi.h>
// 網路設定
const char* ssid     = "Your wifi ssid";
const char* password = "your password";


// 取得網路時間相關參數設定
const char* ntpServer = "time.google.com"; // Google - NTP Server
const long  gmtOffset_sec = 28800; //台灣時區+8hr,28800=8*60*60
const int   daylightOffset_sec = 0;  //台灣無日光節約時間






// 七段顯示器腳位設定
#define pin_DIG1 14
#define pin_DIG2 23
#define pin_DIG3 22
#define pin_DIG4 19
#define pin_A 12
#define pin_B 21
#define pin_C 5
#define pin_D 2
#define pin_E 15
#define pin_F 13
#define pin_G 18
#define pin_DP 4

// 共陰極、共陽極設定
#define hardwareConfig 0 //COMMON_ANODE=1 COMMON_CATHODE=0
// 條件編譯
#if hardwareConfig==0
// 共陰極
#define digitOn 0
#define digitOff 1
#define light 1
#define dark 0
#else
// 共陽極
#define digitOn 1
#define digitOff 0
#define light 0
#define dark 1
#endif

int digitalPins[4]={pin_DIG1, pin_DIG2, pin_DIG3, pin_DIG4} ;
int segmentPins[8]={pin_A, pin_B, pin_C, pin_D, pin_E, pin_F, pin_G, pin_DP};

int num[10][8]={
  {light, light, light, light, light, light, dark, dark},   // 0
  {dark, light, light, dark, dark, dark, dark, dark},       // 1
  {light, light, dark, light, light, dark, light, dark},    // 2
  {light, light, light, light, dark, dark, light, dark},    // 3
  {dark, light, light, dark, dark, light, light, dark},     // 4
  {light, dark, light, light, dark, light, light, dark},    // 5
  {light, dark, light, light, light, light, light, dark},   // 6
  {light, light, light, dark, dark, light, dark, dark},     // 7
  {light, light, light, light, light, light, light, dark},  // 8
  {light, light, light, light, dark, light, light, dark},   // 9    
};

void displayNum(int pos, int number)
{
  for(int i=0; i<4; i++){
  
  digitalWrite(digitalPins[i], digitOff);
}

for(int i=0; i<8; i++){
 
  digitalWrite(segmentPins[i], num[number][i]);
}
  //
  digitalWrite(digitalPins[pos], digitOn);
}
//
int scanTime= 5 ;
void display(int num0, int num1, int num2, int num3, int ms){
for(int i=0; i< ms/(scanTime*4);i++){
      displayNum(0, num0); delay(scanTime);
      displayNum(1, num1); delay(scanTime);
      displayNum(2, num2); delay(scanTime);
      displayNum(3, num3); delay(scanTime);
}
}


void setup() {
  Serial.begin(115200);
  //Connect to Wi-Fi
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password); // 以STA(網路終端)模式連接到WiFi基地台
  WiFi.begin("Wokwi-GUEST", "", 6); //wokwi提供的虛擬 WiFi 接入點
  while (WiFi.status() != WL_CONNECTED) {
   delay(500);
   Serial.print(".");
  }
 Serial.println("");
  Serial.println("WiFi connected.");
 Serial.print("IP位址: ");
 Serial.println(WiFi.localIP()); // 回傳分配到的IP位址
 Serial.print("WiFi RSSI: ");
 Serial.println(WiFi.RSSI());  // 回傳接收訊號強度(以 dBm 為單位)


  //Init and get the time
 configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
 printLocalTime();

for(int i=0; i<4; i++){
  pinMode(digitalPins[i], OUTPUT);
  digitalWrite(digitalPins[i], digitOff);
}

for(int i=0; i<8; i++){
  pinMode(segmentPins[i], OUTPUT);
  digitalWrite(segmentPins[i], dark);
}


}

void loop(){
  printLocalTime();
}

void printLocalTime(){
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("Failed to obtain time");
    return;
  }
  Serial.print("Hour: "); //顯示英文 時 24小時制
  Serial.println(timeinfo.tm_hour);
  Serial.print("Minute: "); //顯示英文 分
  Serial.println(timeinfo.tm_min);
  Serial.print("Second: "); //顯示英文 秒
  Serial.println(timeinfo.tm_sec);

  int num0 = timeinfo.tm_min / 10;
  int num1 = timeinfo.tm_min % 10;
  int num2 = timeinfo.tm_sec / 10;
  int num3 = timeinfo.tm_sec % 10;
  display(num0, num1, num2, num3, 1000);

}

////////////////////////////////////////////////////////////////////////////////////////////////////