Хорошо, я устал от поиска в Google. Поэтому я работаю над проектом, который использует Windows Remote Arduino . Я только начинаю, поэтому я нахожусь в стадии "просто взломать это вместе" Arduino работает на стандартных фирмах, и я вызываю функцию sysex, которая возвращает некоторые данные с некоторых датчиков.
Я подписался на событие StringMessageReceived, но я обнаружил, что событие не всегда запускается. Я «должен» получать данные каждый раз, когда отправляю команду sysex. Я обнаружил закрытую проблему на сайте git hub для удаленного подключения, которая говорит, что я вызываю flush () для объекта firmata, что я делаю, но я не получаю ответ 1 на 1.
Вот пример вывода, который я получаю.
Событие готовности устройства сработало
Таймер Тик!
Таймер!
{\ "TEMP1 \": 21,50, \ "рН \": 0,000}
Таймер Тик!
{\ "TEMP1 \": 21,50, \ "рН \": 0,000}
Таймер Тик!
Таймер Тик!
Таймер!
{\ "TEMP1 \": 21,50, \ "рН \": 0,000}
Таймер Тик!
Таймер!
Таймер Tick!
Таймер Тик!
{\ "TEMP1 \": 21,50, \ "рН \": 0,000}
Таймер!
Таймер!
Таймер!
Таймер!
{\ "TEMP1 \": 21,50, \ "рН \": 0,000}
{\ "TEMP1 \": 21,50, \ "рН \": 0,000}
Таймер!
Таймер!
Таймер!
{\ "TEMP1 \": 21,50, \ "рН \": 0,000}
Таймер!
{\ "TEMP1 \": 21,50, \ "рН \": 0,000}
Таймер Тик!
Таймер!
Таймер!
{\ "TEMP1 \": 21.50, \ "PH \": 0.000} "
Я знаю, что arduino получает мои команды, потому что я вижу светодиоды на одном из моих датчиков, обрабатывающих команду.
Вот мой код UWP.
public sealed partial class MainPage : Page
{
IStream connection;
RemoteDevice arduino;
UwpFirmata firmata;
DispatcherTimer timer;
public MainPage()
{
this.InitializeComponent();
}
private void btnConnect_Click(object sender, RoutedEventArgs e)
{
connection = new UsbSerial("VID_0403", "PID_6001");
firmata = new UwpFirmata();
arduino = new RemoteDevice(firmata);
timer = new DispatcherTimer();
firmata.begin(connection);
connection.begin(57600, SerialConfig.SERIAL_8N1);
arduino.DeviceReady += Setup;
arduino.DeviceConnectionFailed += ConnectFailed;
arduino.StringMessageReceived += StringRecieved;
timer.Interval = new TimeSpan(0, 0, 5);
timer.Tick += timerTick;
timer.Start();
}
private void timerTick(object sender, object e)
{
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, ()
=>
{
lblPhData.Text += "Timer Tick!\n";
}
);
byte PH_QUERY = 0x44;
firmata.sendSysex(PH_QUERY, new byte[] { }.AsBuffer());
firmata.flush();
}
private void StringRecieved(string message)
{
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, ()
=>
{
lblPhData.Text += message + "\n";
}
);
}
public void ConnectFailed(String message)
{
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, ()
=>
{
lblPhData.Text += message;
}
);
}
public void Setup()
{
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, ()
=>
{
lblPhData.Text += "Device Ready Event Fired\n";
}
);
}
private void btnGetData_Click(object sender, RoutedEventArgs e)
{
byte PH_QUERY = 0x44;
firmata.sendSysex(PH_QUERY, new byte[] { }.AsBuffer());
firmata.flush();
}
}
Я должен упустить что-то действительно простое.