党国特派员 发表于 2015-11-25 23:38:35

【NUCLEO-L476RG开发】mbed时钟系统2

本帖最后由 党国特派员 于 2015-11-25 23:38 编辑

接上次,今天学习下mbed下的时钟系统之TimeOut和Ticker,今天要用到4个LED,因为开发板上只有一个,所以需要自己再添加3个LED
mbed Timeout的应用

mbed的Timeout对象主要用来在给定的时间后执行给定的函数,如下面的测试代码,运行后你会发现NUCLEO-L476RG的四个led分别点亮,由于timeout只会被执行一次,所以点亮后会保持不变:
#include "mbed.h"

#define LED2 PA_0
#define LED3 PA_1
#define LED4 PA_4
//定义LED
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);

//定义TIMER
Timeout timer_led1;
Timeout timer_led2;
Timeout timer_led3;
Timeout timer_led4;

void led1flip()
{
    led1=!led1;
}

void led2flip()
{
    led2=!led2;
}

void led3flip()
{
    led3=!led3;
}

void led4flip()
{
    led4=!led4;
}

int main() {
   
    timer_led1.attach(&led1flip,0.5);

    timer_led2.attach(&led2flip,0.5*2);

    timer_led3.attach(&led3flip,0.5*3);

    timer_led4.attach(&led4flip,0.5*4);

    while (1);
}

mbed Ticker的应用

mbed的Ticker对象主要用来执行各类需要定期执行的函数,它和Timeout的唯一不同就是Timeout相关的函数只会被执行一次,而Ticker相关的则会被定期执行,如下面的测试代码,运行后你会发现xbed LPC1768的四个led将按照不同的频率变换:

#include "mbed.h"

#define LED2 PA_0
#define LED3 PA_1
#define LED4 PA_4
//定义LED
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);

//定义TIMER
Ticker timer_led1;
Ticker timer_led2;
Ticker timer_led3;
Ticker timer_led4;

void led1flip()
{
    led1=!led1;
}

void led2flip()
{
    led2=!led2;
}

void led3flip()
{
    led3=!led3;
}

void led4flip()
{
    led4=!led4;
}

int main() {
   
    timer_led1.attach(&led1flip,0.5);

    timer_led2.attach(&led2flip,0.5*2);

    timer_led3.attach(&led3flip,0.5*3);

    timer_led4.attach(&led4flip,0.5*4);

    while (1);
}

我们在使用Ticker对象的过程中还可以随时对Ticker设定的间隔进行更改,更改后的时间是即时生效的,如下面的代码,我们发现,用户每按一次按钮,led1的闪烁频率就会加快一倍。

#include "mbed.h"

#define LED2 PA_0
#define LED3 PA_1
#define LED4 PA_4

DigitalOut led1(LED1);
InterruptIn btn(USER_BUTTON);
Ticker timer_led1;
float interval;

void led1flip()
{
    led1=!led1;
}

void changefred()
{
    interval=interval /2.0;
    timer_led1.attach(&led1flip,interval);
}

int main() {

    interval=2;

    btn.fall(&changefred);

    timer_led1.attach(&led1flip,interval);

    while (1);
}TimeOut应用:

Ticker应用:


watershade 发表于 2015-11-26 00:23:15

mbed比arduino强大多了

slotg 发表于 2015-11-26 10:49:27

很不错,感谢分享。

安臣 发表于 2015-11-26 11:38:59

很不错

wu1169668869 发表于 2015-11-26 12:14:24

比较好奇gif用什么软件做的

风子 发表于 2015-11-26 12:49:47

感谢楼主,学到不少东西

wambob 发表于 2015-11-26 15:38:23

谢谢分享            

党国特派员 发表于 2015-11-26 18:24:26

wu1169668869 发表于 2015-11-26 12:14
比较好奇gif用什么软件做的

photoshop 就可以完成。

dsjsjf 发表于 2015-11-26 20:52:02

顶一下

zwei99999999 发表于 2015-11-27 09:44:06

不错不错:):):)
页: [1] 2
查看完整版本: 【NUCLEO-L476RG开发】mbed时钟系统2