我在java中编写用于解码gps的代码,gps发送给我继续字符串,我可以在我的代码中看到但是当我解码它时只有一个字符串解码并且由于我的字符串工作停止必须为下一个字符串为空我尝试这样做但没有成功。任何人都对这种情况有所了解
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();
}
}
答案 0 :(得分:0)
您想要实现的是通过COM端口从GPS接收器解析NMEA数据。
我在C(开源项目导航系统“Navit”)中看到过这样的代码。
但是我记得连续剧可能会被打破,因此他们会检查 如果邮件中包含“$ GP”praeambel。如果NMEA行中提供的校验和是正确的。
我建议你看看那个Navit代码(尽管它在C中)。您不是第一个从COM端口解码NMEA的人。
答案 1 :(得分: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();
}