cc2540特征值查找之同时查找两个特征值

static void simpleBLEGATTDiscoveryEvent( gattMsgEvent_t *pMsg )
{ 
  
   attReadByTypeReq_t req;  
   if ( simpleBLEDiscState == BLE_DISC_STATE_SVC )   
   {    
      // Service found, store handles    
      if ( pMsg->method == ATT_FIND_BY_TYPE_VALUE_RSP &&       
       pMsg->msg.findByTypeValueRsp.numInfo > 0 )   
      {      
        simpleBLESvcStartHdl = pMsg->msg.findByTypeValueRsp.handlesInfo[0].handle;  
        simpleBLESvcEndHdl = pMsg->msg.findByTypeValueRsp.handlesInfo[0].grpEndHandle;    
       }    
  
      // If procedure complete    
      if ( ( pMsg->method == ATT_FIND_BY_TYPE_VALUE_RSP  &&           
      pMsg->hdr.status == bleProcedureComplete ) ||         
      ( pMsg->method == ATT_ERROR_RSP ) )   
      {      
        if ( simpleBLESvcStartHdl != 0 )      
        {        
          // Discover characteristic       
          simpleBLEDiscState = BLE_DISC_STATE_CHAR1;      
          req.startHandle = simpleBLESvcStartHdl;    
          req.endHandle = simpleBLESvcEndHdl;    
          req.type.len = ATT_BT_UUID_SIZE;
          req.type.uuid[0] = LO_UINT16(SIMPLEPROFILE_CHAR1_UUID);    
          req.type.uuid[1] = HI_UINT16(SIMPLEPROFILE_CHAR1_UUID);      
          GATT_ReadUsingCharUUID( simpleBLEConnHandle, &req, simpleBLETaskId );     
         }    
      }  
  }  
  
  else if ( simpleBLEDiscState == BLE_DISC_STATE_CHAR1 )  
  {    
    // Characteristic found, store handle    
     if ( pMsg->method == ATT_READ_BY_TYPE_RSP &&      
        pMsg->msg.readByTypeRsp.numPairs > 0 )
        {      
           simpleBLECharHdl[0] = BUILD_UINT16( pMsg->msg.readByTypeRsp.dataList[0],                         
           pMsg->msg.readByTypeRsp.dataList[1] );      
    
           LCD_WRITE_STRING( "CHAR 1 Found", HAL_LCD_LINE_1 );      
           simpleBLEProcedureInProgress = TRUE;      
       }
     else // pMsg->msg.readByTypeRsp.numPairs is 0.
     {
       simpleBLEDiscState = BLE_DISC_STATE_CHAR2;    
       req.startHandle = simpleBLESvcStartHdl;  
       req.endHandle = simpleBLESvcEndHdl;   
       req.type.len = ATT_BT_UUID_SIZE;    
       req.type.uuid[0] = LO_UINT16(SIMPLEPROFILE_CHAR2_UUID);   
       req.type.uuid[1] = HI_UINT16(SIMPLEPROFILE_CHAR2_UUID);    
       GATT_ReadUsingCharUUID( simpleBLEConnHandle, &req, simpleBLETaskId );  
     }
  }  
  
  else if (simpleBLEDiscState == BLE_DISC_STATE_CHAR2)  
  {     // Characteristic found, store handle    
    if ( pMsg->method == ATT_READ_BY_TYPE_RSP &&     
    pMsg->msg.readByTypeRsp.numPairs > 0 )    
    {      
      simpleBLECharHdl[1] = BUILD_UINT16( pMsg->msg.readByTypeRsp.dataList[0],                                      
      pMsg->msg.readByTypeRsp.dataList[1] );     
      LCD_WRITE_STRING( "CHAR 2 Found", HAL_LCD_LINE_2 );      
      simpleBLEProcedureInProgress = FALSE;  
    }    
    simpleBLEDiscState = BLE_DISC_STATE_IDLE;
  }

}

### 使用Matlab Simulink模拟温度传感器读取电路 #### 电路工作原理 温度传感器通常通过感知周围环境的热变化来改变其电阻值或其他电气特性。常见的温度传感器有NTC(负温度系数)热敏电阻、PT100铂电阻等。当温度升高时,NTC热敏电阻的阻值会减小;反之则增大。为了将这种阻值的变化转换成可以测量的电压信号,常采用分压电路。 假设使用的是一个简单的分压电路,其中包含一个固定电阻R1和一个可变电阻RT(即温度敏感元件)。电源提供恒定电压Vcc,在两个电阻之间连接一点作为输出端Vo,则该点处的电压随温度而变化: \[ V_o = \frac{R_T}{R_1 + R_T} * V_{cc} \] 此表达式表明随着温度T影响下的\( R_T \),输出电压也会相应地发生变化[^1]。 #### Matlab Simulink中的实现方法 在Simulink环境下构建上述模型非常直观。以下是具体操作指南: 创建新的空白项目并打开Library Browser窗口查找所需模块组件。对于本案例来说,主要需要用到以下几个部分: - **Simscape Electrical库**内的Resistor用于表示固定的R1以及Variable Resistor代表受控于温度参数的RT; - 来自Sources分类下DC Voltage Source设置为给整个回路供电源Vcc; - Simscape Foundation Library里的Thermal -> Thermal Sensors文件夹中有Temperature Sensor可以直接拿来表征实际物理量与电信号间的关系; - Scope用来观察最终得到的结果曲线图象。 接下来按照如下方式搭建仿真框图: ```matlab % 创建一个新的Simulink模型 new_system('TempSensorModel'); open_system('TempSensorModel'); % 添加必要的模块到模型中 add_block('simulink/Sources/Constant', 'TempSensorModel/Voltage_Source'); % DC电源 set_param(gcb, 'Value', '5') % 设置电源电压为5伏特 add_block('simscape/electrical/Electrical Sources/Current Controlled Current Source',... 'TempSensorModel/Fixed_Resistor'); % 固定电阻器 set_param(gcb,'Resistance','1e3') % 设定初始阻值为1千欧姆 add_block('simscope/foundation/thermal/Temperature Sensor',... 'TempSensorModel/Varible_Resistor'); % 可变量电阻(温度传感) set_param(gcb,'Useconstantvalue','off') set_param(gcb,'Tabledata',[273.15:373.15; logspace(-2,-1,101)]) % 定义温度范围及其对应的电阻值 add_block('simulink/Sinks/Scope', 'TempSensorModel/Output_Voltage_Monitor'); % 输出监视仪 % 连接各个部件形成完整的电路结构... connect_blocks({'Voltage_Source/+', ... {'Fixed_Resistor/+', 'Varible_Resistor/+'}}, ... 'Series connection of resistors and voltage source') connect_blocks({'Fixed_Resistor/-', ... 'Varible_Resistor/-'},... 'Ground terminal') connect_branches({'Voltage at junction between two resistors' }, ... 'Input to scope for monitoring output voltage') ``` 完成以上配置之后就可以运行仿真实验了。调整不同条件比如不同的温度输入查看相应的响应情况,并利用内置函数进一步分析所得数据特征。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值