private void EmotivDataWorker(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; while (!worker.CancellationPending) { //will collect data dataReader.DataCollect(); System.Threading.Thread.Sleep(600); } if (worker.CancellationPending) { e.Cancel = true; } }
private void DataTimer_Tick(object sender, EventArgs e) { //just in case needing to clear data buffer - discard data by not doing anything to it if (!OPStart) { List <EmotivRawEEG> receivedData = dataReader.DataCollect(); } if (OPStart) { List <EmotivRawEEG> receivedData = dataReader.DataCollect(); #region add received Data if (receivedData != null) { /*add retreive EEG data to the general list*/ foreach (EmotivRawEEG data in receivedData) { EEGStorer.Add(data); } for (int i = 0; i < receivedData.Count; i++) { O1List.Add(receivedData[i].O1); F3List.Add(receivedData[i].F3); F4List.Add(receivedData[i].F4); F7List.Add(receivedData[i].F7); F8List.Add(receivedData[i].F8); AF3List.Add(receivedData[i].AF3); AF4List.Add(receivedData[i].AF4); } } #endregion #region declared temp variable int maxFreqO1 = 0, maxFreqF3, maxFreqF4, maxFreqF7, maxFreqF8, maxFreqAF3, maxFreqAF4; // double maxMag = 0; double alphaPowerO1 = 0, betaPowerO1 = 0; double alphaPowerF3 = 0, betaPowerF3 = 0; double alphaPowerF4 = 0, betaPowerF4 = 0; double alphaPowerF7 = 0, betaPowerF7 = 0; double alphaPowerF8 = 0, betaPowerF8 = 0; double alphaPowerAF3 = 0, betaPowerAF3 = 0; double alphaPowerAF4 = 0, betaPowerAF4 = 0; #endregion int sampleSize = 128; /*If one of the channel has sample size larger than the given value - * all channel did. */ if (O1List.Count >= sampleSize) { #region compute Alpha beta power ft.computePower(O1List, sampleSize, out maxFreqO1, out alphaPowerO1, out betaPowerO1); ft.computePower(F3List, sampleSize, out maxFreqF3, out alphaPowerF3, out betaPowerF3); ft.computePower(F4List, sampleSize, out maxFreqF4, out alphaPowerF4, out betaPowerF4); ft.computePower(F7List, sampleSize, out maxFreqF7, out alphaPowerF7, out betaPowerF7); ft.computePower(F8List, sampleSize, out maxFreqF8, out alphaPowerF8, out betaPowerF8); ft.computePower(AF3List, sampleSize, out maxFreqAF3, out alphaPowerAF3, out betaPowerAF3); ft.computePower(AF4List, sampleSize, out maxFreqAF4, out alphaPowerAF4, out betaPowerAF4); #endregion BandPower bp = new BandPower() { alpha_O1 = alphaPowerO1, beta_O1 = betaPowerO1, dominantFreq_O1 = maxFreqO1, alpha_F3 = alphaPowerF3, beta_F3 = betaPowerF3, alpha_F4 = alphaPowerF4, beta_F4 = betaPowerF4, alpha_F7 = alphaPowerF7, beta_F7 = betaPowerF7, alpha_F8 = alphaPowerF8, beta_F8 = betaPowerF8, alpha_AF3 = alphaPowerAF3, beta_AF3 = betaPowerAF3, alpha_AF4 = alphaPowerAF4, beta_AF4 = betaPowerAF4 }; PowerStorer.Add(bp); #region comments out /* * * // Compute Eye Open Avg Alpha & Beta * * //Compute Percent difference betweeen the the avgAlphaOpen & current alpha power * //if haven't detected Close eye * * if(closeEye ==false) * { * if(PowerStorer.Count == 1) {avgAlphaOpen=alphaPower; avgBetaOpen = betaPower;} * else if (PowerStorer.Count >1) * { * if((avgAlphaOpen - alphaPower)/avgAlphaOpen <= 4) // anythreshold * { * for(int j=0; j< PowerStorer.Count;j++) * { * avgAlphaOpen += PowerStorer[j].alpha; * } * avgAlphaOpen = avgAlphaOpen / PowerStorer.Count; * } * else * { * closeEye = true; * * } * } * } */ #endregion if (PowerStorer.Count >= 2) { double avgAlphaPDifference = 0; avgAlphaPDifference = (alphaPowerO1 - PowerStorer[PowerStorer.Count - 2].alpha_O1) / PowerStorer[PowerStorer.Count - 2].alpha_O1; textBox_AlphaDiff.Text = avgAlphaPDifference.ToString(); double avgBetaPDifference = (betaPowerO1 - PowerStorer[PowerStorer.Count - 2].beta_O1) / PowerStorer[PowerStorer.Count - 2].beta_O1; textBox_BetaDiff.Text = avgBetaPDifference.ToString(); } //Condition for Close / Open eyes trigger //if close eye for 2 seconds frame already - reset CloseEye second /* * if (alphaPowerO1 >= 60 && alphaPowerO1 <= 100 && betaPowerO1 <= 30) * { * CloseEyeTrigger = true; * } * else * { * CloseEyeTrigger = false; * } * */ #region command classification bool trigger = nb.classify(alphaPowerO1, betaPowerO1); if (trigger) { label11.Text = "Trigger on"; listBox1.Items.Add("Trigger On"); triggerOnCount++; } else if (!trigger) { label11.Text = "Trigger off"; listBox1.Items.Add("Trigger off"); triggerOnCount = 0; } if (trigger && command == 1 && (triggerOnCount > 8 || triggerOnCount == 1)) { command = 2; listBox1.Items.Add("command: " + command.ToString()); } else if (trigger && command == 2 && (triggerOnCount > 8 || triggerOnCount == 1)) { command = 1; listBox1.Items.Add("command: " + command.ToString()); } #endregion #region update TextBox textBox_freq.Text = maxFreqO1.ToString(); textBox_alphaO1.Text = alphaPowerO1.ToString(); textBox_BetaO1.Text = betaPowerO1.ToString(); textBox_alphaF3.Text = alphaPowerF3.ToString(); textBox_BetaF3.Text = betaPowerF3.ToString(); textBox_alphaF4.Text = alphaPowerF4.ToString(); textBox_BetaF4.Text = betaPowerF4.ToString(); textBox_alphaF7.Text = alphaPowerF7.ToString(); textBox_BetaF7.Text = betaPowerF7.ToString(); textBox_alphaF8.Text = alphaPowerF8.ToString(); textBox_BetaF8.Text = betaPowerF8.ToString(); textBox_alphaAF3.Text = alphaPowerAF3.ToString(); textBox_BetaAF3.Text = betaPowerAF3.ToString(); textBox_alphaAF4.Text = alphaPowerAF4.ToString(); textBox_BetaAF4.Text = betaPowerAF4.ToString(); #endregion #region update Listbox //list box listBox1.Items.Add("O1 Alpha: " + alphaPowerO1.ToString()); listBox1.Items.Add("O1 Beta:" + betaPowerO1.ToString()); listBox1.SelectedIndex = listBox1.Items.Count - 1; //listBox1.Items.Add(); listBox1.SelectedIndex = -1; #endregion // O1List.RemoveRange(0, 64); } } }