上文讲到的是保证硬件的接通。接下来是用C语言在它提供的API接口进行连接。

  在网盘中下载MindSet Development Tools这个开发包。这个目录下MindSet Development Tools\ThinkGear Communications Driver\win32有一些文件是要用到的。

  我采用的MinGW这个库。这个库的好处是绿色版,一般情况下在没有开发环境的电脑,都可以运行。(我们都知道一个VS安装要一个多小时)。MinGW各个开发库基本没有版本要求。好了我们先在MinGW这个目录下创建一个ThinkGear目录,这个目录跟bin目录是同级的。然后进入ThinkGear目录复制上面提到的win32目录下的thinkgear_testapp.c thinkgear.h和thinkgear.dll,然后还要复制thinkgear.dll文件到MinGW\bin目录用作动态库。现在文件就都准备好了,现在我们先写一个Makefile。

 LDFLAGS= -L ..\bin
LIBS= -lthinkgear
main:thinkgear.h thinkgear_testapp.c
gcc $(LDFLAGS) $(LIBS) thinkgear_testapp.c -o main.exe

  然后命令行执行make , main.exe执行程序

  现在目录下的文件有

  \ThinkGear

main.exe  makefile thinkgear.dll  thinkgear.h  thinkgear_testapp.c

  下面将对源代码进行部分注解

 #include <stdlib.h>
#include <stdio.h> #include "thinkgear.h" void wait()
{
printf( "\n" );
printf( "Press the ENTER key...\n" );
fflush( stdout );
getc( stdin );
} /**
* Program which prints ThinkGear EEG_POWERS values to stdout.
*/
int main( void ) { char *comPortName = NULL;
int dllVersion = ; //动态库版本
int connectionId = ;//连接ID
int packetsRead = ; //包数量
int errCode = ; //错误码 /* Print driver version number */
dllVersion = TG_GetDriverVersion();
printf( "ThinkGear DLL version: %d\n", dllVersion ); //打印当前动态库版本 /* Get a connection ID handle to ThinkGear */
connectionId = TG_GetNewConnectionId(); //获取连接ID 跟文件描述符类似的功能
if( connectionId < ) {
fprintf( stderr, "ERROR: TG_GetNewConnectionId() returned %d.\n",
connectionId );
wait();
exit( EXIT_FAILURE );
} /* Set/open stream (raw bytes) log file for connection */
// 原始数据日志 用于高级分析
errCode = TG_SetStreamLog( connectionId, "streamLog.txt" );
if( errCode < ) {
fprintf( stderr, "ERROR: TG_SetStreamLog() returned %d.\n", errCode );
wait();
exit( EXIT_FAILURE );
} /* Set/open data (ThinkGear values) log file for connection */
//ThinkGear数据日志 一种动态库已经封装好的数据
errCode = TG_SetDataLog( connectionId, "dataLog.txt" );
if( errCode < ) {
fprintf( stderr, "ERROR: TG_SetDataLog() returned %d.\n", errCode );
wait();
exit( EXIT_FAILURE );
} /* Attempt to connect the connection ID handle to serial port "COM5" */
comPortName = "\\\\.\\COM3"; //这个是要连接的COM端口 这个在那个计算机管理工具里面看 里面的COM端口多少这里就多少
errCode = TG_Connect( connectionId,
comPortName,
TG_BAUD_9600,
TG_STREAM_PACKETS );
if( errCode < ) {
fprintf( stderr, "ERROR: TG_Connect() returned %d.\n", errCode );
wait();
exit( EXIT_FAILURE );
} if( ==TG_EnableBlinkDetection(connectionId,)) //启动眨眼检测
{
printf("Success enable blink\n");
} /* 不停的读取数据 */
packetsRead = ;
while()
{
/* 读一个报文 */
errCode = TG_ReadPackets( connectionId, );
/* 如果这个报文读取成功 */
if( errCode == )
{
int att, det, sig;
if(( errCode = TG_GetValueStatus(connectionId, TG_DATA_ATTENTION)) != )
{
att = TG_GetValue(connectionId, TG_DATA_ATTENTION) ;
det = TG_GetValue(connectionId, TG_DATA_MEDITATION);
sig = TG_GetValue(connectionId, TG_DATA_POOR_SIGNAL);
printf("attentin = %d, meditation=%d, signal=%d\n", att, det, sig);
}
}
else
{
printf("ReadPackets:errcode=%d\n", errCode);
}
}
//关闭连接
TG_FreeConnection( connectionId );
wait();
return( EXIT_SUCCESS );
}

先编译连接,运行一下这个程序,至此软硬件的环境都弄好了。剩下的就是算法设计了。

