使用delay()函数有很大的缺点。因为在delay函数运行期间,程序的大多数其他的事情都会停止,等待delay函数结束。比如传感器数据的读取、数学计算或pin *** 作都无法进行。
除非Arduino程序非常简单,通常应该避免使用delay()来计时超过10毫秒的事件。
一个办法是使用轮询的机制,使用millis()函数查询时间来计时。
您可以使用Arduino的Millis()函数来实现延迟一小时的功能。该函数可以获取自开机以来经过的毫秒数,因此可以通过计算时间差来实现时间控制。以下是一个简单的示例代码:
```c++
unsigned long previousTime = 0// 上一次执行的时间
const long interval = 3600000// 延迟的时间,单位为毫秒
void setup() {
// 初始化设置
}
void loop() {
unsigned long currentTime = millis()// 获取当前时间
if (currentTime - previousTime >= interval) { // 判断时间间隔是否达到要求
previousTime = currentTime// 更新上一次执行的时间
// 执行延迟一小时后的 *** 作
}
// 此处可以添加其他的代码,不会影响时间控制
}
```
在这个示例代码中,我们定义了一个常量`interval`表示需要延迟的时间,这里设置为一小时(3600000毫秒)。通过`millis()`函数获取当前时间和上一次执行的时间,计算它们之间的时间差,如果时间差大于或等于延迟的时间,就执行需要延迟一小时后的 *** 作,然后更新上一次执行的时间。
`millis()`函数返回的时间值会在长时间运行后溢出,因此需要特殊处理。上述示例代码中没有进行该处理,如果需要进行长时间的时间控制,应当使用更加复杂的时间处理方法。
Arduino语言和C语言很类似。整个Arduino程序可以分为两个大块:setup函数和loop函数。其中setup(初始化)函数为上电时一开始就执行的函数。类似电脑的开机自启动程序,此函数仅在上电时被执行一次,此后永不执行,除非重启。此函数内的代码一般为各种元件、模块、功能的初始化函数。
而loop(循环)函数则是初始化完成后一直执行的函数。此函数其实为一个无限循环(死循环),里面的代码将被反复执行,直到断电或者重启。大部分的代码都在这个函数内。
在初始化部分中,又有一个pinMode函数,这个函数是用来规定当前管脚功能的。
语法规则:pinMode(引脚编号,模式)
其中模式主要有三种:
OUTPUT——输出
INPUT——输入
INPUT_PULLLUP——带上拉电阻的输入。对于什么是上拉电阻,以后的推送中会介绍。
在这里是规定为输出模式以点亮LED。
若你想让管脚输出或者输入高/低电平,请务必在初始化部分加上这个函数,否则会有很多意想不到的问题!
在循环部分中,有两个函数:
第一个是digitalWrite函数,这个函数是用来规定管脚的输出的。
语法规则:digitalWrite(引脚编号,模式)
其中模式有两种:
HIGH或1——高电平,输出+5V电压
LOW或0——低电平,输出0V电压
第二个是delay函数,这个函数是用来控制延时的。
语法规则:delay(时间)
时间单位为毫秒(ms),1秒等于1000毫秒。
在延迟期间内,处理器将什么也不做直到延时结束,这其实极大地浪费了处理器的性能,故我个人不推荐直接通过delay来实现延时的目的。你可以使用其他方法来替代,具体做法将在以后的推送中介绍。
这样一来,这个程序也就十分清晰明了了:
首先,规定13号引脚,也就是LED_BUILTIN,为输出模式。
然后,让其输出高电平来点亮LED并延迟一秒来维持这种状态。
再后,让其输出低电平来熄灭LED并延迟一秒来维持这种状态。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)