私のPCに接続されたGPSデバイスから緯度と経度の値を受信しています。私はtimeinterval を設定して、ポートからデータを受け取らない場合は500ミリ秒後にテキストを印刷する必要があります。私は知らない これを行う方法誰かがこの問題を解決する方法を助けてくださいできることができます。私は自分のコードをアップロードしました。シリアルポートからデータをチェックする設定タイムアウトをC#
class PortDataReceived
{
private static SerialPort mySerialPort;
public static void Main()
{
mySerialPort = new SerialPort("COM5");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.RtsEnable = true;
//mySerialPort.ReadTimeout = 500;
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
mySerialPort.Open();
Console.WriteLine();
Console.ReadKey();
mySerialPort.Close();
}
private static void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
////////////////////////////////////
//System.Threading.Thread.Sleep(1000);
//Console.WriteLine("NAN");
/* Timer tmr = new System.Timers.Timer();
tmr.Interval = 500;
tmr.Elapsed += OnTimedEvent;
tmr.AutoReset = true;
// Start the timer
tmr.Enabled = true
private static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
{
if(indata == null)
* {
* Console.WriteLine("NAN");
* }
}*/
////////////////////////////////////
{
string pattern = @"^\$GNGGA,[^,]+,(\d{2})(\d{2}\.\d+),([NS]),(\d{3})(\d{2}\.\d+),([EW]),.+$";
System.Text.RegularExpressions.MatchCollection matches = System.Text.RegularExpressions.Regex.Matches(indata, pattern);
if (matches.Count > 0)
{
foreach (System.Text.RegularExpressions.Match match in matches)
{
double Lat = Double.Parse(match.Groups[1].Value, System.Globalization.CultureInfo.InvariantCulture);
Lat += Double.Parse(match.Groups[2].Value, System.Globalization.CultureInfo.InvariantCulture)/60;
Lat *= match.Groups[3].Value == "N" ? 1 : -1;
double Lng = Double.Parse(match.Groups[4].Value, System.Globalization.CultureInfo.InvariantCulture);
Lng += Double.Parse(match.Groups[5].Value, System.Globalization.CultureInfo.InvariantCulture)/60;
Lng *= match.Groups[6].Value == "E" ? 1 : -1;
string output = "{Lat: " + Lat.ToString(System.Globalization.CultureInfo.InvariantCulture);
output += ", Lng: " + Lng.ToString(System.Globalization.CultureInfo.InvariantCulture) + "}";
Console.WriteLine(output);
}
}
//mySerialPort.DataReceived -= new SerialDataReceivedEventHandler(DataReceivedHandler);
}
}
}