В настоящее время у меня есть этот довольно простой проект Arduino, который выполняет следующее:
if (BTSerial.available())
{
c = BTSerial.read();
Serial.print(c);
if (c == 1) {
digitalWrite(ledpin, HIGH);
delay(100);
BTSerial.write("Hello");
}
Приведенный выше код возвращает строку после получения байта от подключенного устройства.
Я проверил это с помощью LightBlue Explorer и подтвердил, что он работает!
Однако это не относится к моему приложению Xamarin, которое я собираюсь сделать самостоятельно.
В настоящее время я написал следующий код:
public UtilityPage()
{
Scan_Page();
InitializeComponent();
//Method for updating characteristic
MyDevice.characteristic.ValueUpdated += (sender, e) =>
{
var text_returned = e.Characteristic.Value;
};
}
//Push page on top of this in order to connect to pheripheral
async void Scan_Page()
{
await Navigation.PushModalAsync(new MainPage());
}
То, что происходит выше, это то, что я нажимаю модал поверх моего UtilityPage
, который содержит listview
с устройствами для подключения. Как только устройство подключено, модал выталкивается.
Когда я нажимаю кнопку на моем телефоне (код не указан), он должен отправить строку байтов, и наоборот, получить ее от Arduino. Он отправляет байтовую строку, но не получает ее, что означает, что основной проблемой является MyDevice.characteristic.ValueUpdated
, которая, очевидно, не прослушивает никаких уведомлений от подключенного периферийного устройства.
Плагин Xamarin, который я использую, называется Xabre