//Updates Hr Display and EmotionZone Display private void UpdateEmotionMeasurementDisplay(EmotionMeasurement measurement) { if (HrText != null) { HrText.text = measurement.MeasurementType + ": " + (Convert.ToInt32(measurement.Measurement)); } }
/** * Method called on each new HR Measurement */ private void OnNewHRMeasurement(string deviceAddress, string characteristicUUID, byte[] bytes) { BluetoothLEHardwareInterface.Log("New Heart Rate Triggered"); if (deviceAddress.CompareTo(_connectedDevice.address) == 0) { if (IsEqual(characteristicUUID, _readHRCharacteristicUUID)) { if (_baseline == 0) { CalculateEmotionBaseline(); } EmotionMeasurement hrMeasurement = ProcessData(bytes); //Check if player is in new emotion zone EmotionZone currentZone = getEmotionZone(Convert.ToInt32(hrMeasurement.Measurement)); CurrentEmotionZone = currentZone; BluetoothLEHardwareInterface.Log("Heart Rate: " + hrMeasurement.Measurement + " Baseline: " + _baseline + " Emotion Zone: " + currentZone); } } }
/** * Process the raw data received from the device into application usable data, * according the the Bluetooth Heart Rate Profile. */ private EmotionMeasurement ProcessData(byte[] data) { // Heart Rate profile defined flag values const byte HEART_RATE_VALUE_FORMAT = 0x01; byte currentOffset = 0; byte flags = data[currentOffset]; bool isHeartRateValueSizeLong = ((flags & HEART_RATE_VALUE_FORMAT) != 0); currentOffset++; ushort heartRateMeasurementValue = 0; if (isHeartRateValueSizeLong) { heartRateMeasurementValue = (ushort)((data[currentOffset + 1] << 8) + data[currentOffset]); currentOffset += 2; } else { heartRateMeasurementValue = data[currentOffset]; currentOffset++; } //Calculate baseline if (_calculatingBaseline) { calculateBaseline(heartRateMeasurementValue); } EmotionMeasurement newMeasurement = new EmotionMeasurement(Convert.ToString(heartRateMeasurementValue), Convert.ToString(_baseline), "BPM", new DateTimeOffset()); if (NewEmotionMeasurementEvent != null) { NewEmotionMeasurementEvent(this, new NewEmotionMeasurmentEventArgs(newMeasurement)); } return(newMeasurement); }
//Updates Hr Display and EmotionZone Display private void UpdateEmotionMeasurementDisplay(EmotionMeasurement measurement){ if (HrText != null) { HrText.text = measurement.MeasurementType + ": " + (Convert.ToInt32 (measurement.Measurement)); } }
public NewEmotionMeasurmentEventArgs(EmotionMeasurement measurement) { _measurement = measurement; }
/** * Process the raw data received from the device into application usable data, * according the the Bluetooth Heart Rate Profile. */ private EmotionMeasurement ProcessData(byte[] data) { // Heart Rate profile defined flag values const byte HEART_RATE_VALUE_FORMAT = 0x01; byte currentOffset = 0; byte flags = data[currentOffset]; bool isHeartRateValueSizeLong = ((flags & HEART_RATE_VALUE_FORMAT) != 0); currentOffset++; ushort heartRateMeasurementValue = 0; if (isHeartRateValueSizeLong) { heartRateMeasurementValue = (ushort)((data[currentOffset + 1] << 8) + data[currentOffset]); currentOffset += 2; } else { heartRateMeasurementValue = data[currentOffset]; currentOffset++; } //Calculate baseline if (_calculatingBaseline) { calculateBaseline(heartRateMeasurementValue); } EmotionMeasurement newMeasurement = new EmotionMeasurement (Convert.ToString (heartRateMeasurementValue), Convert.ToString (_baseline), "BPM", new DateTimeOffset ()); if(NewEmotionMeasurementEvent != null) NewEmotionMeasurementEvent(this, new NewEmotionMeasurmentEventArgs(newMeasurement)); return newMeasurement; }