|
小白偶得的ESP12E,加了一个TM16374位数码管,想做个WIFI时钟,于是就在网上找了大量的例程,终于找到一个可以用的,但是,发现一个问题,就是小时为两位数时显是正常,一位时(1-9点)就不正常了,如7:25显示为7250,是不是补0位补错了,请大神指点一下该修改哪里,跪谢了!
这是代码,如有侵权,回复马上删。
//8266NODEMCU 连接TM1637四位数码管,从NTP服务器获取时间并显示
// TM1637 8266 NODEMCU
// CLK IO12
// DIO IO14
#include <NTPClient.h>
// change next line to use with another board/shield
#include <ESP8266WiFi.h>
//#include <WiFi.h> // for WiFi shield
//#include <WiFi101.h> // for WiFi 101 shield or MKR1000
#include <WiFiUdp.h>
#include <TM1637TinyDisplay.h>
// Define Digital Pins
#define CLK 12
#define DIO 14
// Initialize TM1637TinyDisplay
TM1637TinyDisplay display(CLK, DIO);
const char *ssid = "suchongap";
const char *password = "suchongshiye";
int i=59;
WiFiUDP ntpUDP;
//NTPClient timeClient(ntpUDP);
NTPClient timeClient(ntpUDP, "ntp1.aliyun.com",60*60*8, 30*60*1000);
void setup(){
Serial.begin(115200);
WiFi.begin(ssid, password);
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
}
display.setBrightness(BRIGHT_7);
timeClient.begin();
}
String time1="";
void loop() {
// timeClient.update();
if((i+1)%60==0){
Serial.println("ok");
timeClient.update();
time1=timeClient.getFormattedTime();
i=getValue(time1,':',2).toInt();
}
// Serial.println(timeClient.getFormattedTime());
Serial.println(i);
Serial.println(time1);
String part01 = getValue(time1,':',0);
String part02 = getValue(time1,':',1);
float timenumb=part01.toFloat()+part02.toFloat()/100.0;
if(i%2==0){
display.showNumber(timenumb);}
else{display.showNumber(timenumb*100);}
i++;
delay(1000);
}
// 使用指定字符 切割字符串
String getValue(String data, char separator, int index)
{
int found = 0;
int strIndex[] = {0, -1};
int maxIndex = data.length()-1;
for(int i=0; i<=maxIndex && found<=index; i++){
if(data.charAt(i)==separator || i==maxIndex){
found++;
strIndex[0] = strIndex[1]+1;
strIndex[1] = (i == maxIndex) ? i+1 : i;
}
}
return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}
|
|