cc2640|cc2640 基于官方从机修改的通过手机实现蓝牙点灯例程

在TI官方从机例程中的simpleBLEPeripheral.c进行代码修改。




添加引脚驱动头文件:



#include //PIN driver



添加全局变量:

static PIN_Handle ledhandle=NULL;





在从机任务函数中添加 led on之后的代码。这里的代码是进行led灯初始化,四灯全亮。

static void SimpleBLEPeripheral_taskFxn(UArg a0, UArg a1)
{
// Initialize application
SimpleBLEPeripheral_init();


//led on
PIN_State ledstate={0};

PIN_Config ledconfig[]=
{

Board_LED1| PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH| PIN_PUSHPULL | PIN_DRVSTR_MAX,/* LED initially off*/
Board_LED2| PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH| PIN_PUSHPULL | PIN_DRVSTR_MAX,/* LED initially off*/
Board_LED3| PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH| PIN_PUSHPULL | PIN_DRVSTR_MAX,/* LED initially off*/
Board_LED4| PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH| PIN_PUSHPULL | PIN_DRVSTR_MAX,/* LED initially off*/

};

ledhandle=PIN_open(&ledstate, ledconfig);
// Application main loop
for (; ; )
{

................




如果只是硬件点灯,不需要手机进行控制,则不需要定义 ledhandle 这个变量。






其实在main函数第一行就有引脚的初始化定义:

Void main()
{
PIN_init(BoardGpioInitTable);

我们跳到这个Table里,可以看到配置如下,上面的配置代码可以复制这里,也可以直接使用这个数组进行配置。

PIN_Config BoardGpioInitTable[] = {

Board_LED1| PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW| PIN_PUSHPULL | PIN_DRVSTR_MAX,/* LED initially off*/
Board_LED2| PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW| PIN_PUSHPULL | PIN_DRVSTR_MAX,/* LED initially off*/
Board_LED3| PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW| PIN_PUSHPULL | PIN_DRVSTR_MAX,/* LED initially off*/
Board_LED4| PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW| PIN_PUSHPULL | PIN_DRVSTR_MAX,/* LED initially off*/
Board_KEY_SELECT | PIN_INPUT_EN| PIN_PULLUP | PIN_HYSTERESIS,/* Button is active low*/
Board_KEY_DOWN| PIN_INPUT_EN| PIN_PULLUP | PIN_HYSTERESIS,/* Button is active low*/
Board_UART_TX| PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH| PIN_PUSHPULL,/* UART TX pin at inactive level */
PIN_TERMINATE/* Terminate list*/
};



配置到这里,烧录到开发板之后,四灯全亮,但只是硬件点亮,还不能进行手机控制。






下面修改与手机通信的代码。
原理:GATT(通用属性规范)负责设备之间的通信,它有五个属性。这里通过手机端的BLE READER app修改CHAR1值 达到控制led灯亮灭。




在 SimpleBLEPeripheral_processCharValueChangeEvt 函数中添加红色高亮代码:


static void SimpleBLEPeripheral_processCharValueChangeEvt(uint8_t paramID)
{
#ifndef FEATURE_OAD
uint8_t newValue;

switch(paramID)
{
case SIMPLEPROFILE_CHAR1:
SimpleProfile_GetParameter(SIMPLEPROFILE_CHAR1, &newValue);

LCD_WRITE_STRING_VALUE("Char 1:", (uint16_t)newValue, 10, LCD_PAGE4);
{
if(newValue=https://www.it610.com/article/=2)
{
PIN_setOutputValue(ledhandle,Board_LED1, Board_LED_OFF);

}
else
{ PIN_setOutputValue(ledhandle,Board_LED1, Board_LED_ON); }

}
break;





到此为止,代码修改就结束了。


BLE READER 操作:点击相应蓝牙名连接之后,依次点击Beacon、Proximity,出现char读写界面。按上面的代码,写入2关闭led1,其余合法数字打开led1.

cc2640|cc2640 基于官方从机修改的通过手机实现蓝牙点灯例程
文章图片
cc2640|cc2640 基于官方从机修改的通过手机实现蓝牙点灯例程
文章图片

cc2640|cc2640 基于官方从机修改的通过手机实现蓝牙点灯例程
文章图片





参考TI developer‘sguide page62 and page 88.

【cc2640|cc2640 基于官方从机修改的通过手机实现蓝牙点灯例程】

    推荐阅读