예제 #1
0
        async private void ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
        {
            if (setAdaptive && arrLamp.Count != 0)
            {
                uint LIGHT_CUTOFF          = 400;
                LightSensorReading reading = args.Reading;
                if (reading.IlluminanceInLux > LIGHT_CUTOFF)
                {
                    foreach (LampStateConsumer s in arrLamp)
                    {
                        await s.SetBrightnessAsync(0);
                    }
                }
                else
                {
                    // Get a ratio and scale it to the light bulb's range
                    // light is roughly logarithmic from lumens to human perception of brightness
                    //double illum_value = 1 - (Math.Log10(reading.IlluminanceInLux) / 5.0);

                    double illum_value = (LIGHT_CUTOFF - reading.IlluminanceInLux) / LIGHT_CUTOFF;
                    // Round the value to the next highest integer (precision loss is negligible when working
                    // on the order of 4 billion
                    uint rounded_value = (uint)Math.Ceiling(illum_value * uint.MaxValue);
                    foreach (LampStateConsumer s in arrLamp)
                    {
                        await s.SetBrightnessAsync(rounded_value);
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Ambient Light Sensor adjusts the brightness of the display. Less ambient light equates to a dimmer display.
        /// </summary>
        /// <param name="lightSensor"></param>
        /// <param name="e"></param>
        private async void LightSensor_ReadingChanged(LightSensor lightSensor, LightSensorReadingChangedEventArgs e)
        {
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                try
                {
                    LightSensorReading lightSensorReading = lightSensor.GetCurrentReading();

                    if (BrightnessOverrideSetting != null && BrightnessOverrideSetting.IsSupported)
                    {
                        const double maximumAllowedBrightness            = 0.15;
                        const double highestLuxValueBeforeFullBrightness = 25.0;

                        double brightness = Math.Min(lightSensorReading.IlluminanceInLux, highestLuxValueBeforeFullBrightness) / highestLuxValueBeforeFullBrightness *maximumAllowedBrightness;

                        if (PreviousDisplayBrightness != brightness)
                        {
                            BrightnessOverrideSetting.SetBrightnessLevel(brightness, DisplayBrightnessOverrideOptions.None);

                            PreviousDisplayBrightness = brightness;
                        }
                    }
                }
                catch (Exception ex)
                {
                    Telemetry.TrackException(nameof(LightSensor_ReadingChanged), ex);
                }
            });
        }
예제 #3
0
 private void OnLightSensorReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
 {
     Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
     {
         txtLux.Text = args.Reading.IlluminanceInLux.ToString();
     });
 }
 async void MainPage_ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
 {
     await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
     {
         TextLight.Text = string.Format(@"Light Sensor : {0}", args.Reading.IlluminanceInLux.ToString());
     });
 }
 /// <summary>
 /// This is the event handler for ReadingChanged events.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 async private void ReadingChanged(object sender, LightSensorReadingChangedEventArgs e)
 {
     await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
     {
         LightSensorReading reading = e.Reading;
         ScenarioOutput_LUX.Text    = String.Format("{0,5:0.00}", reading.IlluminanceInLux);
     });
 }
 private async void Sensor_ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
 {
     float          lux   = args.Reading.IlluminanceInLux;
     LightStateEnum state = GetState(lux);
     await Dispatcher.RunAsync(
         CoreDispatcherPriority.Normal,
         () => ChangeMode(state));
 }
예제 #7
0
 async void sensor_ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
 {
     await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
     {
         Lux.Text       = args.Reading.IlluminanceInLux.ToString();
         TimeStamp.Text = args.Reading.Timestamp.ToString();
     });
 }
예제 #8
0
        private async void lightSensor_ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
        {
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                LightSensorReading reading = args.Reading;

                illumination.Text = String.Format("{0,2:0.00}", reading.IlluminanceInLux.ToString());
            });
        }
예제 #9
0
        void OnReadingChanged(Sensor sender, LightSensorReadingChangedEventArgs args)
        {
            var handler = changed;

            if (handler != null)
            {
                var value = args.Reading.IlluminanceInLux;
                var e     = new AmbientLightEventArgs(value);
                handler.Invoke(this, e);
            }
        }
