刚学习了NTPClient获取网络时间,借鉴别人的方法加以修改,本人这次采用38译码器用数码管显示时间
/**
* @file main.cpp
* @author your name (you@domain.com)
* @brief 获取网络时间,用数码管显示
* @version 0.1
* @date 2021-12-10
*
* @copyright Copyright (c) 2021
*
*/
#include <NTPClient.h>
#include <WiFi.h>
#include <WiFiUdp.h>
const char *ssid = "vivo S7";
const char *password = "s12345678";
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 60000);
int a= 0;
int b= 1;
int c= 2;
int d= 3;
int e= 4;
int f= 5;
int g= 6;
int dp=7;
int delayTime = 45; //延迟时间ms
int led1 = 10; //GPIO2
int led2 = 11; //GPIO3,最低点位还是0.3V,不过测试后发现能控制LED
int led3 = 12;
static int minu = 0,hours=0,sec=0;
int light[12][8] =
{
/**
* @brief 0~9,-
* 段码
*/
//a b c d e f g dp
{1, 1, 1, 1, 1, 1, 0, 0},
{0, 1, 1, 0, 0, 0, 0, 0},
{1, 1, 0, 1, 1, 0, 1, 0},
{1, 1, 1, 1, 0, 0, 1, 0},
{0, 1, 1, 0, 0, 1, 1, 0},
{1, 0, 1, 1, 0, 1, 1, 0},
{1, 0, 1, 1, 1, 1, 1, 0},
{1, 1, 1, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 1, 0},
{1, 1, 1, 1, 0, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 1, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
};
void lightControl(int i)
{
//i只能取0~10
//位码
digitalWrite(a,light[i][0]);
digitalWrite(b,light[i][1]);
digitalWrite(c,light[i][2]);
digitalWrite(d,light[i][3]);
digitalWrite(e,light[i][4]);
digitalWrite(f,light[i][5]);
digitalWrite(g,light[i][6]);
digitalWrite(dp,light[i][7]);
delayMicroseconds(delayTime); //不延时也是可以的,但是变化比较快
}
void digitalControl(int A,int B,int C)
{
int j = 0;
for(j=0;j<8;j++)
{
switch(j)
{
case 0:digitalWrite(led1,0); digitalWrite(led2,0); digitalWrite(led3,0); lightControl(A/10);break;
case 1:digitalWrite(led1,1); digitalWrite(led2,0); digitalWrite(led3,0); lightControl(A%10);break;
case 2:digitalWrite(led1,0); digitalWrite(led2,1); digitalWrite(led3,0); lightControl(10);break;
case 3:digitalWrite(led1,1); digitalWrite(led2,1); digitalWrite(led3,0); lightControl(B/10);break;
case 4:digitalWrite(led1,0); digitalWrite(led2,0); digitalWrite(led3,1); lightControl(B%10);break;
case 5:digitalWrite(led1,1); digitalWrite(led2,0); digitalWrite(led3,1); lightControl(10);break;
case 6:digitalWrite(led1,0); digitalWrite(led2,1); digitalWrite(led3,1); lightControl(C/10);break;
case 7:digitalWrite(led1,1); digitalWrite(led2,1); digitalWrite(led3,1); lightControl(C%10);break;
}
delayMicroseconds(45);
lightControl(11);//消影
}
}
void setup()
{
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(c,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);
pinMode(g,OUTPUT);
pinMode(dp,OUTPUT);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
WiFi.begin(ssid, password);
while ( WiFi.status() != WL_CONNECTED )
{
delay ( 500 );
}
timeClient.begin();
timeClient.setTimeOffset(8*60*60);
}
void loop()
{
timeClient.update();
hours=timeClient.getHours();
minu = timeClient.getMinutes();
sec=timeClient.getSeconds();
Serial.println(hours);
Serial.println(minu);
Serial.println(sec);
digitalControl(hours,minu,sec);
}
烧录后效果
若原作者对此不满请私聊删除。
转载连接:用8266学习单片机-7-数码管实现:网络时钟-NTPClient-取网络时间并用串口打印_Kearney-CSDN博客_ntpclient.h