El archivo original(para abrir/cerrar/hablar i leer de puertos serie) es este;
Código:
Tengo las siguientes clases;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(); } } }
EscombraRobot
Código:
MotorOrdresString 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); }
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:
Main que quiero que sea el controladorprivate 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(); }
Código:
Se me olvidava xd, el error que me da es este;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); } } }
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.