Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 如何用TM1637和冒号实现每秒闪烁的时钟?_Arduino_Arduino C++ - Fatal编程技术网

Arduino 如何用TM1637和冒号实现每秒闪烁的时钟?

Arduino 如何用TM1637和冒号实现每秒闪烁的时钟?,arduino,arduino-c++,Arduino,Arduino C++,我想实现一个带有ESP-32和TM1637 4位显示器的时钟。我现在的代码运行得很好,但当时钟到达23:00时,仍然显示一小时22。当我让时钟运行到24点钟时,显示屏上所有的部分都亮了 这是我的密码: /。。。 字符串时间戳; 无符号长时间NOW=0; 无符号长timeLast=0; 整小时; 整数分钟; 整数秒; int值=1244; uint8_t colonOn=0x80 | display.encodeDigit((值/100)%10); uint8_t colonOff=0x00 |

我想实现一个带有ESP-32和TM1637 4位显示器的时钟。我现在的代码运行得很好,但当时钟到达23:00时,仍然显示一小时22。当我让时钟运行到24点钟时,显示屏上所有的部分都亮了

这是我的密码:

/。。。
字符串时间戳;
无符号长时间NOW=0;
无符号长timeLast=0;
整小时;
整数分钟;
整数秒;
int值=1244;
uint8_t colonOn=0x80 | display.encodeDigit((值/100)%10);
uint8_t colonOff=0x00 | display.encodeDigit((值/100)%10);
//...
显示正确性(8);
uint8_t数据[]={0xff,0xff,0xff,0xff};
显示.设置段(数据);
这是我的循环函数: 首先是一些设置

void循环()
{
timeNow=millis()/1000;
秒=timeNow-timeLast;
如果((timeNow%2)==0){
display.setSegments(&colonOn,1,1);//打开冒号
}否则{
display.setSegments(&colonOff,1,1);//关闭冒号
}
如果(秒==60){
timeLast=timeNow;
分钟+=1;
display.showNumberDec(分钟、真、2、2);
}
如果(分钟==60){
分钟=0;
小时数+=1;
display.showNumberDec(分钟、真、2、2);
display.showNumberDec(小时,真,2,0);
}
如果(小时==24){
小时=0;
resetFunc();//调用resetFunction使微控制器重新启动
}
延迟(990);
}
我发现,使用以下代码设置冒号会实现此问题:
display.setSegments(&colonOn,1,1)

如果没有这条线,时钟可能会工作,但是冒号并不是每秒都出现

您需要一个真正的计时器中断并退出轮询毫秒()。这是基本的东西。此外,除非您使用的是外部振荡器,否则如果您想要任何精度,您需要使用示波器校准计时器。阅读说明书——它不是那么精确,而且随温度变化很大。请阅读部件的数据表。如果您可以阅读此内容,它可以帮助您:您需要一个真正的计时器中断并退出轮询毫秒()。这是基本的东西。此外,除非您使用的是外部振荡器,否则如果您想要任何精度,您需要使用示波器校准计时器。阅读说明书——它不是那么精确,而且随温度变化很大。请阅读该零件的数据表。如果您可以阅读该数据表,则可以帮助您: