完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
简介
上一讲记录了学习多位数码管的显示,这次把它做成一个网络时钟吧 效果 NTPCLient 8266可以联网的啊,那从网络获取时间呗 项目-加载库-管理库,安装NTPClient库,然后打开 文件-示例-NTPClient-Advance #include #include #include const char *ssid = "wifi名称"; const char *password = "wifi密码"; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 60000); void setup(){ Serial.begin(115200); WiFi.begin(ssid, password); while ( WiFi.status() != WL_CONNECTED ) { delay ( 500 ); Serial.print ( "." ); } timeClient.begin(); timeClient.setTimeOffset(8*60*60); } void loop() { timeClient.update(); Serial.println(timeClient.getFormattedTime()); delay(1000); } 上传之后连接热点你会发现,串口显示出的时间和现在的有误差???还不是几分钟,而是几个小时。 把setup上面的服务器换成国区的也不行哇 NTPClient timeClient(ntpUDP, "cn.pool.ntp.org", 3600, 60000); 时间修正 那怎么办呢????其实作者早就想好了,假设我的时间比串口打印出来的时间快了八小时,只要在setup中设置一下误差偏移量就好了 void setup(){ Serial.begin(115200); WiFi.begin(ssid, password); while ( WiFi.status() != WL_CONNECTED ) { delay ( 500 ) Serial.print ( "." ); } timeClient.setTimeOffset(8*60*60); //单位为秒,误差八小时 timeClient.begin(); } 数码管 既然能获取时间了,那肯定要将时间显示在数码管上哇,我这里只有两个好的数码管,就只显示分钟数啦 /* * 两位共阳数码管显示时间 * 2、3端口接3.3V,a~g各端口为负逻辑,0低电平为亮,1为灭 */ #include #include #include const char *ssid = "Kearney"; const char *password = "shuaisile"; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 60000); int a= D10; int b= D0; int c= D7; int d= D6; int e= D5; int f= D2; int g= D1; int delayTime = 10; //延迟时间ms int led1 = D4; //GPIO2 int led2 = D9; //GPIO3,最低点位还是0.3V,不过测试后发现能控制LED int light[10][8] = { //a b c d e f g dp {0, 0, 0, 0, 0, 0, 1, 1}, {1, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 1, 0, 0, 1, 0, 1}, {0, 0, 0, 0, 1, 1, 0, 1}, {1, 0, 0, 1, 1, 0, 0, 1}, {0, 1, 0, 0, 1, 0, 0, 1}, {0, 1, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 0, 1, 0, 0, 1}, }; void lightControl(int i){ //i只能取0~9 digitalWrite(a,light[0]); digitalWrite(b,light[1]); digitalWrite(c,light[2]); digitalWrite(d,light[3]); digitalWrite(e,light[4]); digitalWrite(f,light[5]); digitalWrite(g,light[6]); delay(delayTime); //不延时也是可以的,但是变化比较快 } void digitalControl(int A,int B){ static int i = 0; //没有static就一直是0 if(i%2==0) { digitalWrite(led1,1); digitalWrite(led2,0); lightControl(A); } else { digitalWrite(led1,0); digitalWrite(led2,1); lightControl(B); } i++; i = i %2; } void setup() { pinMode(a,OUTPUT); pinMode(b,OUTPUT); pinMode(c,OUTPUT); pinMode(d,OUTPUT); pinMode(e,OUTPUT); pinMode(f,OUTPUT); pinMode(g,OUTPUT); pinMode(led1,OUTPUT); pinMode(led2,OUTPUT); WiFi.begin(ssid, password); while ( WiFi.status() != WL_CONNECTED ) { delay ( 500 ); } timeClient.begin(); timeClient.setTimeOffset(8*60*60); } static int minu = 0; void loop() { timeClient.update(); minu = timeClient.getMinutes(); digitalControl(minu/10,minu%10); } 其实两位数码管也是可以显示时分秒的,点赞留言私信再说,今天写类了。。 |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
2845 浏览 0 评论
3353 浏览 9 评论
3030 浏览 16 评论
3526 浏览 1 评论
9135 浏览 16 评论
1261浏览 3评论
651浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
639浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2387浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1952浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-4 03:02 , Processed in 1.607241 second(s), Total 80, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号