打开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。 |
顶一下。 |