我创建了一个简单的shell脚本,它基本上只是启动一个“.jar”文件。
此脚本包含以下内容
now=$(date +"%s")
sudo java -jar /home/pi/Desktop/test.jar > /home/pi/Desktop/output_$now.txt
我用
将脚本添加到crontask@reboot sudo bash /home/pi/Desktop/testmygps.sh
我的应用程序将是一个“GPS控制器”,用于丢弃狐狸的诱饵(免疫接种狂犬病)。 我的应用程序由3个线程组成,一个用于更新连接的LCD显示器,一个用于更新GPS位置和速度,另一个用于丢弃诱饵。
我使用GPS Modul的串行通信(然后提取所需的数据)和pi4j库(v1.1)与GPIO通信。
当我从终端启动jar时,一切都按预期工作(到目前为止,我只计算掉落之间的距离并保存每个放置坐标,并在LCD上显示当前速度和计算的滴之间的延迟)。 / p>
但是当我用“sudo reboot”重新启动我的pi时,我的jar启动,然后进行一些“速度更新”,然后以某种方式连接到GPS模块的连接丢失,只有LCD继续工作。 / p>
任何人都知道我的问题可能是什么原因?
PS。 这是我项目的GPSController类
package baitcontrol.v2;
import java.util.Date;
import java.util.logging.Logger;
import com.pi4j.wiringpi.Serial;
import exceptions.NMEAparseException;
import utils.Parser;
import utils.Utils;
public class GPSController implements Runnable {
private static final Logger LOGGER =
Logger.getLogger(GPSController.class.getName());
private int serialPort;
private static boolean continueLoop = true;
private static GPSController instance;
private GPGGAEvent lastGPGGAUpdateEvent;
private GPVTGEvent lastGPVTGUpdateEvent;
private GPSController() {
LOGGER.info("GPSController init");
this.serialPort = Serial.serialOpen("/dev/serial0", 9600);
LOGGER.info("GPSController initialised");
if (this.serialPort == -1) {
LOGGER.severe("Serial Port Failed");
System.out.println("Serial Port Failed");
}
}
public static GPSController getInstance() {
if (instance == null) {
instance = new GPSController();
}
return instance;
}
@Override
public void run() {
LOGGER.info("GPSController started");
String nmea = "";
while (continueLoop) {
if (Serial.serialDataAvail(serialPort) > 0) {
byte[] rawData = Serial.serialGetAvailableBytes(serialPort);
for (byte dataByte : rawData) {
char character = (char) dataByte;
if (character == '\n') {
LOGGER.fine("new nmealine " +nmea);
if(nmea.contains("GPGGA")){
LOGGER.fine("new GPGGA line");
try {
lastGPGGAUpdateEvent = Parser.parseGPGGAToGPSEvent(nmea);
} catch (NMEAparseException e) {
LOGGER.warning(e.getMessage());
System.out.println(e.getMessage());
Utils.addToTxt("error_" + Utils.dateToString(Main.startTime), e.getMessage());
}
}
if(nmea.contains("GPVTG")){
LOGGER.fine("new GPGGA line");
try {
lastGPVTGUpdateEvent = Parser.parseGPVTGToGPSEvent(nmea);
} catch (NMEAparseException e) {
LOGGER.warning(e.getMessage());
System.out.println(e.getMessage());
Utils.addToTxt("error_" + Utils.dateToString(Main.startTime), e.getMessage());
}
}
nmea = "";
}else{
nmea+=Character.toString(character);
}
}
} else {
LOGGER.finest("data empty");
}
try {
Thread.sleep(5);
} catch (InterruptedException e) {
LOGGER.finest(e.getMessage());
System.out.println(e.getMessage());
Utils.addToTxt("error_" + Utils.dateToString(Main.startTime), e.getMessage());
}
}
}
public GPGGAEvent getLastGPGGAUpdateEvent() {
return lastGPGGAUpdateEvent;
}
public GPVTGEvent getLastGPVTGUpdateEvent() {
return lastGPVTGUpdateEvent;
}
public boolean positionHasAlreadyBeenUpdated(){
return lastGPGGAUpdateEvent!=null;
}
public boolean speedHasAlreadyBeenUpdated(){
return lastGPVTGUpdateEvent!=null;
}
}