arduino 一次性读取serial_Arduino连接TGAM(蓝牙脑波模块)

ccee3d3059d79a83435fef299f6a3e88.png

从淘宝上购买以后,很多网店都没有与Arduino连接的代码,经历千辛万苦终于找到了官网的一段与Arduino通讯的代码。下面把资料以及链接附在这里,供大家学习参考讨论


这里附上官网链接:

mindwave_mobile_and_arduino [NeuroSky Developer - Docs]

语雀链接:<TGAM开发套件>相关资料,请点击查看:{ED0084/EDK0029/EDK0047} TGAM脑波开发套件 · 语雀

TGAM脑电波传感器开发套件蓝牙EEG脑波模块Neurosky生物反馈检测-淘宝网​item.taobao.com
9f8b53df16ec253b1bc2abf6ffb2deda.png

461a6db19f27e048e258d4f28308673c.png

关注我私信 可获赠arduino源代码和新开发包!

c4a90a867da498c5babde86e51dff17e.png

Arduino代码说明

TGAM套件自带一个蓝牙,我们需要在Arduino板上再接一个蓝牙。两个蓝牙之间相互通讯。即设置两个蓝牙,一个为主机,一个为从机。

这里需要注意:主机和从机之间可以互发数据。最主要的区别在于,蓝牙主机是主动搜索,而蓝牙从机只能被动连接。

蓝牙模块图

af497327767889bac1906627ffa1e0db.png

连接图

53aa5802437867aa527390b1836b0088.png

574e669dc104665d4115d58b52187970.png

Arudino代码

// Arduino Bluetooth Interface with Mindwave

//

// This is example code provided by NeuroSky, Inc. and is provided

// license free.

#define LED 13

#define BAUDRATE 57600

#define DEBUGOUTPUT 0

// checksum variables

byte generatedChecksum = 0;

byte checksum = 0;

int payloadLength = 0;

byte payloadData[64] = {0};

byte poorQuality = 0;

byte attention = 0;

byte meditation = 0;

int raw=0;

// system variables

long lastReceivedPacket = 0;

boolean bigPacket = false;

//

// Microprocessor Setup //

//

void setup() {

pinMode(LED, OUTPUT);

Serial.begin(BAUDRATE); // USB

}

// Read data from Serial UART //

byte ReadOneByte() {

int ByteRead;

while(!Serial.available());

digitalWrite(13,HIGH);

ByteRead = Serial.read();

return ByteRead;

}

/

//MAIN LOOP//

/

void loop() {

// Look for sync bytes

if(ReadOneByte() == 170) {

if(ReadOneByte() == 170) {

payloadLength = ReadOneByte();

if(payloadLength > 169) //Payload length can not be greater than 169

return;

generatedChecksum = 0;

for(int i = 0; i < payloadLength; i++) {

payloadData[i] = ReadOneByte(); //Read payload into memory

generatedChecksum += payloadData[i];

}

checksum = ReadOneByte(); //Read checksum byte from stream

generatedChecksum = 255 - generatedChecksum; //Take one's compliment of generated checksum

if(checksum == generatedChecksum) {

poorQuality = 200;

attention = 0;

meditation = 0;

for(int i = 0; i < payloadLength; i++) { // Parse the payload

switch (payloadData[i]) {

case 2:

i++;

poorQuality = payloadData[i];

bigPacket = true;

break;

case 4:

i++;

attention = payloadData[i];

break;

case 5:

i++;

meditation = payloadData[i];

break;

case 0x80:

i = i + 3;

raw=payloadData[i-1]*256+payloadData[i];

if(raw>=32768)

raw=raw-65536;

break;

case 0x83:

i = i + 25;

break;

default:

break;

} // switch

} // for loop

#if !DEBUGOUTPUT

// *** Add your code here ***

if(bigPacket) {

if(poorQuality == 0)

digitalWrite(LED, HIGH);

else

digitalWrite(LED, LOW);

Serial.print("PoorQuality: ");

Serial.print(poorQuality, DEC);

Serial.print(" Attention: ");

Serial.print(attention, DEC);

Serial.print(" raw ");

Serial.print(raw);

Serial.print(" Time since last packet: ");

Serial.print(millis() - lastReceivedPacket, DEC);

lastReceivedPacket = millis();

Serial.print(" Att: ");

int att=Serial.print(attention,DEC);

Serial.print("n");

switch(attention / 10) {

case 0:

digitalWrite(LED, HIGH);

break;

case 1:

digitalWrite(LED, HIGH);

break;

case 2:

digitalWrite(LED, HIGH);

break;

case 3:

digitalWrite(LED, HIGH);

break;

case 4:

digitalWrite(LED, HIGH);

break;

case 5:

digitalWrite(LED, HIGH);

break;

case 6:

digitalWrite(LED, HIGH);

break;

case 7:

digitalWrite(LED, HIGH);

break;

case 8:

digitalWrite(LED, HIGH);

break;

case 9:

digitalWrite(LED, HIGH);

break;

case 10:

digitalWrite(LED, HIGH);

break;

}

Serial.flush();

}

#endif

bigPacket = false;

}

else {

}

Serial.flush();

}

}

}

这里从Arduino串口读取到专注度。从而可以还控制LED灯的开关

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值