<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                * 導師**視頻**講解:[**去聽課**](https://www.bilibili.com/video/BV1k34y1D7Vz/) >[success] **技術支持說明:** >**1**.一般以自主學習為主 > **2**.可到官方問答社區中提問:[**去提問**](https://bbs.csdn.net/forums/zigbee) > **3**.工程師**會盡快**解答社區問題,但他們是一線開發,【**難以保證**】解答時效,解答辛苦,感謝理解! <br/> 設備簡單描述符: ![](https://img.kancloud.cn/12/7e/127e6cfaf9892adfdeec83da323f39d4_688x426.png =600x) ### ZHA Lighting的工程結構和我們先前的智能插座工程是一模一樣的: ![](https://img.kancloud.cn/52/8f/528f647f4bf463ece44eaafa04e5aa96_362x176.png =300x) ### 首先添加協調器建立網絡、設備加入網絡程序(加入失敗會啟動定時事件重新嘗試加入): ![](https://img.kancloud.cn/4a/d3/4ad3cc1c79de1cea768cb338a85f9246_816x288.png =600x) ### ## \*\* **ZCL General命令處理函數** 查看ZCL的“General”命令處理函數列表: ![](https://img.kancloud.cn/21/c8/21c8992b2e0c9a2c76180426b013945b_830x540.png =600x) ### 其中最重要的函數是zclSampleLight\_LevelControlMoveToLevelCB,當我們通過ZCL發送調節燈的亮度命令到該設備時,就會進入這個函數。該函數的處理流程如下: ### >[info] zclSampleLight\_LevelControlMoveToLevelCB > \--> 調用函數:zclSampleLight\_MoveBasedOnTime > \--> 啟動事件:SAMPLELIGHT\_LEVEL\_CTRL\_EVT > \--> 事件處理函數中調用:zclSampleLight\_AdjustLightLevel ### 也就是說最后會進入函數zclSampleLight\_AdjustLightLevel中,上面幾個函數的調用以及內容最終是為了調節燈亮度;可能大家會問,調節亮度直接調用一個API不就完事了么,為什么要這么多步驟?這是因為ZCL支持對亮度的分時調節,比如說用2秒時間從亮度100%調節到1%,這樣的優點是提高了用戶體驗,給人一種漸變的溫馨效果,這個分時時長是可以設置的,但是最小單位是100毫秒,比如2秒就是20個100毫秒。 ### 亮度調節的邏輯協議棧已經幫我們做好了,但是并沒有提供燈的驅動程序,所以我們只需編寫燈的驅動程序,然后在調節亮度函數中進行調用就可以。燈的驅動程序(筆者隨手寫的程序,不是很嚴謹,僅做參考無法商用): ![](https://img.kancloud.cn/e8/cc/e8cc7a9041d75f2ebf9fe1766069be90_294x332.png =200x) ### 驅動程序提供幾個API: ![](https://img.kancloud.cn/a3/72/a3724346857c51068418c03111703a89_738x210.png =600x) ### API參數說明: * type - 提供兩種模式:On/Off、Dimmable,也就是燈可以被配置為只支持開關的On/Off Lighting,或者支持調亮度的Dimmable Lighting * gpio - 燈的硬件連接,我們可以在P1\_4上連接了一個LED燈用于調光用,也可以用板載P0\_4的LED來進行On/Off操作。 ### 其中函數hwLight\_SetLevel是用來設置LED的亮度的,該函數來自基礎篇的定時器PWM輸出調光章節的內容,程序比較簡單不做展開。 ### 使用這個驅動程序首先需要初始化: 文件:hal\_drivers.c \--> 函數:HalDriverInit \--> 最后的地方調用: ``` hwLight_Init( HW_LIGHT_TYPE_ONOFF, HW_LIGHT_GPIO_P04 ); //hwLight_Init( HW_LIGHT_TYPE_DIMMABLE, HW_LIGHT_GPIO_P14 ); ``` ### 然后我們只需要在上文提到的zclSampleLight\_AdjustLightLevel這個函數中調用hwLight\_SetLevel就可以了: ### 文件:zcl\_samplelight.c \--> 函數:zclSampleLight\_AdjustLightLevel \--> 最后調用(協調器不調用):hwLight\_SetLevel ### 如果是P0\_4,那么我們判斷亮度值是否小于 254 / 2,如果是那么關燈,否則開燈;到這里,燈調節亮度的邏輯就完成了!!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看