예제 #10
0
        void _lightSensor_ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
        {
            _dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                Lux = args.Reading.IlluminanceInLux;
                AppFrame.RequestedTheme =
                    State.Equals("Dark", StringComparison.CurrentCultureIgnoreCase) ?
                    ElementTheme.Dark : ElementTheme.Light;
            });

            Debug.WriteLine("Lux: {0}", Lux);
        }
예제 #11
0
        private void LightSensor_ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
        {
            if (!_autoLightDetectionEnabled)
            {
                return;
            }

            ushort currentLightSensorValue = Convert.ToUInt16(args.Reading.IlluminanceInLux);
            bool   currentThemeIsDark      = Convert.ToUInt16(_windowsThemeRegistryKey?.GetValue(WindowsRegistryKeys.ThemeKeyAppsThemeValue)) == 0;
            bool   toSetDarkTheme          = currentLightSensorValue < 20;
            bool   hasToChangeTheme        = currentThemeIsDark ^ toSetDarkTheme;

            if (hasToChangeTheme)
            {
                SetTheme(toSetDarkTheme, true);
            }
        }
예제 #12
0
 /// <summary>
 /// Light sensor reading changed. Send data to Azure Event Hub if checkbox checked in the UI
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 async private void light_ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
 {
     await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
     {
         txtLightSensor.Text = args.Reading.IlluminanceInLux.ToString();
         if (Convert.ToBoolean(chkLightSensor.IsChecked))
         {
             ConnectTheDotsSensor sensor = ctdHelper.sensors.Find(item => item.measurename == "Light");
             if (sensor != null)
             {
                 sensor.value       = args.Reading.IlluminanceInLux;
                 sensor.timecreated = DateTime.UtcNow.ToString("o");
                 ctdHelper.sendMessage(sensor.ToJson());
             }
         }
     });
 }
예제 #13
0
        public async void NewLight(LightSensor sender, LightSensorReadingChangedEventArgs args)
        {
            var reading = args == null?sender?.GetCurrentReading() : args.Reading;

            await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                this[LIGHTSENSOR] = reading == null
                    ? this[LIGHTSENSOR].New()
                    : this[LIGHTSENSOR].New(reading.IlluminanceInLux, 0, 0, 0);
                if (this[LIGHTSENSOR].IsChanged)
                {
                    OnPropertyChanged(new PropertyChangedEventArgs("ItemsList"));
                    OnSensorUpdated?.Invoke(this[LIGHTSENSOR]);
                }
            });

            if (SensorSwitches.P.HasValue && (SensorSwitches.P.Value == 1 || SensorSwitches.P.Value == 3))
            {
                SensorSwitches.P = 0;
            }
        }
        private async void LightSensorReadingChanged(object sender, LightSensorReadingChangedEventArgs e)
        {
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                LightSensorReading reading = e.Reading;
                object x, y;
                reading.Properties.TryGetValue("{C458F8A7-4AE8-4777-9607-2E9BDD65110A} 62", out x);
                reading.Properties.TryGetValue("{C458F8A7-4AE8-4777-9607-2E9BDD65110A} 63", out y);

                double chromaticity_x = -1, chromaticity_y = -1;
                try
                {
                    chromaticity_x = double.Parse(x.ToString());
                    chromaticity_y = double.Parse(y.ToString());
                }
                catch { }

                textblockLux.Text           = reading.IlluminanceInLux.ToString();
                textblockChromaticityx.Text = chromaticity_x.ToString();
                textblockChromaticityy.Text = chromaticity_y.ToString();
            });
        }
