#include <WiFi.h>
#include "support.h"
#include "iostream"
using namespace std;
// 網路設定
// const char* ssid = "Nokia 5.4"; // Nokia 5.4
const char* ssid = "Wokwi-GUEST";
const char* password = "12345678"; // 12345678
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 lowArr[4] = {pin_DIG1,pin_DIG2,pin_DIG3,pin_DIG4};
int highArr[8] = {pin_A,pin_B,pin_C,pin_D,pin_E,pin_F,pin_G,pin_DP};
int numArr[10][8] ={
{light,light,light,light,light,light,dark,dark},
{dark,light,light,dark,dark,dark,dark,dark},
{light,light,dark,light,light,dark,light,dark},
{light,light,light,light,dark,dark,light,dark},
{dark,light,light,dark,dark,light,light,dark},
{light,dark,light,light,dark,light,light,dark},
{light,dark,light,light,light,light,light,dark},
{light,light,light,dark,dark,light,dark,dark},
{light,light,light,light,light,light,light,dark},
{light,light,light,light,dark,light,light,dark},
};
void display(int pos, int number){
for (int i = 0 ; i<4 ; i++){
digitalWrite(lowArr[i], 1);
}
for (int i = 0 ; i<8 ; i++){
digitalWrite(highArr[i], numArr[number][i]);
}
digitalWrite(lowArr[pos], 0);
}
int scantime = 2;
void draw(int n1,int n2,int n3,int n4,int ms){
for (int i=0 ; i<ms/(scantime*4) ; i++){
display(0,n1);
display(1,n2);
display(2,n3);
display(3,n4);
}
}
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(".");
}
// Init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime(); // 自定輸出時間函式
Serial.println("");
Serial.println("WiFi connected.");
Serial.print("IP位址: ");
Serial.println(WiFi.localIP()); // 回傳分配到的IP位址
Serial.print("WiFi RSSI: ");
Serial.println(WiFi.RSSI()); // 回傳接收訊號強度(以 dBm 為單位)
// set pin mode
for (int i = 0 ; i<4 ; i++){
pinMode(lowArr[i],OUTPUT);
digitalWrite(lowArr[i], 0);
}
for (int i = 0 ; i<8 ; i++){
pinMode(highArr[i],OUTPUT);
digitalWrite(highArr[i], 0);
}
}
void printLocalTime(){
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
int year = timeinfo.tm_year + 1900;
int month = timeinfo.tm_mon + 1;
int date = timeinfo.tm_mday;
int n1 = timeinfo.tm_min / 10;
int n2 = timeinfo.tm_min % 10;
int n3 = timeinfo.tm_sec / 10;
int n4 = timeinfo.tm_sec % 10;
draw(n1,n2,n3,n4,1000);
// cout << year << endl;
// cout << month << endl;
// cout << date << endl;
// Serial.print("Week: ");
// Serial.println(find_week(year, month, date));
}
void loop() {
printLocalTime();
delay(100);
}