Недавно я приобрел ЭЭГ-гарнитуру (NeuroSky MindWave Mobile).Это просто устройство, надеваемое на голову для захвата данных о мозговых волнах.Устройство передает эти данные в режиме реального времени через Bluetooth, который затем может быть прочитан / проанализирован с помощью программного обеспечения.
NeuroSky предоставляет простой в использовании набор API-интерфейсов, которые я использовал для написания базового класса для чтенияпотоковая гарнитура данных.Его сокращенная версия выглядит следующим образом:
using System;
using NeuroSky.ThinkGear;
namespace MindWave_Reader
{
class ReadEEG
{
public double AlphaValue { get; set; }
private Connector connector;
public ReadEEG()
{
// Initialize a new Connector and add event handlers
connector = new Connector();
connector.DeviceConnected += new EventHandler(OnDeviceConnected);
// Scan for headset on COM7 port
connector.ConnectScan("COM7");
}
// Called when a device is connected
public 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 data is received from a device
public void OnDataReceived(object sender, EventArgs e) {
Device.DataEventArgs de = (Device.DataEventArgs)e;
DataRow[] tempDataRowArray = de.DataRowArray;
TGParser tgParser = new TGParser();
tgParser.Read(de.DataRowArray);
/* Loops through the newly parsed data of the connected headset */
for (int i = 0; i < tgParser.ParsedData.Length; i++) {
if(tgParser.ParsedData[i].ContainsKey("EegPowerAlpha")) {
AlphaValue = tgParser.ParsedData[i]["EegPowerAlpha"];
Console.WriteLine("Alpha: " + AlphaValue);
}
}
}
}
}
Приведенный выше код сначала пытается подключиться к гарнитуре EEG.После подключения каждый раз, когда данные принимаются с гарнитуры, вызывается OnDataReceived()
.Этот метод выводит соответствующие значения данных потоковой гарнитуры (альфа-волны) на консоль.
Теперь я хочу отобразить эти значения альфа-волны в реальном времени на декартовой диаграмме, и я обнаружил LiveCharts, который выглядит как библиотека аккуратных графиков. Этот пример WinForms соответствует тому, что я пытаюсь достичь.
Значения альфа-волны должны быть нанесены на оси Y против времени по оси X.Однако вместо обновления диаграммы каждые 500 мс, как в примере, я бы хотел, чтобы она обновлялась только при получении данных от гарнитуры (другими словами, когда переменная AlphaValue
обновляется на OnDataReceived()
в классе ReadEEG).
Я хотел бы знать, как я могу заставить свой WinForm взаимодействовать с классом ReadEEG, чтобы обновлять свою декартову диаграмму таким образом.Я новичок, поэтому любая помощь будет принята с благодарностью.
Я действительно надеюсь, что я дал понять и постарался сделать объяснения максимально простыми.Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать.Заранее спасибо за вашу помощь!