private void CC2541Sensor_SensorValueChanged(object sender, SensorValueChangedEventArgs e) { switch (e.Origin) { case SensorName.Accelerometer: double[] accValues = Accelerometer.CalculateCoordinates(e.RawData, 1 / 64.0); lock (lastSensorReading) { lastSensorReading.AccelX = accValues[0]; lastSensorReading.AccelY = accValues[1]; lastSensorReading.AccelZ = accValues[2]; } break; case SensorName.HumiditySensor: double rh = HumiditySensor.CalculateHumidityInPercent(e.RawData); lock (lastSensorReading) { lastSensorReading.Humidity = rh; } break; case SensorName.PressureSensor: double hp = (PressureSensor.CalculatePressure(e.RawData, pressure.CalibrationData) / 100); lock (lastSensorReading) { lastSensorReading.Pressure = hp; } break; case SensorName.SimpleKeyService: bool leftKey = false; if (SimpleKeyService.LeftKeyHit(e.RawData)) { leftKey = true; } bool rightKey = false; if (SimpleKeyService.RightKeyHit(e.RawData)) { rightKey = true; } lock (lastSensorReading) { lastSensorReading.LeftKey = leftKey; lastSensorReading.RightKey = rightKey; } break; case SensorName.TemperatureSensor: double ambient = IRTemperatureSensor.CalculateAmbientTemperature(e.RawData, TemperatureScale.Celsius); double target = IRTemperatureSensor.CalculateTargetTemperature(e.RawData, ambient, TemperatureScale.Celsius); lock (lastSensorReading) { lastSensorReading.ATemperature = ambient; lastSensorReading.OTemperature = target; } break; } }
public void OnSensorValueChanged(SensorValueChangedEventArgs e) { var luxValue = ((int)e.Value).ToString(); if (sensorValueLabel.InvokeRequired) { sensorValueLabel.Invoke(new Action( () => { sensorValueLabel.Text = luxValue; } ) ); } else { sensorValueLabel.Text = luxValue; } }
void HandleSensorValueChanged(object sender, SensorValueChangedEventArgs e) { if (e.SensorType == MotionSensorType.Accelerometer) { double x = ((MotionVector)e.Value).X; double y = ((MotionVector)e.Value).Y; double z = ((MotionVector)e.Value).Z; var currentTime = DateTime.Now; if (_hasUpdated == false) { _hasUpdated = true; _lastUpdate = currentTime; } else { var hasMinimumTimeElapsed = (currentTime - _lastUpdate).TotalMilliseconds > _shakeDetectionTimeLapse; if (!hasMinimumTimeElapsed) { return; } _lastUpdate = currentTime; var timeSinceLastShakeInMilliseconds = (currentTime - _lastUpdate).TotalMilliseconds; var totalMovementDistance = x + y + z - _lastX - _lastY - _lastZ; var shakeSpeed = Math.Abs(totalMovementDistance) / timeSinceLastShakeInMilliseconds * 10000; Debug.WriteLine($"Shake Speed: {shakeSpeed}"); if (shakeSpeed > _shakeThreshold) { HandleShake(); } } _lastX = x; _lastY = y; _lastZ = z; } }
private void Calibrating(object sender, SensorValueChangedEventArgs e) { if (averaging && calibrating) { accelTimeSpan = DateTime.Now - tempTime; if (accelTimeSpan.Milliseconds != 0) { accelsPerSec = Math.Round(2000f / accelTimeSpan.Milliseconds, 0); //Debug.WriteLine("Acceleromters per seconds:" + accelsPerSec); calibrating = false; } else { accelsPerSec = 25; calibrating = false; } } if (!averaging || !calibrating) { CrossDeviceMotion.Current.SensorValueChanged -= Calibrating; } }
private void OnSensorValueChanged(object sender, SensorValueChangedEventArgs e) { Device.BeginInvokeOnMainThread(() => { switch (e.SensorType) { case MotionSensorType.Accelerometer: labelAcc.Text = e.Value.ToString(); break; case MotionSensorType.Gyroscope: labelGyro.Text = e.Value.ToString(); break; case MotionSensorType.Magnetometer: labelMagnet.Text = e.Value.ToString(); break; case MotionSensorType.Compass: labelCompass.Text = e.Value.ToString(); break; } }); }
private void CC2650Sensor_SensorValueChanged(object sender, SensorValueChangedEventArgs e) { //Debug.WriteLine("*CC2650Sensor_SensorValueChanged:" + e.Origin); switch (e.Origin) { case SensorName.Accelerometer: float[] accValues = Accelerometer.CalculateCoordinates(e.RawData, AccelRange); lock (lastSensorReading) { lastSensorReading.AccelX = accValues[0]; lastSensorReading.AccelY = accValues[1]; lastSensorReading.AccelZ = accValues[2]; lastSensorReading.GyroX = accValues[3]; lastSensorReading.GyroY = accValues[4]; lastSensorReading.GyroZ = accValues[5]; lastSensorReading.MagX = accValues[6]; lastSensorReading.MagY = accValues[7]; lastSensorReading.MagZ = accValues[8]; } break; case SensorName.HumiditySensor: double rh = HumiditySensor.CalculateHumidityInPercent(e.RawData); double rt = HumiditySensor.CalculateHumidityTempareture(e.RawData, TemparetureScale); lock (lastSensorReading) { lastSensorReading.Humidity = rh; lastSensorReading.HTemperature = rt; } break; case SensorName.LightSensor: double rl = LightSensor.CalculateLightnessInLux(e.RawData); lock (lastSensorReading) { lastSensorReading.Lightness = rl; } //Special service for Battery here! Task <byte[]> task = Task.Run(() => BatteryLevel.GetLevel()); byte[] bytes = task.Result; if (bytes != null) { double bl = BatteryLevel.CalculateBatteryInPercent(bytes); //Debug.WriteLine("Battery Level:" + (int) bl); lock (lastSensorReading) { lastSensorReading.BatteryLevel = bl; } } break; case SensorName.PressureSensor: double hp = (PressureSensor.CalculatePressure(e.RawData)); double ht = (PressureSensor.CalculatePressureTempareture(e.RawData, TemparetureScale)); lock (lastSensorReading) { lastSensorReading.Pressure = hp; lastSensorReading.PTemperature = ht; } break; case SensorName.BatteryLevel: Debug.WriteLine("Battery Level Service is not here."); break; case SensorName.SimpleKeyService: bool leftKey = false; if (SimpleKeyService.LeftKeyHit(e.RawData)) { leftKey = true; //Debug.WriteLine("leftKey"); } bool rightKey = false; if (SimpleKeyService.RightKeyHit(e.RawData)) { rightKey = true; //Debug.WriteLine("rightKey"); } lock (lastSensorReading) { lastSensorReading.LeftKey = leftKey; lastSensorReading.RightKey = rightKey; } break; case SensorName.TemperatureSensor: double ambient = IRTemperatureSensor.CalculateAmbientTemperature(e.RawData, TemparetureScale); double target = IRTemperatureSensor.CalculateTargetTemperature(e.RawData, ambient, TemparetureScale); lock (lastSensorReading) { lastSensorReading.ATemperature = ambient; lastSensorReading.OTemperature = target; } break; } }
private void Current_SensorValueChanged(object sender, SensorValueChangedEventArgs a) { switch (a.SensorType) { case MotionSensorType.Accelerometer: Accelerometer = (MotionVector)a.Value; _accelPitch = 180 / Math.PI * Math.Atan(Accelerometer.X / Math.Sqrt(Math.Pow(Accelerometer.Y, 2) + Math.Pow(Accelerometer.Z, 2))); _accelRoll = 180 / Math.PI * Math.Atan(Accelerometer.Y / Math.Sqrt(Math.Pow(Accelerometer.X, 2) + Math.Pow(Accelerometer.Z, 2))) - level; break; case MotionSensorType.Gyroscope: Gyroscope = (MotionVector)a.Value; break; } if (averaging) { min = _accelRoll; max = _accelRoll; Rolls.Add(_accelRoll); foreach (var m in Rolls) { if (min > m) { min = m; } } foreach (var m in Rolls) { if (max < m) { max = m; } } foreach (var roll in Rolls) { _accelRoll += roll; } _accelRoll /= (Rolls.Count + 1); if (Rolls.Count > accelsPerSec) { Rolls.RemoveAt(0); } } else { if (_accelRoll * Math.Sign(_accelPitch) > 0) { if (Math.Abs(_accelRoll) > max) { max = Math.Abs(_accelRoll); } } else { if (Math.Abs(_accelRoll) > min) { min = Math.Abs(_accelRoll); } } } Device.BeginInvokeOnMainThread(() => { if (Math.Abs(min) < 5 && Math.Abs(max) < 5) { psOuter.Slices[0].Fill = OxyColor.FromArgb(255, 0, 255, 0); } else { if (Math.Abs(min) < 7 && Math.Abs(max) < 7) { psOuter.Slices[0].Fill = OxyColor.FromArgb(255, 255, 255, 0); } else { psOuter.Slices[0].Fill = OxyColor.FromArgb(255, 255, 0, 0); } } if (averaging) { psOuter.AngleSpan = Math.Abs(Math.Abs(max) - Math.Abs(min)) + 5; psOuter.StartAngle = -90 - max * Math.Sign(_accelPitch) - 1.5; } else { psOuter.AngleSpan = min + max; psOuter.StartAngle = -90 - max; } psInner.StartAngle = -90 - _accelRoll * Math.Sign(_accelPitch); psOuter.InsideLabelFormat = Math.Round(Math.Abs(_accelRoll), 1) + "°"; psOuter.OutsideLabelFormat = Math.Round(Math.Abs(min), 1) + "°-" + Math.Round(Math.Abs(max), 1) + "°"; model.Series.Clear(); model.Series.Add(psOuter); model.Series.Add(psInner); model.InvalidatePlot(true); }); }
private void CC2541Sensor_SensorValueChanged(object sender, SensorValueChangedEventArgs e) { switch (e.Origin) { case SensorName.Accelerometer: double[] accValues = Accelerometer.CalculateCoordinates(e.RawData, 1 / 64.0); lock (lastSensorReading) { lastSensorReading.AccelX = (float)accValues[0]; lastSensorReading.AccelY = (float)accValues[1]; lastSensorReading.AccelZ = (float)accValues[2]; } break; case SensorName.HumiditySensor: double rh = HumiditySensor.CalculateHumidityInPercent(e.RawData); lock (lastSensorReading) { lastSensorReading.Humidity = rh; } break; case SensorName.PressureSensor: double hp = (PressureSensor.CalculatePressure(e.RawData, pressure.CalibrationData) / 100); lock (lastSensorReading) { lastSensorReading.Pressure = hp; } break; case SensorName.SimpleKeyService: bool leftKey = false; if (SimpleKeyService.LeftKeyHit(e.RawData)) { Debug.WriteLine("leftKey"); leftKey = true; } bool rightKey = false; if (SimpleKeyService.RightKeyHit(e.RawData)) { Debug.WriteLine("rightKey"); rightKey = true; } lock (lastSensorReading) { lastSensorReading.LeftKey = leftKey; lastSensorReading.RightKey = rightKey; } break; case SensorName.TemperatureSensor: double ambient = IRTemperatureSensor.CalculateAmbientTemperature(e.RawData, TemperatureScale.Celsius); double target = IRTemperatureSensor.CalculateTargetTemperature(e.RawData, ambient, TemperatureScale.Celsius); lock (lastSensorReading) { lastSensorReading.ATemperature = ambient; lastSensorReading.OTemperature = target; } break; } }
/// <summary> /// Refresh the user interface /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void RefreshView(object sender, SensorValueChangedEventArgs e) { Device.BeginInvokeOnMainThread(async() => { double x = 0, y = 0, z = 0; switch (Device.OS) { case WinPhone: case Windows: x = Convert.ToDouble(((MotionVector)e.Value).X.ToString("F")); y = Convert.ToDouble(((MotionVector)e.Value).Y.ToString("F")); break; case Android: x = (Convert.ToDouble(((MotionVector)e.Value).X.ToString("F")) / 10) * (-1); y = (Convert.ToDouble(((MotionVector)e.Value).Y.ToString("F")) / 10) * (-1); break; case iOS: await CoreMethods.DisplayAlert("Error", "Not supported OS", "OK"); break; case Other: await CoreMethods.DisplayAlert("Error", "Not supported OS", "OK"); break; default: throw new ArgumentOutOfRangeException(); } if (Device.Idiom == TargetIdiom.Phone) { if (x <= 0.2 && x >= -0.2) { //Gerade aus if (y >= 0.2) { _speed = Steering.SpeedType.Faster; DirectionImage = "ic_expand_less_black_48dp.png"; } else if (y <= -0.2) { _speed = Steering.SpeedType.Slower; DirectionImage = "ic_expand_more_black_48dp.png"; } else { _direction = Steering.DirectionType.StraightOn; _speed = Steering.SpeedType.Equal; DirectionImage = ""; } } else { //Drehen if (x >= 0.2) { if (_direction == Steering.DirectionType.Left) { _direction = Steering.DirectionType.StraightOn; DirectionImage = ""; } else { _direction = Steering.DirectionType.Right; DirectionImage = "ic_chevron_right_black_48dp.png"; } } else if (x <= -0.2) { if (_direction == Steering.DirectionType.Right) { _direction = Steering.DirectionType.StraightOn; DirectionImage = ""; } else { _direction = Steering.DirectionType.Left; DirectionImage = "ic_chevron_left_black_48dp.png"; } } } } else if (Device.Idiom == TargetIdiom.Tablet) { if (y <= 0.2 && y >= -0.2) { //Gerade aus if (x >= 0.2) { _speed = Steering.SpeedType.Faster; DirectionImage = "ic_expand_less_black_48dp.png"; } else if (x <= -0.2) { _speed = Steering.SpeedType.Slower; DirectionImage = "ic_expand_more_black_48dp.png"; } else { _direction = Steering.DirectionType.StraightOn; _speed = Steering.SpeedType.Equal; DirectionImage = ""; } } else { //Drehen if (y >= 0.2) { _direction = Steering.DirectionType.Right; DirectionImage = "ic_chevron_right_black_48dp.png"; } else if (y <= -0.2) { _direction = Steering.DirectionType.Left; DirectionImage = "ic_chevron_left_black_48dp.png"; } } } else { await CoreMethods.DisplayAlert("Error", "Not supported target", "OK"); } }); }