[原创] 第七篇【sensorTile】 Android APP小灯玩起来

常见泽1   2017-4-18 00:06 楼主
第七篇 Android APP小灯玩起来
  • Android APP玩小灯的准备工作
(1)Android Studio入门操作,第六篇已讲过 (2)SensorTile下载en.BLUEMICROSYSTEM1的固件,BLUEMS2感兴趣的可以看下对应的代码,试过不支持 (3)ST官方SDK源码 (4)参考李哥的帖子https://bbs.eeworld.com.cn/thread-503351-1-3.html 2.Android Studio改起来做个简单的入门的控制LED
(1)添加按钮和线性布局、文本
2Q== (2)创建一个Button Text对象, onCreate() 方法中给button指定id private Button button_click; TextView textView; onCreate() 方法中给button指定id button_click = (Button)findViewById(R.id.Btn_LED);
(3)添加响应函数BtnClick()
9k= 对于FeatureSwitch我开始也不太了解 SDK函数手册 9k= 点击FeatureSwitch 可以看到类的介绍和里面的一些方法 2Q== 这里我们用到的是getSwitchStatuschangeSwitchStatus 函数的作用就是英文字面的意思,一个是获取状态一个是改变LED状态 9k= Z 9k=
最后加上显示按键的次数
String str = "---->" + count;textView.setText(str);count++;
3.运行结果 QQ图片20170408165003.gif
本帖最后由 常见泽1 于 2017-4-18 08:05 编辑

回复评论 (4)

(2) SensorTile下载en.BLUEMICROSYSTEM1的固件,BLUEMS2感兴趣的可以看下对应的代码,试过不支持 ==> 你这里说的BLUEMS2是指的BlueMicrosystem2对吧?所谓“不支持”是对于Sensortile上指示灯开关控制的部分么?
点赞  2017-4-18 08:52
引用: alberthink 发表于 2017-4-18 08:52
(2) SensorTile下载en.BLUEMICROSYSTEM1的固件,BLUEMS2感兴趣的可以看下对应的代码,试过不支持 ==> 你这 ...

是的  其他没试过 LED试过
点赞  2017-4-18 09:02
引用: 常见泽1 发表于 2017-4-18 09:02
是的  其他没试过 LED试过

我觉得这个区别来源于FIRMWARE中间sensor_service.c中的LED蓝牙属性的添加、LED_UPDATE()函数回报LED状态以及LedOnTargetPlatform()/LedOffTargetPlatform()来控制SensorTile小灯的点亮和关闭。
  1. ///line 847-852

  2.   COPY_LED_W2ST_CHAR_UUID(uuid);
  3.   ret =  aci_gatt_add_char(HWServW2STHandle, UUID_TYPE_128, uuid, 2+1,
  4.                            CHAR_PROP_NOTIFY | CHAR_PROP_READ,
  5.                            ATTR_PERMISSION_NONE,
  6.                            GATT_NOTIFY_READ_REQ_AND_WAIT_FOR_APPL_RESP,
  7.                            16, 0, &LedCharHandle);
  8. ///这段代码先把LED的CHAR_UUID通过aci_gatt_add_char添加到蓝牙服务中。这个特性是NOTIFY和READ。这样就可以把LED状态NOTIFY给上位机同时也能通过READ读取上位机的LED的指令。

  9. ///line 991-2012
  10. tBleStatus LED_Update(uint8_t LedStatus)
  11. {
  12.   tBleStatus ret;

  13.   uint8_t buff[2+1];

  14.   STORE_LE_16(buff  ,(HAL_GetTick()>>3));
  15.   buff[2] = LedStatus;

  16.   ret = aci_gatt_update_char_value(HWServW2STHandle, LedCharHandle, 0, 2+1,buff);

  17.   if (ret != BLE_STATUS_SUCCESS){
  18.     if(W2ST_CHECK_CONNECTION(W2ST_CONNECT_STD_ERR)){
  19.       BytesToWrite = sprintf((char *)BufferToWrite, "Error Updating LED Char\r\n");
  20.       Stderr_Update(BufferToWrite,BytesToWrite);
  21.     } else {
  22.       OSX_BMS_PRINTF("Error Updating Temp Char\r\n");
  23.     }
  24.     return BLE_STATUS_ERROR;
  25.   }
  26.   return BLE_STATUS_SUCCESS;
  27. }

  28. ///这个LED_UPDATE()函数将LED的状态通过aci_gatt_char_value返回给上位机。

  29. ///line2310-2334
  30.     case FEATURE_MASK_LED:
  31.       /* Led events */
  32. #ifdef OSX_BMS_DEBUG_CONNECTION
  33.       if(W2ST_CHECK_CONNECTION(W2ST_CONNECT_STD_TERM)) {
  34.         BytesToWrite = sprintf((char *)BufferToWrite,"Conf Sig F=%lx C=%2x\n\r",FeatureMask,Command);
  35.         Term_Update(BufferToWrite,BytesToWrite);
  36.       } else {
  37.         OSX_BMS_PRINTF("Conf Sig F=%lx C=%2x\r\n",FeatureMask,Command);
  38.       }
  39. #endif /* OSX_BMS_DEBUG_CONNECTION */
  40.      switch(Command) {
  41.       case 1:
  42.         LedOnTargetPlatform();
  43.         Config_Notify(FEATURE_MASK_LED,Command,Data);
  44.         break;
  45.       case 0:
  46.         LedOffTargetPlatform();
  47.         Config_Notify(FEATURE_MASK_LED,Command,Data);
  48.         break;
  49.      }
  50.      /* Update the LED feature */
  51.      if(W2ST_CHECK_CONNECTION(W2ST_CONNECT_LED)) {
  52.        LED_Update(TargetBoardFeatures.LedStatus);
  53.      }
  54.     break;

  55. ///这里是通过LedOffTargetPlatform()和LedOnTargetPlatform()来关闭或者点亮SensorTile上的LED的。



如果你希望在BlueMicrosystem2的基础上加入LED控制的部分,可以尝试添加上面的蓝牙属性/LED_Update函数来实现LED控制和状态的汇报。

供您参考。



点赞  2017-4-18 09:47

5楼 nmg 

引用: alberthink 发表于 2017-4-18 09:47
我觉得这个区别来源于FIRMWARE中间sensor_service.c中的LED蓝牙属性的添加、LED_UPDATE()函数回报LED状 ...

建议嵌入代码的时候,使用编辑器的代码嵌入功能,显示效果会更好些。图标所在位置如图所示。
1.png
点赞  2017-4-19 07:35
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复