========================我是分割线=========================

  接下来的一段时间我都会更新关于这个基于脑电波疲劳检测的博客,在看博客的你,如果有更好的检测算法,可以在评论下给出一些想法。并能给出一定的实现思路。我现在的想法是在它提供的那几个波段(上面提到的)中对强度进行判断。然后还有一个就是统计几个波段,然后计算对应的方差。还有就是通过里面有一个判断眨眼的函数来判断眨眼。我们可以根据眨眼的时间差来判断。不过不同的人眨眼的时间是不同的。所以还有让系统先预处理一下,保存当前这个人的眨眼时间差。现在我就想到了这些。具体怎么做还有一段时间。

===========================================================

参考资料:

http://www.neurosky.com.cn/news_ny.aspx?NewsID=58

基于mindwave脑电波进行疲劳检测算法的设计(2)的更多相关文章

  1. 基于mindwave脑电波进行疲劳检测算法的设计(5)

    时隔两个多月了,前段时间在弄Socket,就没有弄这个了.现在好了,花了几天的时间,终于又完成了一小部分了.这一小节主要讲α,β,δ,θ等等波段之间的关系.废话不多说,直接给出这几天的成果. 上一次, ...

  2. 基于mindwave脑电波进行疲劳检测算法的设计(1)

    一.简介 脑波,又称之为脑电波,是人大脑发出的电波,非常的微弱,只能通过设备来检测.人的脑波在不同状态下,会不同,因此可以通过脑波来量化分析人的精神状态. 科学家讲脑电波分为四种,以下为详细解释 (1 ...

  3. 基于mindwave脑电波进行疲劳检测算法的设计(4)

    上一次的实验做到可以从pc端读取到MindWave传输过来的脑电波原始数据了. 我是先定义一个结构体,该结构体对应保存所有能从硬件中取到的原始数据. struct FD_DATA { int batt ...

  4. 基于mindwave脑电波进行疲劳检测算法的设计(3)

    这一节我将讲解thinkgear.h 里面的函数和宏定义.这一些都可以在MindSet Development Tools\ThinkGear Communications Driver\docs\h ...

  5. 基于深度学习的目标检测算法:SSD——常见的目标检测算法

    from:https://blog.csdn.net/u013989576/article/details/73439202 问题引入: 目前,常见的目标检测算法,如Faster R-CNN,存在着速 ...

  6. 基于Shading Model(对光照变化一定不变性)的运动目标检测算法

    光照模型(Shading Model)在很多论文中得到了广泛的应用,如robust and illumination invariant change detection based on linea ...

  7. 基于候选区域的深度学习目标检测算法R-CNN,Fast R-CNN,Faster R-CNN

    参考文献 [1]Rich feature hierarchies for accurate object detection and semantic segmentation [2]Fast R-C ...

  8. 【计算机视觉】基于Shading Model(对光照变化一定不变性)的运动目标检测算法

    光照模型(Shading Model)在很多论文中得到了广泛的应用,如robust and illumination invariant change detection based on linea ...

  9. 【计算机视觉】基于样本一致性的背景减除运动目标检测算法(SACON)

    SACON(SAmple CONsensus)算法是基于样本一致性的运动目标检测算法.该算法通过对每个像素进行样本一致性判断来判定像素是否为背景. 算法框架图 由上图可知,该算法主要分为四个主要部分, ...

随机推荐

  1. python面试笔试题,你都会了吗?快来复习

    1.一行代码实现1--100之和 利用sum()函数求和 >>> sum(range(0,101)) 5050 2.如何在一个函数内部修改全局变量 利用global 修改全局变量 a ...

  2. 【Java】 剑指offer(28) 对称的二叉树

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它 ...

  3. HTTP 的长连接和短连接

    一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ...

  4. C# 运行中 Lua 语言脚本

    这里就不介绍Lua语言了,使用挺广的一种脚本语言.自行百度. 第一步 使用 Nuget 安装引用 VikingErik.LuaInterface. 第二步 添加 Using using LuaInte ...

  5. 安卓 运行、调试 配置 android Run/debug configurations

    android  运行.调试 配置 android  Run/debug configurations 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq. ...

  6. c#textBox控件限制只允许输入数字及小数点

    在textboxd的事件中的 KeyPress 事件,这样双击进入代码:输入以下代码 即可 //判断按键是不是要输入的类型. || () && ( && () e.Ha ...

  7. pojA Star not a Tree?

    题目链接 pojA Star not a Tree? 题解 啊,模拟退火是个好东西 模拟退火即可 代码 #include<cmath> #include<cstdio> #in ...

  8. 乐迪AT9

    AT9使用说明书.pdf https://wenku.baidu.com/view/c17e85ea2f60ddccda38a0fc.html?re=view 乐迪AT9遥控器的基础使用方法第一课视频 ...

  9. 如何将Object类型转换成String类型

    1. Object.toString() obj.toString() 注意:必须保证Object不是null值,否则将抛出NullPointerException异常. 2. (String)Obj ...

  10. Linux 标准目录结构 FHS

    因为利用 Linux 来开发产品或 distribution 的团队实在太多了,如果每个人都用自己的想法来配置文件放置的目录,那么将可能造成很多管理上的困扰.所以,后来就有了 Filesystem H ...