Mirad, me da este error y no sé porque a ver si alguién me lo puede aclarar plz esk no se como tengo que poner la exception esta de las narizes.
El archivo original(para abrir/cerrar/hablar i leer de puertos serie) es este;
Código:
package serialporttest;
import java.util.List;
import giovynet.nativelink.SerialPort;
import giovynet.serial.Baud;
import giovynet.serial.Com;
import giovynet.serial.Parameters;
public class Main {
/**
* www.giovynet.com
* @param args
*/
public static void main(String[] args) {
try {
SerialPort serialPort = new SerialPort();
List<String> portsFree;
portsFree = serialPort.getFreeSerialPort();
/**** If there are free ports, use the first found. ****/
if (portsFree!=null&&portsFree.size()>0) {
for (String free : portsFree) {
System.out.println("Free port: "+free);
}
/****Open the port.****/
Parameters parameters = new Parameters();
parameters.setPort(portsFree.get(0));
parameters.setBaudRate(Baud._9600);
System.out.println("Open port: "+portsFree.get(0));
Com com = new Com(parameters);
/****Send data.****/
String data = "Test Giovynet Driver.";
System.out.println("<Send Data>");
for (int i = 0; i < data.toCharArray().length; i++) {
Thread.sleep(400);
com.sendSingleData(data.toCharArray()[i]);
System.out.print(data.toCharArray()[i]);
}
/****Close the port.****/
System.out.println("\n<End Send Data>");
com.close();
}else {
System.out.println("No Free ports!!!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Tengo las siguientes clases;
EscombraRobot
Código:
String Estat;
MotorOrdres motors[] = new MotorOrdres[2];
public EscombraRobot(){
motors[1] = new MotorOrdres(1);
motors[0] = new MotorOrdres(0);
}
public void Endevant()throws Throwable{
Estat="Endevant";
motors[0].Avancar(Estat);
motors[1].Avancar(Estat);
}
MotorOrdres
Código:
Comunicacio Comunicacio;
private static Com com;
int idMotor;
MotorOrdres(int motor) {// Cada vez que hago motor.metodo -> paso el motor por aqui?
idMotor=motor;
}
void Avancar(String Estat)throws Throwable {
com =Comunicacio.AbrirPuerto();
Comunicacio.EnviarSenyal(Estat,idMotor,com);
}
Comunicacio
Código:
private String Port;
private Com com;
public Comunicacio() {
Port = "COM4";
}
public Com AbrirPuerto() throws Throwable {
try{Parameters Settings = new Parameters();
Settings.setPort(Port);
Settings.setBaudRate(Baud._9600);
com = new Com(Settings);
} catch (NoFreePorts error){
System.out.println(error);
}
return com;
}
/**
* Envia una String de ordre+mortorid al robotEscombra exemple-> endevant1
*/
public void EnviarSenyal(String orden, int motor, Com com) throws Throwable {
orden += motor;
for (int i = 0; i < orden.toCharArray().length; i++) {
//Thread.sleep(400);
com.sendSingleData(orden.toCharArray()[i]);
}
CerrarPuerto(com);
}
public void CerrarPuerto(Com com) throws Throwable {
com.close();
}
Main que quiero que sea el controlador
Código:
public class Main {
private static Com com;
/**
* www.giovynet.com
* @param args
*/
public static void main(String[] args) throws Throwable {
try {
/**** If there are free ports, use the first found. ****/
SerialPort serialPort = new SerialPort();
List<String> portsFree;
portsFree = serialPort.getFreeSerialPort();
if (portsFree!=null&&portsFree.size()>0) {
// Lista de Puertos disponibles
for (String free : portsFree) {
System.out.println("Free port: "+free);
}
EscombraRobot e;
e= new EscombraRobot();
e.Endevant();
Comunicacio Comunicacio = new Comunicacio();
com=Comunicacio.AbrirPuerto();
String SenyalRecibida=Comunicacio.LeerSenyal(com);
System.out.println("Senyal recibida de robot: "+SenyalRecibida);
}else {
System.out.println("No Free ports!!!");
}
} catch (NoFreePorts error){
System.out.println(error);
}
}
}
Se me olvidava xd, el error que me da es este;
Exception in thread "main" java.lang.NullPointerException
at ProjecteSintesi.Model.MotorOrdres.Avancar(MotorOrd res.java:27)
at ProjecteSintesi.Model.EscombraRobot.Endevant(Escom braRobot.java:37)
at ProjecteSintesi.Controlador.Main.main(Main.java:34 )
Explicación del código;
tengo la clase EscombraRobot que es la que representa el robot en si i tiene las ordenes para moverse, a la izquierda derecha etc.. sólo he puesta "endevant" que es adelante, entonces hago;
motors[0].Avancar(Estat);
motors[1].Avancar(Estat);
Para que se dirija hacia adelante el robot, i a la clase motorsOrdres(que representa los motores, tiene 2) tengo 3 opciones; adelante,atras i parado
Entonces esta habla con la clase "Comuncacio" que es la que envia la orden y el motor que tiene que moverse por el puerto serie.