Ich stieß auf ein wirklich seltsames Problem, als ich versuchte, meinen Raspberry Pi über Serial (usb) mit meinem Arduino Uno zu verbinden.SerialDevice.FromIdAsync() gibt null zurück
serialPort = await SerialDevice.FromIdAsync(myDevices[0].Id);
Gibt immer null zurück. Ich habe viele Dinge ausprobiert und es wird nicht, bis ich es in eine Schleife und dann funktioniert es das zweite Mal. Also entfernte ich die Schleife und ließ sie 2 Mal laufen.
Das ist mein Ausgang
begintest
testrange
\\?\USB#VID_2341&PID_0001#55639313633351210252#{86e0d1e0-8089-11d0-9ce4-08003e301f73}
test1
null
begintest
ok
ok2
debugtest2
gelukt
Opened device for communication.
test
test2
Und hier mein Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Http;
using Windows.ApplicationModel.Background;
using Windows.Devices.Enumeration;
using Windows.Devices.SerialCommunication;
using System.Diagnostics;
namespace BackgroundApplication2
{
public sealed class StartupTask : IBackgroundTask
{
private SerialDevice serialPort = null;
public void Run(IBackgroundTaskInstance taskInstance)
{
FindDevice();
Debug.WriteLine("test1");
if (serialPort == null)
{
Debug.WriteLine("null");
}
FindDevice();
}
private async void FindDevice()
{
Debug.WriteLine("begintest");
UInt16 vid = 0x2341;
UInt16 pid = 0x0001;
string aqs = SerialDevice.GetDeviceSelectorFromUsbVidPid(vid, pid);
var myDevices = await DeviceInformation.FindAllAsync(aqs);
if (myDevices.Count == 0)
{
Debug.WriteLine("Device not found!");
return;
}
try
{
Debug.WriteLine("testrange");
Debug.WriteLine(myDevices[0].Id);
serialPort = await SerialDevice.FromIdAsync(myDevices[0].Id);
if (serialPort == null)
{
Debug.WriteLine("null2");
return;
}
Debug.WriteLine("ok");
serialPort.WriteTimeout = TimeSpan.FromMilliseconds(1000);
serialPort.ReadTimeout = TimeSpan.FromMilliseconds(1000);
serialPort.BaudRate = 9600;
serialPort.Parity = SerialParity.None;
serialPort.StopBits = SerialStopBitCount.One;
serialPort.DataBits = 8;
serialPort.Handshake = SerialHandshake.None;
Debug.WriteLine("ok2");
/*String debugtest = "Serial port configured successfully: ";
debugtest += serialPort.BaudRate + "-";
debugtest += serialPort.DataBits + "-";
debugtest += serialPort.Parity.ToString() + "-";
debugtest += serialPort.StopBits;
debugtest += (DeviceInformation)myDevices[0];
Debug.WriteLine("debugtest1");
Debug.WriteLine(debugtest);*/
Debug.WriteLine("debugtest2");
Listen();
}
catch (Exception exception)
{
Debug.WriteLine(exception.Message.ToString());
Debug.WriteLine("error");
}
finally
{
Debug.WriteLine("Opened device for communication.");
}
Debug.WriteLine("test2");
}
private async void Listen()
{
Debug.WriteLine("gelukt");
}
}
}
Aus irgendeinem Grund ist dieser Teil macht es fest. Es hält nur dort ...
String debugtest = "Serial port configured successfully: ";
debugtest += serialPort.BaudRate + "-";
debugtest += serialPort.DataBits + "-";
debugtest += serialPort.Parity.ToString() + "-";
debugtest += serialPort.StopBits;
debugtest += (DeviceInformation)myDevices[0];
Debug.WriteLine("debugtest1");
Debug.WriteLine(debugtest);
Dies ist der Ausgang:
begintest
testrange
\\?\USB#VID_2341&PID_0001#55639313633351210252#{86e0d1e0-8089-11d0-9ce4-08003e301f73}
test1
null
begintest
ok
ok2
The thread 0x508 has exited with code 0 (0x0).
The program '[2308] serialsample.exe' has exited with code -1 (0xffffffff).
Und meine letzte Frage warum es läuft automatisch stoppen? Meine Debuggen beenden sind immer mit diesem (oder Code -1 wie oben zu sehen):
The program '[240] backgroundTaskHost.exe' has exited with code 1 (0x1).
Sorry, wenn es ein holländisches Wort hier und da in meinem Code.
@ScottChamberlain Dies ist das erste Mal, dass ich etwas Codierung bin wie dieser so das meiste davon ist Kopie vorbei. Ich weiß nicht wirklich, warum es falsch ist, aber ich google es, danke! :) – Principis
drehte meinen Kommentar zu einer vollständigen Antwort und zeigte, was du falsch machst. –