伊莉討論區

標題: android 藍芽led控制 [打印本頁]

作者: 黑~~    時間: 2016-1-11 02:45 PM     標題: android 藍芽led控制

我想改一個藍芽的程式
但改了很久,都只能手機和藍芽連線
無法控制led,每次按下開關他就會當機
但我都把bug改掉了,不知還有哪裡不合邏輯...
請高手指教下,謝謝
下附程式碼:
http://1drv.ms/1OWl4DU

作者: chevylin0802    時間: 2016-1-12 10:41 AM

本帖最後由 chevylin0802 於 2016-1-12 10:42 AM 編輯

你的Chat物件中所宣告的characteristicTx always is null
所以每一次呼叫characteristicTx.setValue就會當機
作者: 黑~~    時間: 2016-1-12 02:34 PM

本帖最後由 黑~~ 於 2016-1-12 02:35 PM 編輯
chevylin0802 發表於 2016-1-12 10:41 AM
你的Chat物件中所宣告的characteristicTx always is null
所以每一次呼叫characteristicTx.setValue就會當 ...

可是我有characteristicTx.setValue(message)阿
string message="S";也有設出始值阿,這樣還是不行嗎?

作者: chevylin0802    時間: 2016-1-12 03:28 PM

黑~~ 發表於 2016-1-12 02:34 PM
可是我有characteristicTx.setValue(message)阿
string message="S";也有設出始值阿,這樣還 ...

characteristicTx是物件
物件不能在null的情形下使用物件裏的函式

作者: 黑~~    時間: 2016-1-12 04:55 PM

chevylin0802 發表於 2016-1-12 03:28 PM
characteristicTx是物件
物件不能在null的情形下使用物件裏的函式

那我是不是要先設characteristicTx=0阿?
還是有其他辦法..?



作者: chevylin0802    時間: 2016-1-12 05:16 PM

黑~~ 發表於 2016-1-12 04:55 PM
那我是不是要先設characteristicTx=0阿?
還是有其他辦法..?

從實際執行上的情形來說
null跟0是一樣的事情
只是物件並不是數值
因此才把它寫成null表示空物件的意思

其實你應該可以找得到改的地方才對
因為你還有設一個characteristicRX的接口
只是它的scope並無法函括到整個物件
而在characetristicRX之上的另一個你自己設的物件
你就沒想到它是對應著你的TX的uuid嗎?

作者: 黑~~    時間: 2016-1-13 09:05 AM

chevylin0802 發表於 2016-1-12 05:16 PM
從實際執行上的情形來說
null跟0是一樣的事情
只是物件並不是數值

不好意思..還是不太懂說...
我是看到別人這樣寫,所以我也試著這樣寫,其實沒很懂意思....

                characteristicTx = gattService
                                .getCharacteristic(RBLService.UUID_BLE_SHIELD_TX);

                BluetoothGattCharacteristic characteristicRx = gattService
                                .getCharacteristic(RBLService.UUID_BLE_SHIELD_RX);
                mBluetoothLeService.setCharacteristicNotification(characteristicRx,
                                true);
                mBluetoothLeService.readCharacteristic(characteristicRx);
        請問這樣寫對嗎?還少了什麼?

  感謝指教

作者: chevylin0802    時間: 2016-1-13 11:40 AM

本帖最後由 chevylin0802 於 2016-1-13 11:52 AM 編輯
黑~~ 發表於 2016-1-13 09:05 AM
不好意思..還是不太懂說...
我是看到別人這樣寫,所以我也試著這樣寫,其實沒很懂意思....

你這樣子寫就應該可以了
只是如果你要連Rx的資料收進來看的話
你應該也要把characteristicRx放到物件範圍內宣告

低功耗藍芽是走GATT規範的
所以程序都是固定的
取得Service
取得Service下的characteristics
然後開始對各個characteristics進行讀寫
讀的方法分成兩類
一種是用readCharacteristic
另一種則是設Notification

可以設Notification的Characteristic表示它具有裝置主動傳送資料能力
而如果不可以設Notification的Characteristic表示它不具有裝置主動傳送資料的能力
這時候你就必需要靠readCharacteristic
但是當你使用readCharacteristic時
就必需要等到callback的onCharacteristicRead已經收到資料之後才可以再讀下一個

而你現在用的方式其實它就跟RS232序列傳輸方式一樣


作者: 黑~~    時間: 2016-1-13 01:10 PM

chevylin0802 發表於 2016-1-13 11:40 AM
你這樣子寫就應該可以了
只是如果你要連Rx的資料收進來看的話
你應該也要把characteristicRx放到物件範圍 ...

恩   謝謝,又多學了一些不過我還是無法控制led說,明明都連結到藍牙了,但傳送指令就盪掉........
我只要傳字元控制led亮暗,這樣應該只要tx而已,是吧?

還請指教 謝謝

作者: chevylin0802    時間: 2016-1-13 01:49 PM

本帖最後由 chevylin0802 於 2016-1-13 01:52 PM 編輯
黑~~ 發表於 2016-1-13 01:10 PM
恩   謝謝,又多學了一些不過我還是無法控制led說,明明都連結到藍牙了,但傳送指令就盪掉........
我只 ...

我不知道你的裝置是什麼
所以無法給你任何其它的答案
我只能根據你寫的JAVA程式看一下裏面有什麼問題
至於其它的就不知道了

而你寫程式習慣也最好先做個修正
想知道它到底當在哪裏
至少也得盡可能的先在每一個函式開頭先給它噴個Log
總是要找到到底是哪一個函式無法完成執行
才有辦法再往下追蹤

不要預設你每一個程式都能夠寫得正確
抄來的程式碼通常你會更不清楚裏面做了些什麼事
這時候最好是都給它加上Log
你才會更容易理解整隻程式是怎麼運作的
先養成加上Log的習慣吧
即使是商用程式也會保留適量的Log


作者: 黑~~    時間: 2016-1-13 01:56 PM

chevylin0802 發表於 2016-1-13 01:49 PM
我不知道你的裝置是什麼
所以無法給你任何其它的答案
我只能根據你寫的JAVA程式看一下裏面有什麼問題

我是用藍芽模組ble
對了,想請教一下,是不是只要把這app connect ble寫出來
所有藍芽模組就都能連,只要改相映的指令,就所有藍芽ble皆可套用?

作者: chevylin0802    時間: 2016-1-13 02:20 PM

本帖最後由 chevylin0802 於 2016-1-13 02:27 PM 編輯
黑~~ 發表於 2016-1-13 01:56 PM
我是用藍芽模組ble
對了,想請教一下,是不是只要把這app connect ble寫出來
所有藍芽模組就都能連,只要 ...

哪那麼好
GATT的規範一大堆
而且還有人用的是非藍芽協會規範的
比如你現在用的那個就不是屬於藍芽協會所規範的規格

就算是我上次閒來沒事做的BleService
也只是簡單做了一兩個標準裝置可以用的而已
但是它可以讓人擴充到各種裝置上
只是需要針對每一種裝置的規範再去做相對應的程式

平時我是不寫JAVA的
能用Python做就絕不會用JAVA做
能用PHP寫的後台就絕不會去用JAVA寫
甚至於現在我多半都改成用Cordova寫通用的APP
BleService那還只是為了要簡化我的Cordova程式才寫的


作者: 黑~~    時間: 2016-1-14 08:26 AM

chevylin0802 發表於 2016-1-13 02:20 PM
哪那麼好
GATT的規範一大堆
而且還有人用的是非藍芽協會規範的

請問一下,要如何看我是哪種規範?





歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!