0

我在 Windows Phone 8.1 上使用 Microsoft Band of development。试图弄清楚紫外线传感器的全部功能。我找到了几个例子,可以找到紫外线水平。他们表明可以使用枚举:

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

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

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

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

4

2 回答 2

1

新的 Band SDK 即将推出,将修复未正确返回的 UV 传感器数据。敬请期待!

于 2015-09-10T13:20:15.657 回答
0

这个传感器与其他传感器有点不同。它确实需要用户执行获取数据的操作,然后才能收集数据。这是一个在带乐队的 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;
    }
于 2015-05-12T13:59:12.243 回答