在线时间246 小时
UID252169
ST金币0
蝴蝶豆121
注册时间2016-10-24
版主
- 最后登录
- 2020-7-12
|
a0a.1 32b0c
打开PinNames.h文档,可以看到板载3个LED分别接在PB_0,PB_7,PB_14上,按照Arduino定义,分别为LED1,LED2,LED3,因此控制这3个LED用Arduino定义也可以用PB_x的定义。按照Arduino的定义,双2.54插座上有:4路LED[其中一路接在串口上],1个用户按键,2线UART,4线串口,6路PWM,其中的UART是走的USB串口。这些IO口已经可以完成许多实验了。为了防止实验出问题,我们进入项目文件夹,复制一个main.cpp->mainLed.cpp,打开后一个文件进行操作。见图41。
打开后的文件:
#include "mbed.h"
DigitalOut led1(LED1);
// main() runs in its own thread in the OS
// (note the calls to Thread::wait below for delays)
int main() {
while (true) {
led1 = !led1;
Thread::wait(500);
}
}
很简单,控制1个LED延时500[不知道是多长,运行后好像是0.5秒]开或关一下。wait等效mS的延时单位。为了更好地理解和掌握GPIO的设置和应用,我们开始以下几个工作:打开PinNames.h和DigitalOut.h两个文档。前一个文档在三中医有较为详细的描述,此处仅仅拿来主义,而打开DigitalOut.h文档可以看到前边注释和定义之后就有一个例子,代码拷贝如下:
* Example: //例子开始
* @code //代码
* // Toggle a LED //注释
* #include "mbed.h" //必须有连接mbed.h函数
*
DigitalOut led(LED1);//对象声明,名称为led(属性为LED1)
* int main() { //整形主函数main
* while(1) { //死循环
* led = !led; //led取反——原来led=1,运算后led=0
* wait(0.2); //等待0.2秒——浮点数
* }
* }
* @endcode
比较原来的函数while不同、wait不同,这样就学会了两种描述方法。而Thread::wait(500);是C++中调用线程的写法,很有意思。不理解wait(0.2)与Thread::wait(500)他们有多大区别?以后采用wait(0.2)的写法少敲不少代码。
下边我们改一下程序,让3个LED交替闪烁:
#include "mbed.h"
//Define GPIOs
DigitalOut led1(PB_0);DigitalOut led2(PB_7);DigitalOut led3(PB_14);
//IO Initial
void ioInit(void){led1=0;led2=1;led1=0;}
// main() runs in its own thread in the OS// (note the calls to Thread::wait below for delays)
int main() {
ioInit();
while (true) {
led1=!led1;led2=!led2;led3=!led3;
wait(0.1f);
}
}
想法是定义3个Lled1~led3;先定义led1,led3亮,Lled2不亮,这样在循环体中就形成交替闪亮,下载后运行结果确实如此。见图42。
|
|