Package guiPilotoArduino

Source Code of guiPilotoArduino.ArduinoSerialControl

package guiPilotoArduino;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;

import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import guiPilotoArduino.arduino.Mensaje;

import java.util.Enumeration;
import java.util.Vector;

import org.jfree.data.general.DefaultValueDataset;

public class ArduinoSerialControl implements SerialPortEventListener {
  
  SerialPort serialPort;
    /** The port we're normally going to use. */
   
  private static final String PORT_NAMES[] = {
    "/dev/tty.usbserial-A9007UX1", // Mac OS X
    "/dev/ttyACM0", // Linux
    "/dev/ttyACM1",
    "COM3", // Windows
  };
 
  /**
  * A BufferedReader which will be fed by a InputStreamReader
  * converting the bytes into characters
  * making the displayed results codepage independent
  */
  private BufferedReader input;
  /** The output stream to the port */
  private OutputStream output;
  /** Milliseconds to block while waiting for port open */
  private static final int TIME_OUT = 2000;
  /** Default bits per second for COM port. */
  private static final int DATA_RATE = 9600;
  private static final int MAX_SIZE_VECTOR = 0;
 
  private Vector<Mensaje> mensajes = new Vector<Mensaje>();
 
  private DefaultValueDataset compassData;
 
  public void initialize() {
    CommPortIdentifier portId = null;
    Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

    //First, Find an instance of serial port as set in PORT_NAMES.
    while (portEnum.hasMoreElements()) {
      CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
      for (String portName : PORT_NAMES) {
        if (currPortId.getName().equals(portName)) {
          portId = currPortId;
          break;
        }
      }
    }
    if (portId == null) {
      System.out.println("Could not find COM port.");
      return;
    }
   

    try {
      // open serial port, and use class name for the appName.
      serialPort = (SerialPort) portId.open(this.getClass().getName(),
          TIME_OUT);

      // set port parameters
      serialPort.setSerialPortParams(DATA_RATE,
          SerialPort.DATABITS_8,
          SerialPort.STOPBITS_1,
          SerialPort.PARITY_NONE);

      // open the streams
      input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
      output = serialPort.getOutputStream();

      // add event listeners
      serialPort.addEventListener(this);
      serialPort.notifyOnDataAvailable(true);
    } catch (Exception e) {
      System.err.println(e.toString());
    }
  }
 
 
  /**
   * This should be called when you stop using the port.
   * This will prevent port locking on platforms like Linux.
   */
  public synchronized void close() {
    if (serialPort != null) {
      serialPort.removeEventListener();
      serialPort.close();
    }
  }

  /**
   * Handle an event on the serial port. Read the data and print it.
   */
 
  public synchronized void serialEvent(SerialPortEvent oEvent) {
    if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
      try {
        String inputLine=input.readLine();
        System.out.println(inputLine);
       
          //Se ha recibido información
            Mensaje msj = new Mensaje(inputLine);
          mensajes.add(msj);
          //Si tenemos el Vector lleno limpiamos el primer elemento.
          if ( mensajes.size() > MAX_SIZE_VECTOR){
            mensajes.remove(0);
          }
         
          if (msj.getTipo().equalsIgnoreCase("HMC5883L")){
            if ( compassData != null ){
              compassData.setValue(new Doublemsj.getValores().get("HMC5883L.degrees")  ));
            }
          }
       
       
      } catch (Exception e) {
        System.err.println(e.toString());
      }
    }
    // Ignore all the other eventTypes, but you should consider the other ones.
  }


  public DefaultValueDataset getCompassData() {
    return compassData;
  }


  public void setCompassData(DefaultValueDataset compassData) {
    this.compassData = compassData;
  }
 
 
}
TOP

Related Classes of guiPilotoArduino.ArduinoSerialControl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.