Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Neurosky设备记录来自特定命令的数据_C# - Fatal编程技术网

C# 使用Neurosky设备记录来自特定命令的数据

C# 使用Neurosky设备记录来自特定命令的数据,c#,C#,我试图用Neurosky设备记录原始数据,我成功地做到了。但我需要编写一个命令(例如移动你的右臂),然后记录该命令的数据,但问题是OnDataReceived事件一直被触发,我不知道在记录数据之前在哪里可以为该命令添加一些代码。有什么帮助吗? 我的代码: using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.IO; using System

我试图用Neurosky设备记录原始数据,我成功地做到了。但我需要编写一个命令(例如移动你的右臂),然后记录该命令的数据,但问题是OnDataReceived事件一直被触发,我不知道在记录数据之前在哪里可以为该命令添加一些代码。有什么帮助吗? 我的代码:

using System;

using System.Collections.Generic;
using System.Text;
using System.Threading;

using System.IO;
using System.IO.Ports;

using NeuroSky.ThinkGear;
using NeuroSky.ThinkGear.Algorithms;
using System.Collections;

namespace testprogram
{
    class Program
    {

        static Connector connector;
        static HeartRateAcceleration heartRateAcceleration;
        static HeartRateRecovery heartRateRecovery;

        static byte poorSig;
        static int train;

        public static void Main(string[] args)
        {

            Console.WriteLine("Hello EEG!");

            // Initialize a new Connector and add event handlers
            connector = new Connector();
            connector.DeviceConnected += new EventHandler(OnDeviceConnected);
            connector.DeviceConnectFail += new EventHandler(OnDeviceFail);
            connector.DeviceValidating += new EventHandler(OnDeviceValidating);

            Connector.EKGPersonalizationEvent += new EventHandler(OnEKGPersonalizationEvent);

            heartRateRecovery = new HeartRateRecovery();
            heartRateAcceleration = new HeartRateAcceleration();

            // Scan for devices
            connector.ConnectScan("COM40");

            // Enable Energy level calculation
            // connector.StartEnergyLevel();
            //connector.GetHeartAge(90, "Neraj");

            connector.EKGstartLongTraining("Neraj");

            Thread.Sleep(450000);

            //Console.WriteLine(connector.GetHeartRiskAware("Neraj"));
            //Console.WriteLine(connector.GetHeartAgeStatus("Neraj"));
            //Console.WriteLine(connector.ResetHeartAge("Neraj"));

            System.Console.WriteLine("Goodbye.");

            // Close all open connections
            connector.Close();
            Environment.Exit(0);
        }

        static void OnEKGPersonalizationEvent(object sender, EventArgs e)
        {

            EKGPersonalizationEventArgs ekgArgs = (EKGPersonalizationEventArgs)(e);
            int status = ekgArgs.statusMessage;

            switch (status)
            {
                case 268:
                    string data = (string)(ekgArgs.dataMessage);
                    Console.WriteLine("Handler Message: status = MSG_EKG_IDENTIFIED " + " and username = " + data);
                    break;

                case 269:
                    Console.WriteLine("Handler Message: status = MSG_EKG_TRAINED");

                    connector.EKGstartDetection();
                    break;

                case 270:
                    int trainStep = (int)ekgArgs.dataMessage;
                    Console.WriteLine("Handler Message: status = MSG_EKG_TRAIN_STEP " + " and training step = " + trainStep);
                    break;

                case 271:
                    Console.WriteLine("Handler Message: status = MSG_EKG_TRAIN_TOUCH");
                    break;
            }
        }


        /**
         * Called when a device is connected 
         */
        static void OnDeviceConnected(object sender, EventArgs e)
        {
            Connector.DeviceEventArgs de = (Connector.DeviceEventArgs)e;

            Console.WriteLine("Device found on: " + de.Device.PortName);

            de.Device.DataReceived += new EventHandler(OnDataReceived);
        }

        /**
         * Called when scanning fails
         */
        static void OnDeviceFail(object sender, EventArgs e)
        {
            Console.WriteLine("No devices found! :(");
        }

        /**
         * Called when each port is being validated
         */
        static void OnDeviceValidating(object sender, EventArgs e)
        {
            Console.WriteLine("Validating: ");

            heartRateRecovery.enableHeartRateRecovery();
        }

        /**
         * Called when data is received from a device
         */
        static void OnDataReceived(object sender, EventArgs e)
        {
            //Device d = (Device)sender;
            Device.DataEventArgs de = (Device.DataEventArgs)e;
            DataRow[] tempDataRowArray = de.DataRowArray;

            TGParser tgParser = new TGParser();
            tgParser.Read(de.DataRowArray);

            /* Loop through new parsed data */
            ArrayList data = new ArrayList();
            for (int i = 0; i < tgParser.ParsedData.Length; i++)
            {
                if (tgParser.ParsedData[i].ContainsKey("Raw"))
                {
                    Console.WriteLine("Raw Value:" + tgParser.ParsedData[i]["Raw"]);
                    data.Add(tgParser.ParsedData[i]["Raw"]);
                }
            }
            AnalyizeData(data);
        }

