////////////////////////////////////////////////////////////////////////////////////////////////////
// 七段顯示器計時功能(陣列、迴圈)
// // 七段顯示器腳位設定
// 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);
}
////////////////////////////////////////////////////////////////////////////////////////////////////