close

一、問題描述

工作需要,上面知我曾經有接觸matlab ,又因這兒的學生寫演算法時都以單機版去測試,
所以學生寫好的小小演算法轉成正式版時,往往效能結果與學生所告知的結果有很大的出入,
只好請我把設備改寫成matlab 版本,讓學生在寫演算法時可以以實際所接收到的資料去做測試,
讓落差不會那麼的大.......

然而,網路查詢了一下,
matlab 接收bluetooth資料的資訊,許多人都用建議要安裝LEGO MINDSTORMS NXT (NXT toolbox) ,
但好像又與我的需求不太相同,
因為我並沒有使用LEGO的設備 !!!

後來,好在ptt 有好心人提供了另一個方案,
讓我知道並非一定要用NXT toolbox 才能接收藍芽資料,

  替代方案:好心人士之前是採取直接連藍芽的模式,然後使用COM Port來抓訊號

有了此資訊,就開始往此方面再去研究研究藍芽連接的方式囉~

----------------------------------------------------------------------

需求:透過一手邊的藍芽設備會丟出一些訊號,
   希望能透過matlab來接收此訊號,
   然後再做一些後續的訊號處理與呈現。
----------------------------------------------------------------------

二、方法

1. 先新增設備與設定藍芽裝置的連接埠
  a. window-->裝置及印表機-->Bluetoothe裝置
  201308061_win_裝置和印表機  

  b. 新增裝置對話視窗-->win7會自動搜尋目前可使用新增的裝置名稱-->下一步
    201308062_新增裝置  

  c. 新增裝置對話視窗-->win7提供幾種配對的選項供選擇-->需依個人選求去點選
   在此,因為我所使用到的藍芽裝置需要key(硬體才會認得要開始作用),
   所以我選擇第二個選項『輸入裝置的配對碼』-->『0000』-->下一步。
   201308063_輸入裝置配對碼
   201308064_輸入配對碼  

  d. win7會自動幫您安裝裝置驅動程式軟體-->若成功後,也會顯示『此裝置已成功新增至此部電腦』之訊息。
   201308065_正在安裝裝置驅動程式

  e. 確認裝置已安裝,並查看其連接埠號,以供後續matlab使用。 

   201308066_Mindo16
   201308067_連接埠號   

2. matlab 程式:

  clear;
  clear all;
  close all;

  % assigns the object s to serial port
  s = serial('COM4');
  s.BaudRate = 9600; % set(s, 'BaudRate', 9600);
  s.Parity = 'none';      % set(s, 'Parity', 'none');
  s.DataBits = 8;         % set(s, 'DataBits', 8);
  s.StopBit = 1;           % set(s, 'StopBit', 1);
  s.Timeout = 10;

  try
   % 取得連線
   fopen(s);

   % 此部份需依設備而去設定,因為我所使用到的藍芽設備需先送出一些參數值,
     並計算才能知道最後要送出的開始指令為何。
     藍芽設備也要正確的接收到開始指令,才有法度運作與回傳資料~
   % startCmd = [254 7 9 20 255 0 5]; % 0xFE 0x07 0x09 0x14 0xFF]; 
   startCmd = [254 7 s_cmd1 s_cmd2 255 0 5]; 

   % 下start指令
   fwrite(s, startCmd, 'uint8');

   while (true)
    data_packet = fread(s, DataPacketBytes); %DataPacketBytes一切要接收的位元大小
    % read bluetooth data
    s_data =......
   end
   % disp(sprintf('%d', s_data_packet(1,1)));
   disp(sprintf(test_string, s_data));
  catch exception
   h = msgbox('Connect error~', 'Error', 'error');
   close all;
  end

 

三、問題

1. 需了解自己的藍芽設備要如何正確的給予指令,才能如期的接收到訊號。
2. 有些設備接收到的訊號是他人無法直接解讀的,需要有額外的說明文件來進一步的了解藍芽封包所真正代表的意思。
3. Matlab 感覺在藍芽連線上並不是很人性化,因為常常資源被綁著!
  使用fclose(s) 、fclose(all)...有時並無法解決。
  需把Matlab 整個關掉再重新啟動才能再接收到資料,或亦關掉藍芽設備重開。

以上並沒有找到可行正確的解決方案,僅能先以簡陋的方式先處理。
(若有哪位大大找到解決方案,歡迎討論囉~)

arrow
arrow

    HuangJung1216 發表在 痞客邦 留言(1) 人氣()