在使用Arduino的时候,我们会使用Ms
timer或者FlexiTimer做为定时器,进行定时任务处理。但是在HTCC-AB01中,无法使用MsTimer或者FlexiTimer,因为不是AVR的处理器。好在CubeCell已经为我们提供了一个好用的定时器,可以方便的使用。
在CubeCell中,使用一个定时器,需要使用到如下的函数:
TimerInit(&timerHandler, actionHandler): 初始化一个定时器,以及触发时调用的函数
TimerSetValue( &timerHandler, timedelay ): 设置定时器的定时时间
TimerStart( &timerHandler ): 启动定时器
注意:定时器为一次使用,如果需要重复使用,可以再次启动这个定时器
- #include "LoRaWan_APP.h"
- #define timetillled 2000
- static TimerEvent_t timer_led_on;
- void onLED_on()
- {
- uint32_t color=(10)<<16|(0)<<8|(0);
- turnOnRGB(color,500);
- turnOnRGB(0,500);
- TimerStart( &timer_led_on );
- }
- void setup() {
- TimerInit( &timer_led_on, onLED_on );
- TimerSetValue( &timer_led_on, timetillled );
- TimerStart(&timer_led_on);
- }
- void loop() {
- }
复制代码
在上面代码中,我们还引用了LoRaWan_APP.h中定义的turnOnRGB()来控制三色LED。
上述代码,通过点亮红色,然后延时500ms,在熄灭红色,然后再延时500ms,然后在启动定时器2000ms后调用处理函数,实现LED的亮灭交替。
同样的,我们还可以通过两个定时器,来实现LED的亮灭交替。
这一次的实例,我们让红绿交替显示:
- #include "LoRaWan_APP.h"
- #define timetillled 1000
- static TimerEvent_t timer_led_on;
- static TimerEvent_t timer_led_off;
- void onLED_on()
- {
- uint32_t color=(10)<<16|(0)<<8|(0);
- turnOnRGB(color,0);
-
- TimerStart( &timer_led_off );
- }
- void onLED_off()
- {
- uint32_t color=(0)<<16|(10)<<8|(0);
- turnOnRGB(color,0);
- TimerStart( &timer_led_on );
- }
- void setup() {
- TimerInit( &timer_led_on, onLED_on );
- TimerInit( &timer_led_off, onLED_off );
- TimerSetValue( &timer_led_on, timetillled );
- TimerSetValue( &timer_led_off, timetillled );
- TimerStart( &timer_led_on );
- }
- void loop() {
- }
复制代码
在以上代码中,我们定义了两个定时器,分别来处理点亮红色和点亮绿色,并且相互启动对方,从而实现红绿灯的交替显示。
最后,课后习题来了:
1. 如何通过定时器,来实现呼吸灯效果?
0