Example #1
0
        private void CC2650Sensor_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));
                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 CC2650Sensor()
            : base()
        {
            accelerometer = new Accelerometer();
            humidity      = new HumiditySensor();
            light         = new LightSensor();
            pressure      = new PressureSensor();
            temperature   = new IRTemperatureSensor();
            battery       = new BatteryLevel();

            key = new SimpleKeyService();
            io  = new IOService();

            accelerometer.SensorValueChanged += CC2650Sensor_SensorValueChanged;
            humidity.SensorValueChanged      += CC2650Sensor_SensorValueChanged;
            light.SensorValueChanged         += CC2650Sensor_SensorValueChanged;
            pressure.SensorValueChanged      += CC2650Sensor_SensorValueChanged;
            temperature.SensorValueChanged   += CC2650Sensor_SensorValueChanged;
            battery.SensorValueChanged       += CC2650Sensor_SensorValueChanged;
            key.SensorValueChanged           += CC2650Sensor_SensorValueChanged;
        }
        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;
            }
        }