        private static void AnalyizeData(ArrayList data)
        {

        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统文本;
使用系统线程;
使用System.IO;
使用System.IO.Ports;
使用NeuroSky.ThinkGear;
使用NeuroSky.ThinkGear.Algorithms;
使用系统集合;
名称空间测试程序
{
班级计划
{
静电连接器;
静态心率加速心率加速;
静态心率恢复心率恢复;
静态字节poorSig;
静态int列车;
公共静态void Main(字符串[]args)
{
控制台。WriteLine(“你好,EEG!”);
//初始化新连接器并添加事件处理程序
连接器=新连接器();
connector.DeviceConnected+=新事件处理程序(OnDeviceConnect);
connector.DeviceConnectionFail+=新事件处理程序(OnDeviceFail);
connector.DeviceValidating+=新事件处理程序(OnDeviceValidating);
Connector.EKGPersonalizationEvent+=新事件处理程序(OnEKGPersonalizationEvent);
heartRateRecovery=新的heartRateRecovery();
心率加速=新心率加速();
//扫描设备
连接器。连接扫描(“COM40”);
//启用能级计算
//connector.StartEnergyLevel();
//连接器。GetHeartAge(90,“Neraj”);
连接器:EKGstartLongTraining(“Neraj”);
睡眠(45万);
//Console.WriteLine(connector.GetHeartRiskAware(“Neraj”);
//Console.WriteLine(connector.GetHeartAgeStatus(“Neraj”);
//Console.WriteLine(connector.ResetHeartAge(“Neraj”);
System.Console.WriteLine(“再见”);
//关闭所有打开的连接
连接器。关闭();
环境。退出(0);
}
静态void OnEKGPersonalizationEvent(对象发送方,事件参数e)
{
EKGPersonalizationEventArgs ekgArgs=(EKGPersonalizationEventArgs)(e);
int status=ekgArgs.statusMessage;
开关(状态)
{
案例268:
字符串数据=(字符串)(ekgArgs.dataMessage);
Console.WriteLine(“处理程序消息:status=MSG_EKG_IDENTIFIED”+”和username=“+data”);
打破
案例269:
Console.WriteLine(“处理程序消息:status=MSG_EKG_TRAINED”);
连接器.EKGstartDetection();
打破
案例270:
int trainStep=(int)ekgArgs.dataMessage;
Console.WriteLine(“处理程序消息:状态=MSG_EKG_TRAIN_STEP”+”和training STEP=“+trainStep”);
打破
案例271:
Console.WriteLine(“处理程序消息:状态=MSG_EKG_TRAIN_TOUCH”);
打破
}
}
/**
*连接设备时调用
*/
静态无效OnDeviconnected(对象发送方,事件参数e)
{
Connector.DeviceEventArgs de=(Connector.DeviceEventArgs)e;
Console.WriteLine(“在:+de.Device.PortName上找到的设备”);
de.Device.DataReceived+=新的事件处理程序(OnDataReceived);
}
/**
*扫描失败时调用
*/
静态void OnDeviceFail(对象发送方,事件参数e)
{
Console.WriteLine(“未找到任何设备!”:(“”);
}
/**
*在验证每个端口时调用
*/
静态无效OnDeviceValidating(对象发送方,事件参数e)
{
Console.WriteLine(“验证:”);
heartRateRecovery.enableHeartRateRecovery();
}
/**
*从设备接收数据时调用
*/
静态无效OnDataReceived(对象发送方,事件参数e)
{
//设备d=(设备)发送器;
Device.DataEventArgs de=(Device.DataEventArgs)e;
DataRow[]tempDataRowArray=de.DataRowArray;
TGParser TGParser=新的TGParser();
tgParser.Read(de.DataRowArray);
/*循环遍历新解析的数据*/
ArrayList数据=新的ArrayList();
for(int i=0;i
您的代码缺少一个块,因此无法关闭。您使用的是睡眠(4500000)。您需要在main()中使用while循环方法,用于检查数据发送数据是否可用。将睡眠替换为while,然后在while循环中添加要发送的代码。但是,由于OnDataReceived事件被连续调用,它将永远不会再转到main。这不是真的。当接收事件完成时,它将返回到main,直到下一个事件发生。在当前代码中,您可以这样做看不到,因为它正在恢复睡眠(45万)并且什么也不做。是的..但事件始终发生是的,事件不断发生,但在一个事件完成和下一个事件发生之间有一段时间。在您的计算机上,有很多事件不断发生,并且计划程序允许任务切换,因此所有进程都同时运行。OnData接收