C # UWP "Подписаться на изменения стоимости" - PullRequest
0 голосов
/ 26 мая 2018
private async void Characteristic_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
        {

            // BT_Code: An Indicate or Notify reported that the value has changed.
            // Display the new value with a timestamp.
            var newValue = FormatValueByPresentation(args.CharacteristicValue, presentationFormat);
            var message = $"Value at {DateTime.Now:hh:mm:ss}: {newValue}";
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                () => CharacteristicLatestValue.Text = message);
        }

Это образец из github.Универсальные образцы BluetoothLE.Сейчас я сталкиваюсь с проблемой, когда я нажимаю кнопку «чтение», она отображает мое чтение rfduino.Но поскольку я хочу, чтобы он обновлялся автоматически при каждом изменении значения, мне нужно подписаться на изменение значения.

Однако, когда я нажимаю «Подписаться на изменение значения», я получаю только «Неизвестный формат».Любой специалист может помочь мне решить эту проблему шаг за шагом?Если возможно, мы можем использовать Teamviewer.

private async void CharacteristicReadButton_Click()
        {
             // BT_Code: Read the actual value from the device by using Uncached.
            GattReadResult result = await selectedCharacteristic.ReadValueAsync(BluetoothCacheMode.Uncached);
            if (result.Status == GattCommunicationStatus.Success)
            {
                string formattedResult = FormatValueByPresentation(result.Value, presentationFormat);

                rootPage.NotifyUser($"Read result: {formattedResult}", NotifyType.StatusMessage);  
            }
            else
            {
                rootPage.NotifyUser($"Read failed: {result.Status}", NotifyType.ErrorMessage);
            }     
        }

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Вам не хватает навыков кодирования, чтобы понять, что происходит.
Сломайте ваши желания обмениваться значениями между Rfuino и вашим приложением uwp.
Чтобы отправлять значения, вы должны составить некоторый протокол, чтобы знать, когда он действителен.сообщение получено.
Если Rfuino позволяет вам отправлять байтовый массив, делайте что-то вроде отправки начального байта, тогда ваши значения в байтах и ​​конечный байт.например, STX, значение X, значение Y, значение Z, ETX. (2 255 255 255,3).
если на принимающей стороне вы прочитали сообщение типа 2, 148 250 180, 3,3, то вы знаете, что получено верное сообщение.
Я не знаю много о Rfuino, но большинство ble-устройств могут отправлять подобные сообщения.
Также пример UWP сложен для понимания.
В вашем приложении UWP вы можете проверить, есть ли в вашем сообщениидлина 5 байтов и начинается с 2 и заканчивается 3. Посмотрите на мой простой пример Ble на GitHub: https://github.com/GrooverFromHolland/SimpleBleExample_by_Devicename
Если у вас есть проблемы с этим примером или вы хотите расширить его, начните проблему на GitHub.Прекратите задавать вопросы по этому вопросу в Stackoverflow, вы получите некоторые ответы, но мы здесь не для того, чтобы научить вас кодировать.

0 голосов
/ 26 мая 2018

Сначала вы можете подписаться на уведомление об изменении значения признака, если признак имеет свойства Indicatable или Notifiable.это не всегда то, что вы читаете.Это может быть другой признак.

После того как вы нашли свой признак, вам нужно написать ClientConfigurationDescriptor этого признака со свойствами Indicatable или Notifiable, установленными в True.Он уведомляет сервер GATT, что клиент заинтересован в событии изменения для этой характеристики.

И только то, что вы можете подписаться и получать уведомления.Кроме того, после получения уведомления вам не нужно считывать информацию из признака причины события, которое включает новое значение признака.

...