Незнакомые данные УФ-датчика Microsoft Band

Я использую Microsoft Band разработки на Windows Phone 8.1. Пытаюсь выяснить все возможности УФ-датчика. Я нашел несколько примеров, которые находят уровень УФ. Они показывают, что можно использовать enum:

namespace Microsoft.Band.Sensors
{
  public enum UVIndexLevel
  {
    None = 0,
    Low = 1,
    Medium = 2,
    High = 3,
    VeryHigh = 4,
  }
}

Также хотелось бы знать, каков масштаб этих перечислений. Насколько я знаю, существует от 0 до 11+ уровней пользовательского интерфейса. Какие диапазоны эти перечисления?

Я в основном использую строку кода:

  {
  bandClient.SensorManager.UV.ReadingChanged += Ultraviolet_ReadingChanged;
  await bandClient.SensorManager.UV.StartReadingsAsync();

  *Later on code*

  await bandClient.SensorManager.UV.StopReadingsAsync();
  bandClient.SensorManager.UV.ReadingChanged -= Ultraviolet_ReadingChanged;
  }

Асинхронный метод:

async void Ultraviolet_ReadingChanged(object sender, BandSensorReadingEventArgs<IBandUVReading> e)
        {
          IBandUVReading ultra = e.SensorReading;
          UVIndexLevel potatoUV = ultra.IndexLevel;
        }

Но по какой-то причине я не получаю индексы большую часть времени. Иногда я получаю показания от 8 до 10 миллионов (или тысяч) под прямыми солнечными лучами. Значения находятся в «int» (хотя иногда дают перечисления). Меня интересует, как я могу это измерить. Кроме того, какой именно УФ он читает? Я знаю, что есть много видов воздействия ультрафиолета. Но как я могу использовать эти данные? Если это диапазон, то, возможно, я могу указать значение диапазона, но мне нужно каким-то образом отобрать его, какой у него УФ-индекс, и предоставить эту информацию пользователю. И использовать индекс в последующих расчетах.

ТАКЖЕ... Случайно я столкнулся с ошибкой. Во время тестирования УФ, когда я стоял под прямым светом, показания не отображались. Только когда я перешел на другой уровень UV, он изменился (но никогда не вернулся к первому). Но похоже, что первое чтение либо не меняется (поскольку метод «чтение изменено»), либо является местоположением по умолчанию. Однако в этом есть смысл. Есть ли способ вызвать чтение при нажатии кнопки?

Если нужно, я могу поискать примеры, которые я использовал, для глубины режима кода. Но большая часть здесь.


person GanDuumar    schedule 12.05.2015    source источник


Ответы (2)


Скоро будет доступен новый Band SDK, который исправит неправильный возврат данных УФ-датчика. Оставайтесь с нами!

person Laurent Ellerbach    schedule 10.09.2015
comment
да... Извините, начинаю использовать stackoverflow и еще не знаком со всеми соглашениями. - person Laurent Ellerbach; 11.09.2015

Этот датчик немного отличается от других. Это требует, чтобы пользователь выполнил действие для получения данных, а затем данные могут быть собраны. Вот код, который работает на WP8.1 с Band.

    DateTime start;

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            this.viewModel.StatusMessage = "Connecting to Band";
            // Get the list of Microsoft Bands paired to the phone.
            IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();
            if (pairedBands.Length < 1)
            {
                this.viewModel.StatusMessage = "This sample app requires a Microsoft Band paired to your phone. Also make sure that you have the latest firmware installed on your Band, as provided by the latest Microsoft Health app.";
                return;
            }

            // Connect to Microsoft Band.
            using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))
            {
                start = DateTime.Now;
                this.viewModel.StatusMessage = "Reading ultraviolet sensor";
                // Subscribe to Ultraviolet data.
                bandClient.SensorManager.UV.ReadingChanged += UV_ReadingChanged;
                await bandClient.SensorManager.UV.StartReadingsAsync();

                // Receive Accelerometer data for a while.
                await Task.Delay(TimeSpan.FromMinutes(5));
                await bandClient.SensorManager.UV.StopReadingsAsync();
                bandClient.SensorManager.UV.ReadingChanged -= UV_ReadingChanged;
            }
            this.viewModel.StatusMessage = "Done";
        }
        catch (Exception ex)
        {
            this.viewModel.StatusMessage = ex.ToString();
        }
    }

    void UV_ReadingChanged(object sender, Microsoft.Band.Sensors.BandSensorReadingEventArgs<Microsoft.Band.Sensors.IBandUVReading> e)
    {
        var span = (DateTime.Now - start).TotalSeconds;
        IBandUVReading ultra = e.SensorReading;
        string text = string.Format("Ultraviolet = {0}\nTime Stamp = {1}\nTime Span = {2}\n", ultra.IndexLevel, ultra.Timestamp, span);
        Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { this.viewModel.StatusMessage = text; }).AsTask();
        start = DateTime.Now;
    }
person Laurent Ellerbach    schedule 12.05.2015
comment
Этот код в основном такой же, как у меня. Это дает None is string в помещении, что правильно. Но на улице у меня были облака, и это говорило что-то около 196000 +. - person GanDuumar; 13.05.2015