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;
     }
 }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 4
0
        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;
            }
        }
Esempio n. 5
0
        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;
            }
        }
Esempio n. 7
0
        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);
            });
        }
Esempio n. 8
0
        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");
                }
            });
        }