Microsoft Band UV传感器数据不熟悉

时间:2015-05-12 07:51:44

标签: c# windows-phone-8 microsoft-band

我在Windows Phone 8.1上使用Microsoft Band开发。试图弄清楚他是否具备紫外线传感器的全部功能。我找到了一些找到紫外线水平的例子。它们表明可以使用枚举

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

还想知道这些枚举的规模是多少。据我所知,有0到11级以上的UI。这些枚举的范围是什么?

我基本上使用代码行

  {
  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;
        }

但出于某种原因,我大部分时间都没有得到索引。在阳光直射下,我有时会获得大约800万到1000万(或数千)的读数。值在“int”中(虽然有时会给出枚举)。 我感兴趣的是,我如何衡量它。还有,紫外线究竟在读什么?我知道有很多种紫外线照射。但是我该如何使用这些数据呢? 如果它是一个范围,那么也许我可以放置一个范围值,但我需要以某种方式对其进行采样,它具有哪些UV索引并将该信息提供给用户。并在以后的计算中使用索引。

同时... 我碰巧遇到了一个bug。在测试紫外线时,当我站在直射光线下时,读数没有显示出来。只有当我移动到另一个紫外线水平时,它才会改变(但永远不会回到第一个)。但似乎第一个读数要么没有改变(因为方法是“readchanged”)或者是默认位置。无论多么有意义。有没有办法在按钮点击时调出阅读?

如果需要,我可以搜索我使用的示例,以获取代码的模式深度。但大部分都在这里。

1 个答案:

答案 0 :(得分:0)

此传感器与其他传感器略有不同。它确实需要用户执行操作以获取数据,然后可以收集数据。 这是一个代码,用于处理带有Band的WP8.1。

    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;
    }