端口数据的获取
神念官网给的开发者资料是已经下线了的,意思就是不能正确的使用了,那么我们就需要根据他们给的开发者资料中,提取我们需要的一些信息,最重要的就是脑电的数据格式了。
端口的连接方法是一样,但是数据的获取却是不同的,我们要根据产品提供的数据资料进行数据的获取。
visual studio编译环境下
本文采取在visual studio编译环境下,进行c#语言的编译。
端口的连接
端口的连接方式都是相同的,本文采取的是C# 通过COM端口读取数据。从SerialPort对象接受数据时,将在辅助线程上自动引发DataReceived事件。代码如下,打开端口:
COM.BaudRate = 9600;//波特率
COM.PortName = "COM3";//端口名
COM.DataBits = 8;//数据位
COM.ReadTimeout = 5000;
COM.Open();//打开一个新的串行端口连接
COM.DataReceived += new SerialDataReceivedEventHandler(COM_DataReceived);
辅助线程中数据获取方法,代码如下:
private void COM_DataReceived(object sender,SerialDataReceivedEventArgs e)
{
try
{
Thread.Sleep(100);
int n = COM.BytesToRead;
byte[] numArray = new byte[this.COM.BytesToRead];
COM.Read(numArray, 0, COM.BytesToRead);
if (numArray.Length == 0)
return;
else
{
Console.WriteLine("numarry长度是:" + numArray.Length);
}
if (numArray[0] == (byte)170 && numArray[1] == (byte)170)
{
Console.WriteLine("进入" );
int num = 0;
num = Convert.ToInt32(numArray[4]);
Console.WriteLine("信号值是:" + num);
num = Convert.ToInt32(numArray[32]);
Console.WriteLine("专注值是:" + num);
num = Convert.ToInt32(numArray[34]);
Console.WriteLine("放松值是:" + num);
}
COM.DiscardInBuffer();
}
catch (Exception ex)
{
throw ex;
}
}
完整的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.IO.Ports;
using System.Threading;
using System.Collections;
namespace ReadParseTGAM
{
class COMPortManager
{
public SerialPort COM = new SerialPort();//初始化serialport类的新实例,用于获取串行端口资源
Parser parser;
Thread readThread;//自己开了个线程,用于读取端口
bool keepReading;//启动线程的判断
public COMPortManager(Parser p)
{
COM.BaudRate = 9600;//波特率
COM.PortName = "COM3";//端口名
COM.DataBits = 8;//数据位
COM.ReadTimeout = 5000;
COM.Open();//打开一个新的串行端口连接
COM.DataReceived += new SerialDataReceivedEventHandler(COM_DataReceived);
}
private void COM_DataReceived(object sender,SerialDataReceivedEventArgs e)
{
try
{
Thread.Sleep(100);
int n = COM.BytesToRead;
byte[] numArray = new byte[this.COM.BytesToRead];
COM.Read(numArray, 0, COM.BytesToRead);
if (numArray.Length == 0)
return;
else
{
Console.WriteLine("numarry长度是:" + numArray.Length);
}
if (numArray[0] == (byte)170 && numArray[1] == (byte)170)
{
Console.WriteLine("进入" );
int num = 0;
num = Convert.ToInt32(numArray[4]);
Console.WriteLine("信号值是:" + num);
num = Convert.ToInt32(numArray[32]);
Console.WriteLine("专注值是:" + num);
num = Convert.ToInt32(numArray[34]);
Console.WriteLine("放松值是:" + num);
}
COM.DiscardInBuffer();
}
catch (Exception ex)
{
throw ex;
}
}
}
}