/// <summary> /// Iterate through each emg sensor in myo and assign 1 if the sum of the first and second frame of emg has a sum of more than 20. /// else assign 0. It means that much variation(100 to -100) was observed propotional to higher tension in muscle. /// </summary> /// <param name="e"></param> void CalculateEMGValues(EmgDataEventArgs e) { float[] currentEmgValue = new float[8] { 0, 0, 0, 0, 0, 0, 0, 0 }; for (int i = 0; i <= 7; i++) { try { storeEmgValue[i] = ((float)e.EmgData.GetDataForSensor(i)) / 100; } catch { Debug.WriteLine("No emg value"); } } try { mWindow.UpdateEMG(storeEmgValue); } catch { Debug.WriteLine("No emg value"); } }
private void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e) { for (int i = 0; i < mainForm.numberOfSensors; i++) { mainForm.myoEMG[i].Add(e.EmgData.GetDataForSensor(i)); } }
private void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e) { // Display Emg Text Data (1000 ms interval = 1 second) if (m_CTId.Get() >= 1000) { m_CTId.Set(); Ojw.CMessage.Write(String.Format("Emg = {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}", e.EmgData.GetDataForSensor(0), e.EmgData.GetDataForSensor(1), e.EmgData.GetDataForSensor(2), e.EmgData.GetDataForSensor(3), e.EmgData.GetDataForSensor(4), e.EmgData.GetDataForSensor(5), e.EmgData.GetDataForSensor(6), e.EmgData.GetDataForSensor(7))); } // Display Emg Graphic Data (100 ms interval) if (m_CTId_Graph.Get() >= 100) { m_CTId_Graph.Set(); m_CGrap.Push( e.EmgData.GetDataForSensor(0), e.EmgData.GetDataForSensor(1), e.EmgData.GetDataForSensor(2), e.EmgData.GetDataForSensor(3), e.EmgData.GetDataForSensor(4), e.EmgData.GetDataForSensor(5), e.EmgData.GetDataForSensor(6), e.EmgData.GetDataForSensor(7) ); m_CGrap.OjwDraw(); } }
static void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e) { Console.Clear(); for (int i = 0; i < 8; i++) { Console.WriteLine(@"POD-{1}: {0}", e.EMG[i], i + 1); } }
private void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e) { // pull data from each sensor for (var i = 0; i < _pointPairs.Length; ++i) { _pointPairs[i].Add((e.Timestamp - _startTime).TotalSeconds, e.EmgData.GetDataForSensor(i)); } }
public MyoData buildRecordUsing(DataCollector data, DateTime AGOStamp, DateTime EMGStamp) { AccelerometerDataEventArgs Acc = data.accelerometerData.First(X => X.Timestamp == AGOStamp); EmgDataEventArgs Emg = data.emgData.First(X => X.Timestamp == EMGStamp); OrientationDataEventArgs Ori = data.orientationData.First(X => X.Timestamp == AGOStamp); GyroscopeDataEventArgs Gyro = data.gyroscopeData.First(X => X.Timestamp == AGOStamp); return(buildRecordUsing(Emg, Acc, Gyro, Ori)); }
private void EmgDataAcquired(object sender, EmgDataEventArgs e) { if (streamData == true) { string tmpEmg = ""; for (var i = 0; i < 8; ++i) { tmpEmg += e.EmgData.GetDataForSensor(i).ToString() + ","; } EMG = /*DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString() +*/ tmpEmg; Publish("/i5/myo/emg", tmpEmg.Substring(0, tmpEmg.Length - 1)); } }
private void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e) { CalculateGripPressure(e); if (gripEMG > 2) { if (mWindow.myConnector.startedByHub == true) { mWindow.myConnector.sendFeedback(gripEMG.ToString()); } } if (mWindow.start == true) { SendDataConnector(); } }
public void GetEmgData_ValidState_EqualsConstructorParameter() { // Setup var emgData = new Mock <IEmgData>(); var args = new EmgDataEventArgs( new Mock <IMyo>().Object, DateTime.UtcNow, emgData.Object); // Execute var result = args.EmgData; // Assert Assert.Equal(emgData.Object, result); }
public void GetMyo_ValidState_EqualsConstructorParameter() { // Setup var myo = new Mock <IMyo>(); var args = new EmgDataEventArgs( myo.Object, DateTime.UtcNow, new Mock <IEmgData>().Object); // Execute var result = args.Myo; // Assert Assert.Equal(myo.Object, result); }
public void GetTimestamp_ValidState_EqualsConstructorParameter() { // Setup var timestamp = DateTime.UtcNow; var args = new EmgDataEventArgs( new Mock <IMyo>().Object, timestamp, new Mock <IEmgData>().Object); // Execute var result = args.Timestamp; // Assert Assert.Equal(timestamp, result); }
public void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e) { ++countEmgSets; var data0 = Math.Abs(e.EmgData.GetDataForSensor(0)); var data1 = Math.Abs(e.EmgData.GetDataForSensor(1)); var data2 = Math.Abs(e.EmgData.GetDataForSensor(2)); var data3 = Math.Abs(e.EmgData.GetDataForSensor(3)); var data4 = Math.Abs(e.EmgData.GetDataForSensor(4)); var data5 = Math.Abs(e.EmgData.GetDataForSensor(5)); var data6 = Math.Abs(e.EmgData.GetDataForSensor(6)); var data7 = Math.Abs(e.EmgData.GetDataForSensor(7)); movingSums[movingIndex, 0] = data0; movingSums[movingIndex, 1] = data1; movingSums[movingIndex, 2] = data2; movingSums[movingIndex, 3] = data3; movingSums[movingIndex, 4] = data4; movingSums[movingIndex, 5] = data5; movingSums[movingIndex, 6] = data6; movingSums[movingIndex, 7] = data7; movingIndex++; if (movingIndex >= movAvgCount) { movingIndex = 0; } /* * sumEmg[0] += data0; * sumEmg[1] += data1; * sumEmg[2] += data2; * sumEmg[3] += data3; * sumEmg[4] += data4; * sumEmg[5] += data5; * sumEmg[6] += data6; * sumEmg[7] += data7; */ maxEmg[0] = data0 > maxEmg[0] ? data0 : maxEmg[0]; maxEmg[1] = data1 > maxEmg[1] ? data1 : maxEmg[1]; maxEmg[2] = data2 > maxEmg[2] ? data2 : maxEmg[2]; maxEmg[3] = data3 > maxEmg[3] ? data3 : maxEmg[3]; maxEmg[4] = data4 > maxEmg[4] ? data4 : maxEmg[4]; maxEmg[5] = data5 > maxEmg[5] ? data5 : maxEmg[5]; maxEmg[6] = data6 > maxEmg[6] ? data6 : maxEmg[6]; maxEmg[7] = data7 > maxEmg[7] ? data7 : maxEmg[7]; }
private static void MyoEmgDataHandler(object sender, EmgDataEventArgs e) { //this function tells about actual activity of patient //communicates with M2X and surface in State of Patient table, where are 3 types of states //0 - low activity, possibly sleeping 1 - moderate activity 2 - high activity, patient may need some help for (int i = 0; i < 8; i++) { emgList[i].Add(Math.Abs(e.EmgData.GetDataForSensor(i))); } if (emgCounter == 1000 && !taskRunning) { taskRunning = true; emgCounter = 0; List <List <int> > emgTask = new List <List <int> >(emgList); double averageCounter = 0; foreach (var list in emgTask) { averageCounter += list.Average(); } if (averageCounter <= 10) { response = patientState.UpdateValue(new StreamValue { value = "0" }).Result; } if (averageCounter > 10 && averageCounter <= 70) { response = patientState.UpdateValue(new StreamValue { value = "1" }).Result; } if (averageCounter > 70) { response = patientState.UpdateValue(new StreamValue { value = "2" }).Result; } Console.WriteLine(averageCounter); taskRunning = false; foreach (var list in emgList) { list.Clear(); } } emgCounter++; }
/// <summary> /// Iterate through each emg sensor in myo and assign 1 if the sum of the first and second frame of emg has a sum of more than 20. /// else assign 0. It means that much variation(100 to -100) was observed propotional to higher tension in muscle. /// /// </summary> /// <param name="e"></param> void CalculateGripPressure(EmgDataEventArgs e) { gripEMG = 0; int[] emgTension = new int[8]; for (int i = 0; i < 7; i++) { try { if ((firstPreEmgValue[i] + secPreEmgValue[i] + Math.Abs(e.EmgData.GetDataForSensor(i))) <= 20) { emgTension[i] = 0; } else { emgTension[i] = 1; } } catch { Debug.WriteLine("Myo not connceted"); } } //add all value from emgTension and assign it to avgTension Array.ForEach(emgTension, delegate(int i) { gripEMG += i; }); mWindow.UpdateGripPressure(gripEMG); try { for (int i = 0; i < 7; i++) { secPreEmgValue[i] = firstPreEmgValue[i]; firstPreEmgValue[i] = Math.Abs(e.EmgData.GetDataForSensor(i)); } } catch { Debug.WriteLine("No emg value"); } }
private void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e) { if (_isRecording == true) { if ((DateTime.Now - lastExecutionEmg).TotalSeconds >= 0.5) { CalculateEMGValues(e); SendData(); lastExecutionEmg = DateTime.Now; } //vibrate only twice a sec if (vibrateMyo == true) { if (gripEMG >= 4) { Debug.WriteLine("gripEmg" + gripEMG); pingMyo(); try { myConnector.sendFeedback("Read Grip the pen gently"); } catch { Debug.WriteLine("feedback not sent"); } lastExecutionVibrate = DateTime.Now; vibrateMyo = false; } } if ((DateTime.Now - lastExecutionVibrate).TotalSeconds >= 0.5) { vibrateMyo = true; } gripEMG = 0; } }
private void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e) { EMGChangedEventArgs emgArgs = new EMGChangedEventArgs(); emgArgs.EMGPod_0 = e.Myo.EmgData.GetDataForSensor(0); emgArgs.EMGPod_1 = e.Myo.EmgData.GetDataForSensor(1); emgArgs.EMGPod_2 = e.Myo.EmgData.GetDataForSensor(2); emgArgs.EMGPod_3 = e.Myo.EmgData.GetDataForSensor(3); emgArgs.EMGPod_4 = e.Myo.EmgData.GetDataForSensor(4); emgArgs.EMGPod_5 = e.Myo.EmgData.GetDataForSensor(5); emgArgs.EMGPod_6 = e.Myo.EmgData.GetDataForSensor(6); emgArgs.EMGPod_7 = e.Myo.EmgData.GetDataForSensor(7); OnEMGChanged(emgArgs); //Console.WriteLine(emgArgs.EMGPod_7.ToString()); //CalculateGripPressure(e); //GripPressureChangedEventArgs args = new GripPressureChangedEventArgs(); //args.gripPressure = gripEMG; //OnGripPressureChanged(args); //gripEMG = 0; }
public MyoData buildRecordUsing(EmgDataEventArgs Emg, AccelerometerDataEventArgs Acc, GyroscopeDataEventArgs Gyro, OrientationDataEventArgs Ori) { return(new MyoData() { Time_stamp = Acc.Timestamp, Acc_X = Acc.Accelerometer.X, Acc_Y = Acc.Accelerometer.Y, Acc_Z = Acc.Accelerometer.Z, Gyro_X = Gyro.Gyroscope.X, Gyro_Y = Gyro.Gyroscope.Y, Gyro_Z = Gyro.Gyroscope.Z, Ori_X = Ori.Orientation.X, Ori_Y = Ori.Orientation.Y, Ori_Z = Ori.Orientation.Z, Ori_W = Ori.Orientation.W, Emg_1 = Emg.EmgData.GetDataForSensor(0), Emg_2 = Emg.EmgData.GetDataForSensor(1), Emg_3 = Emg.EmgData.GetDataForSensor(2), Emg_4 = Emg.EmgData.GetDataForSensor(3), Emg_5 = Emg.EmgData.GetDataForSensor(4), Emg_6 = Emg.EmgData.GetDataForSensor(5), Emg_7 = Emg.EmgData.GetDataForSensor(6), Emg_8 = Emg.EmgData.GetDataForSensor(7), EmgMAV = 1.0d / 8.0d * ( Math.Abs(Emg.EmgData.GetDataForSensor(0)) + Math.Abs(Emg.EmgData.GetDataForSensor(1)) + Math.Abs(Emg.EmgData.GetDataForSensor(2)) + Math.Abs(Emg.EmgData.GetDataForSensor(3)) + Math.Abs(Emg.EmgData.GetDataForSensor(4)) + Math.Abs(Emg.EmgData.GetDataForSensor(5)) + Math.Abs(Emg.EmgData.GetDataForSensor(6)) + Math.Abs(Emg.EmgData.GetDataForSensor(7))), Pitch = Ori.Pitch, Roll = Ori.Roll, Yaw = Ori.Yaw, }); }
private static void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e) { // TODO: write your code to interpret EMG data! }
public void ChannelEventReceived_Emg_TriggersEmgDataAcquiredEvent() { // Setup var routeEventArgs = new RouteMyoEventArgs( new IntPtr(123), new IntPtr(789), MyoEventType.Emg, DateTime.UtcNow); var gyroscope = new Vector3F(10, 20, 30); var channelListener = new Mock <IChannelListener>(MockBehavior.Strict); var myoDeviceDriver = new Mock <IMyoDeviceDriver>(MockBehavior.Strict); myoDeviceDriver .SetupGet(x => x.Handle) .Returns(new IntPtr(123)); for (int i = 0; i < 8; i++) { myoDeviceDriver .Setup(x => x.GetEventEmg(routeEventArgs.Event, i)) .Returns((sbyte)(i * 10)); } var myo = Myo.Create( channelListener.Object, myoDeviceDriver.Object); EmgDataEventArgs actualEventArgs = null; object actualSender = null; myo.EmgDataAcquired += (sender, args) => { actualSender = sender; actualEventArgs = args; }; // Execute channelListener.Raise( x => x.EventReceived += null, routeEventArgs); // Assert Assert.Equal(myo, actualSender); Assert.Equal(myo, actualEventArgs.Myo); Assert.Equal(routeEventArgs.Timestamp, actualEventArgs.Timestamp); Assert.NotNull(actualEventArgs.EmgData); Assert.Equal(0, actualEventArgs.EmgData.GetDataForSensor(0)); Assert.Equal(10, actualEventArgs.EmgData.GetDataForSensor(1)); Assert.Equal(20, actualEventArgs.EmgData.GetDataForSensor(2)); Assert.Equal(30, actualEventArgs.EmgData.GetDataForSensor(3)); Assert.Equal(40, actualEventArgs.EmgData.GetDataForSensor(4)); Assert.Equal(50, actualEventArgs.EmgData.GetDataForSensor(5)); Assert.Equal(60, actualEventArgs.EmgData.GetDataForSensor(6)); Assert.Equal(70, actualEventArgs.EmgData.GetDataForSensor(7)); myoDeviceDriver.VerifyGet(x => x.Handle, Times.Once); myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 0), Times.Once); myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 1), Times.Once); myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 2), Times.Once); myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 3), Times.Once); myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 4), Times.Once); myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 5), Times.Once); myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 6), Times.Once); myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 7), Times.Once); }