0

私はJavaでgpsをデコードするためのコードを書いていますが、gpsは私がコードで見ることができる文字列を続けて送信しますが、デコードすると1つの文字列だけがデコードされ、次の文字列に対してnullにする必要があるため動作が停止します成功。誰もがこの状況について考えている

package communication;

import javax.comm.*;
import java.util.*;
import java.io.*;
import new8.*;

class Serial
{
public static void main(String args[]) throws UnsupportedCommOperationException, IOException, TooManyListenersException
{
int c=1;

String wantedPortName = "COM6";

Enumeration portIdentifiers = CommPortIdentifier.getPortIdentifiers();

CommPortIdentifier portId = null;  
while(portIdentifiers.hasMoreElements())
{
    CommPortIdentifier pid = (CommPortIdentifier) portIdentifiers.nextElement();
    if(pid.getPortType() == CommPortIdentifier.PORT_SERIAL &&
       pid.getName().equals(wantedPortName)) 
    {
        portId = pid;
        break;
    }
}
if(portId == null)
{
    System.err.println("Could not find serial port " + wantedPortName);
    System.exit(1);
}
else
{
    System.out.println("system find gps reciever");
}
SerialPort port = null;
try {
    port = (SerialPort) portId.open(
        "RMC", 
        1);
    System.out.println("all are ok"); 
} catch(PortInUseException e) {
    System.err.println("Port already in use: " + e);
    System.exit(1);
}

port.setSerialPortParams(
    4800,
    SerialPort.DATABITS_8,
    SerialPort.STOPBITS_1,
    SerialPort.PARITY_NONE);



BufferedReader is = null;  


try {
  is = new BufferedReader(new InputStreamReader(port.getInputStream()));
  System.out.println("data is ok");
} catch (IOException e) {
  System.err.println("Can't open input stream: write-only");
  is = null;
}

String pt=null;
while(true)
{

is.readLine(); 
is.readLine(); 
  String st = is.readLine(); 

System.out.print("("+c+")");
c++;
new8 obj1=new new8();

obj1.decode(st);
  System.out.println(st);
  st=st.replace(st, "");

}

if (is != null) is.close();
/*if (os != null) os.close();*/
if (port != null) port.close();


}
}
4

2 に答える 2

0

達成したいことは、COM ポート経由で GPS 受信機からの NMEA データを解析することです。

C (オープン ソース プロジェクト ナビゲーション システム「Navit」) でそのようなコードを見たことがあります。

ただし、シリアルが壊れている可能性があることを覚えています。そのため、メッセージに「$GP」という文言が含まれているかどうかを確認します。また、NMEA 行で指定されたチェックサムが正しい場合。

その Navit コードを確認することをお勧めします (ただし、C で書かれています)。COM ポートから NMEA をデコードするのはあなたが初めてではありません。

于 2013-01-30T20:21:11.933 に答える
0

正しいフローを得るには、コードは次のようになります。ロジックについては何も言いません。

if (is !=  null) {
    //String pt = null;
    while (true) {

        String st = is.readLine();
        if (st == null) {
            break;
        }
        st = is.readLine();
        if (st == null) {
            break;
        }
        st = is.readLine();
        if (st == null) {
            break;
        }

        System.out.print("(" + c + ")");
        c++;
        new8 obj1 = new new8();

        obj1.decode(st);
        System.out.println(st);
        st = st.replace(st, "");

    }
    is.close();
}
于 2013-01-30T20:27:45.947 に答える