作者聲明:此博客是作者的畢設心得,拿來分享。
拿到模塊,在網上查了一圈,發現基本沒什么有用的資料,有也是一些廢話,經過我幾個月的攻克,現在已初步搞定,分享給大家。
廢話不多說,直接步入正題。

這是通過單片機的232通信例程直接接收得到的原始數據,也就是參考手冊中的數據流。其中小包數據,是每秒512個大概,大包數據是每秒1個。
小包的格式是AA AA 04 80 02 xxHigh xxLow xxCheckSum前面的AA AA 04 80 02 是不變的,后三個字節是一只變化的,xxHigh和xxLow組成了原始數據rawdata,xxCheckSum就是校驗和。所以一個小包里面只包含了一個對開發者來說有用的數據,那就是rawdata,可以說一個小包就是一個原始數據,大約每秒鍾會有
512個原始數據。
從小包中解析出原始數據:rawdata = (xxHigh << 8) | xxLow;
if(rawdata > 32768){ rawdata =65536; }
根據手冊,在計算原始數據之前,要先檢查檢驗和:sum = ((0x80 + 0x02 + xxHigh + xxLow)^ 0xFFFFFFFF) & 0xFF。就是把頭文件AA AA 04后面的四個數據加起來,取反,在取低八位。當檢驗碼不對時,直接丟棄該包。
在大包數據里面可以解析Signal,Attention,Meditation和8個EEG的信號值,大包的格式是固定的:
AA 同步
AA 同步
20 是十進制的32,即有32個字節的payload,除掉20本身+兩個AA同步+最后校驗和
02 代表信號值Signal
C8 信號的值
83 代表EEG Power開始了
18 是十進制的24,說明EEG Power是由24個字節組成的,以下每三個字節為一組
18 Delta 1/3
D4 Delta 2/3
8B Delta 3/3
13 Theta 1/3
D1 Theta 2/3
69 Theta 3/3
02 LowAlpha 1/3
58 LowAlpha 2/3
C1 LowAlpha 3/3
17 HighAlpha 1/3
3B HighAlpha 2/3
DC HighAlpha 3/3
02 LowBeta 1/3
50 LowBeta 2/3
00 LowBeta 3/3
03 HighBeta 1/3
CB HighBeta 2/3
9D HighBeta 3/3
03 LowGamma 1/3
6D LowGamma 2/3
3B LowGamma 3/3
03 MiddleGamma 1/3
7E MiddleGamma 2/3
89 MiddleGamma 3/3
04 代表專注度Attention
00 Attention的值(0到100之間)
05 代表放松度Meditation
00 Meditation的值(0到100之間)
D5 校驗和
想要獲得某個EEG信號值,只需將相應信號的1/3值左移16位,2/3值左移8位,3/3值不變,然后將他們或運算:
delta=(payload[i]<<16) | (payload[(i+1)]<<8) | (payload[(i+2)])。
未完待續。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