예제 #15
0
        private async void OnLightSensorReadingChangedAsync(LightSensor sender, LightSensorReadingChangedEventArgs args)
        {
            if (IsAutoExposureOn)
            {
                if (_lightMeasurements.Count > 10)
                {
                    double average = _lightMeasurements.Average();
                    double delta   = Math.Max(average, _lastLightMeasurement) - Math.Min(average, _lastLightMeasurement);

                    if (Math.Max(average, _lastLightMeasurement) / delta > 0.3)  // 30% change
                    {
                        await AdjustExposureAsync(average);
                    }

                    _lightMeasurements.Clear();
                }
                else
                {
                    _lightMeasurements.Add(args.Reading.IlluminanceInLux);
                }
            }
        }
예제 #16
0
 static void lightSensor_ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
 {
     //Log.Write("LightSensor Reading: " + args.Reading.IlluminanceInLux);
 }
        private async void ReadingChangedAsync(object sender, LightSensorReadingChangedEventArgs e)
        {
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                LightSensorReading reading = e.Reading;
                var lux = reading.IlluminanceInLux;
                if (lux < MIN_LUX)
                {
                    if (state == 0)
                    {
                        state = 1;
                        span  = 0;
                    }
                    if (span < 100)
                    {
                        span++;
                    }
                }
                else
                {
                    if (state > 0)
                    {
                        if (state == 1)
                        {
                            if (span <= 10 && span >= 5)
                            {
                                txtOutput.Text += "·";
                                readed          = false;
                            }
                            else if (span > 10 && span <= 50)
                            {
                                txtOutput.Text += "-";
                                readed          = false;
                            }
                        }
                        state = 0;
                        span  = 0;
                    }
                    span++;
                    if (span > 10 && !readed)
                    {
                        //Letter recognition
                        //TODO: Binary search tree can be used to improve efficiency.
                        switch (txtOutput.Text)
                        {
                        case "·-":
                            txtMsg.Text += "A";
                            break;

                        case "-···":
                            txtMsg.Text += "B";
                            break;

                        case "-·-·":
                            txtMsg.Text += "C";
                            break;

                        case "-··":
                            txtMsg.Text += "D";
                            break;

                        case "·":
                            txtMsg.Text += "E";
                            break;

                        case "··-·":
                            txtMsg.Text += "F";
                            break;

                        case "--·":
                            txtMsg.Text += "G";
                            break;

                        case "····":
                            txtMsg.Text += "H";
                            break;

                        case "··":
                            txtMsg.Text += "I";
                            break;

                        case "·---":
                            txtMsg.Text += "J";
                            break;

                        case "-·-":
                            txtMsg.Text += "K";
                            break;

                        case "·-··":
                            txtMsg.Text += "L";
                            break;

                        case "--":
                            txtMsg.Text += "M";
                            break;

                        case "-·":
                            txtMsg.Text += "N";
                            break;

                        case "---":
                            txtMsg.Text += "O";
                            break;

                        case "·--·":
                            txtMsg.Text += "P";
                            break;

                        case "--·-":
                            txtMsg.Text += "Q";
                            break;

                        case "·-·":
                            txtMsg.Text += "R";
                            break;

                        case "···":
                            txtMsg.Text += "S";
                            break;

                        case "-":
                            txtMsg.Text += "T";
                            break;

                        case "··-":
                            txtMsg.Text += "U";
                            break;

                        case "···-":
                            txtMsg.Text += "V";
                            break;

                        case "·--":
                            txtMsg.Text += "W";
                            break;

                        case "-··-":
                            txtMsg.Text += "X";
                            break;

                        case "-·--":
                            txtMsg.Text += "Y";
                            break;

                        case "--··":
                            txtMsg.Text += "Z";
                            break;
                        }
                        txtOutput.Text = "";
                        readed         = true;
                    }

                    if (span == 20)
                    {
                        //Next word
                        txtMsg.Text += " ";
                    }
                    else if (span == 100)
                    {
                        //Refresh
                        txtMsg.Text = "";
                        span        = 0;
                    }
                }
                string des   = lux > MIN_LUX ? "High" : "Low";
                txtData.Text = $"{des} {state} {span}";
            });
        }
예제 #18
0
 private void LightSensorOnReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
 {
     _sensorSettings.LatestLightSensorReading = args.Reading;
 }