import Archivos.Ventana;
import Formulario.FrameVentaPesado;
import Formulario.IngresoSistema;
import gnu.io.CommPortIdentifier;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.TooManyListenersException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class LecturaSerial {
//inicializamos y decalramos variables
static CommPortIdentifier portId;
static Enumeration puertos;
static SerialPort serialport;
static InputStream entrada = null;
public static Thread t;
//creamos un constructor para realizar la conexion del puerto
public static boolean hayBalanza=false;
public LecturaSerial() {
super();
lecturaAnterior();
}
public static void lecturaAnterior(){
puertos=CommPortIdentifier.getPortIdentifiers();
t = new Thread(new LeerSerial());
while (puertos.hasMoreElements()) { //para recorrer el numero de los puertos, y especificar con cual quiero trabajar
portId = (CommPortIdentifier) puertos.nextElement(); //next elemento recorre uno por uno
System.out.println("puerto "+portId.getName()); //puertos disponbibles
if (portId.getName().equals(IngresoSistema.puertoBalanza)) {
try {
serialport= (SerialPort)portId.open("LecturaSerial", 10);//tiempo ANTES ERA 9600
entrada = serialport.getInputStream();//esta variable del tipo InputStream obtiene el dato serial
t.start(); // inciamos el hilo para realizar nuestra accion de imprimir el dato serial
} catch (Exception e) {
}
}
}
}
public static String salida="";
//con este metodo del tipo thread relaizamos
public static class LeerSerial implements Runnable {
static int aux;
public static boolean entrar=true;
public void run () {
while(entrar){
try {
aux = entrada.read(); // aqui estamos obteniendo nuestro dato serial
esperar(1);//PAUSA PARA VERIFICAR
if (aux>0) {
salida=salida+String.valueOf((char)aux);
verifica2();
}
} catch (Exception e) {}
}
}
public void verifica(){
if(contarPuntos()>2){
char []dat=quitarDatos(salida).toCharArray();
String bas="";
for(int i=buscaUltim();i<dat.length-1;i++)
bas=bas+String.valueOf(dat[i]);
if(bas.toCharArray().length>4){
FrameVentaPesado.cantidad.setText(bas);
FrameVentaPesado.pesando(quitarDatos(salida));
LecturaSerial.hayBalanza=true;
}
try {
Thread.sleep(4);
} catch (InterruptedException ex) {
Logger.getLogger(LecturaSerial.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public static int control=0;
public static void verifica2(){
char []dat=salida.toCharArray();
if(dat.length>8){
System.out.println("salida "+salida);
if(hola(salida)==true){
String dato=quitarDatos(salida);
FrameVentaPesado.cantidad.setText(dato);
System.out.println("salida sin puntos "+dato);
FrameVentaPesado.pesando(dato);
control=1;
}
LecturaSerial.hayBalanza=true;
//entrar=false;
if(dat.length>8){
salida="";
}
}
}
public static boolean hola(String cadena){
char []vec=cadena.toCharArray();
int con=0;
for(int i=0;i<vec.length;i++){
if(vec[i]=='+'){
con=1;
}
if(vec[i]=='g')
con=2;
}
return con==2?true:false;
}
public static void esperar(int segundos) {
try {
//Thread.sleep (segundos*1000);
Thread.sleep (segundos*10);
} catch (Exception e) {}
}
public static String quitarDatos(String dato){
if(dato==null) return "0";
if(dato.equals("")) return "0";
String salida="";
char []vec=dato.toCharArray();
for(int i=0;i<vec.length;i++){
if(vec[i]=='0' || vec[i]=='1' || vec[i]=='2' || vec[i]=='3' || vec[i]=='4' || vec[i]=='5' || vec[i]=='6' || vec[i]=='7' || vec[i]=='8' || vec[i]=='9' )
salida=salida+String.valueOf(vec[i]);
}
return salida;
}
public int contarPuntos(){
char []dat=salida.toCharArray();
int c=0;
for(int i=0;i<dat.length;i++)
if(dat[i]=='.')
c++;
if(c>3)
salida="";
return c;
}
public int buscaUltim(){
int c=0;
char []dat=salida.toCharArray();
for(int i=0;i<dat.length;i++)
if(dat[i]=='.')
c=i;
return c-1;
}
}
}
import Formulario.FrameVentaPesado;
import Formulario.IngresoSistema;
import gnu.io.CommPortIdentifier;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;
import java.io.*;
import java.util.*;
/**
* Este es un ejemplo de uso del API de Comunicaciones Java que permite la
* lectura de información a través de uno de los puertos serie de la
* máquina en que se ejecuta.
* El ejemplo se ha probado en Windows y Solaris, utilizando la línea
* de código que identifica el puerto a utilizar correspondiente
*/
public class Comunication implements Runnable,SerialPortEventListener {
static CommPortIdentifier idPuerto;
static Enumeration listaPuertos;
InputStream entrada;
SerialPort puertoSerie;
Thread tLectura;
public static int ddd=0;
// En este ejemplo implementa un thread que es el que se encarga de
// que la aplicación se quede esperando en el puerto que se haya
// abierto a que se reciban datos.
// Primero abre el puerto y luego le fija los parámetros
public Comunication() {
// Si el puerto no está en uso, se intenta abrir
try {
puertoSerie = (SerialPort)idPuerto.open( "AplLectura",9600 );
} catch( PortInUseException e ) {
//System.out.println(e);
}
// Se obtiene un canal de entrada
try {
entrada = puertoSerie.getInputStream();
} catch( IOException e ) {
//System.out.println(e);
}
// Añadimos un receptor de eventos para estar informados de lo
// que suceda en el puerto
try {
puertoSerie.addEventListener( this );
} catch( TooManyListenersException e ) {
//System.out.println(e);
}
// Hacemos que se nos notifique cuando haya datos disponibles
// para lectura en el buffer de la puerta
puertoSerie.notifyOnDataAvailable( true );
// Se fijan los parámetros de comunicación del puerto
try {
puertoSerie.setSerialPortParams( 9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE );
} catch( UnsupportedCommOperationException e ) {
System.out.println(e);
}
// Se crea y lanza el thread que se va a encargar de quedarse
// esperando en la puerta a que haya datos disponibles
tLectura = new Thread( this );
tLectura.start();
}
@Override
public void run() {
try {
// En los threads, hay que procurar siempre que haya algún
// método de escape, para que no se queden continuamente
// bloqueados, en este caso, la comprobación de si hay datos
// o no disponibles en el buffer de la puerta, se hace
// intermitentemente
//System.out.println("Entra hilo");
Thread.sleep( 60000 );
} catch( InterruptedException e )
{
//System.out.println(e);
}
}
@Override
public void serialEvent( SerialPortEvent _ev ) {
//System.out.println("ENTRANDO");
switch( _ev.getEventType() ) {
// La mayoría de los eventos no se trata, éstos son los
// que se producen por cambios en las líneas de control del
// puerto que se está monitorizando
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
// Cuando haya datos disponibles se leen y luego se
// imprime lo recibido en la consola
case SerialPortEvent.DATA_AVAILABLE:
byte[] bufferLectura = new byte[20];
String salida="";
try {
int nBytes=0;
while( entrada.available() > 0 ) {
nBytes = entrada.read( bufferLectura );
}
System.out.println( new String(bufferLectura) );
if(!IngresoSistema.quitarPuntos(quitaEspacios(new String(bufferLectura))).equals("")){
FrameVentaPesado.cantidad.setText(IngresoSistema.quitarPuntos(quitaEspacios(new String(bufferLectura))));
FrameVentaPesado.pesando(FrameVentaPesado.cantidad.getText());
}
} catch( IOException e ) {
//System.out.println(e);
}
break;
}
}
public String quitaEspacios(String cad){
char []vec=cad.toCharArray();
String salida="";
for(int i=0;i<vec.length;i++)
if(vec[i]=='0' || vec[i]=='1' || vec[i]=='2' || vec[i]=='3' || vec[i]=='4' || vec[i]=='5' || vec[i]=='6' || vec[i]=='7' || vec[i]=='8' || vec[i]=='9' || vec[i]=='.' ){
salida=salida+String.valueOf(vec[i]);
}
int cal=Integer.valueOf(salida);
String salida2=String.valueOf(cal);
Comunication.ddd=1;
return salida2;
}
public static void comun(){
// Lista de los puertos disponibles en la máquina. Se carga en el
// mimo momento en que se inicia la JVM de Java
listaPuertos = CommPortIdentifier.getPortIdentifiers();
while( listaPuertos.hasMoreElements() ) {
idPuerto = (CommPortIdentifier)listaPuertos.nextElement();
if( idPuerto.getPortType() == CommPortIdentifier.PORT_SERIAL ) {
if( idPuerto.getName().equals("COM3") ) { // Lector del puerto, se quedará esperando a que llegue algo al puerto
Comunication lector = new Comunication();
}
}
}
}
}