#include <WiFi.h>
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
// Wifi Setting
const char* ssid = "Yun_22Ultra";
const char* password = "94879487";
// 取得網路時間相關參數設定
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
#define pin_DIG1 5
#define pin_DIG2 21
#define pin_DIG3 22
#define pin_DIG4 25
#define pin_DIG5 32
#define pin_DIG6 33
#define pin_A 18
#define pin_B 23
#define pin_C 27
#define pin_D 12
#define pin_E 13
#define pin_F 19
#define pin_G 26
#define pin_DP 14
#define hardwareConfig 0 //COMMON_ANODE=1 COMMON_CATHODE=0
// Common Setting
#if hardwareConfig==0
#define DigOn 0
#define DigOff 1
#define light 1
#define dark 0
#else
#define DigOn 1
#define DigOff 0
#define light 0
#define dark 1
#endif
//
int DigitalPin[6] = {pin_DIG1, pin_DIG2, pin_DIG3, pin_DIG4, pin_DIG5, pin_DIG6};
int Segment[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 Dig, int Number)
{
for(int i=0; i<6; i++)
{
digitalWrite(DigitalPin[i], DigOff);
}
for(int i=0; i<8; i++)
{
digitalWrite(Segment[i], Num[Number][i]);
}
digitalWrite(DigitalPin[Dig], DigOn);
}
const int ScanTime = 10;//1.0/(16*6)*1000
void Display(int Num0, int Num1, int Num2, int Num3, int Num4, int Num5, int Time) // Time(ms)
{
for(int temp=Time; temp>ScanTime*4; temp=temp-ScanTime*4)
{
DisplayNum(0,Num0); delay(ScanTime);
DisplayNum(1,Num1); delay(ScanTime);
DisplayNum(2,Num2); delay(ScanTime);
DisplayNum(3,Num3); delay(ScanTime);
DisplayNum(4,Num4); delay(ScanTime);
DisplayNum(5,Num5); delay(ScanTime);
}
delay(Time % ScanTime);
}
void printLocalTime()
{
struct tm timeinfo;
if(!getLocalTime(&timeinfo))
{
Serial.println("Failed to obtain time");
return;
}
int num0 = timeinfo.tm_hour / 10;
int num1 = timeinfo.tm_hour % 10;
int num2 = timeinfo.tm_min / 10;
int num3 = timeinfo.tm_min % 10;
int num4 = timeinfo.tm_sec / 10;
int num5 = timeinfo.tm_sec % 10;
Display(num0, num1, num2, num3, num4, num5, 1000);
}
bool Button = true;
void task1(void *pvParameters)
{
while(true)
{
// if(digitalRead(4))
// {
// Button = !Button;
// }
// Serial.println(Button);
vTaskDelay(8000 / portTICK_PERIOD_MS);
}
}
// void task2(void *pvParameters)
// {
// while(true)
// {
// if(Button == 1)
// {
// printLocalTime();
// }
// else if(Button == 0)
// {
// Display(0, 0, 0, 0, 0, 0, 1000);
// }
// }
// }
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());
Serial.print("WiFi RSSI: ");
Serial.println(WiFi.RSSI());
// Init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
// Pin_Init
for(int i=0; i<6; i++)
{
pinMode(DigitalPin[i], OUTPUT);
digitalWrite(DigitalPin[i], DigOff);
}
for(int i=0; i<8; i++)
{
pinMode(Segment[i], OUTPUT);
digitalWrite(Segment[i], dark);
}
pinMode(4, INPUT);
pinMode(15, OUTPUT);
digitalWrite(15, HIGH);
xTaskCreate(task1, "task1", 2048, NULL, 5, NULL);
//xTaskCreate(task2, "task2", 1024, NULL, 5, NULL);
vTaskStartScheduler();
Serial.println("Start tasks");
}
int i=0;
void loop()
{
delay(10000);
// if(Button == 1)
// {
// printLocalTime();
// }
// else if(Button == 0)
// {
// Display(0, 1, 2, 3, 4, 5, 1000);
// }
}