jueves, 30 de abril de 2009

Conexion java con puerto serial db 25

Bueno esta conexion tambien la hice con la Com32 de la Sun pero por las mismas razones que modifique la libreria del paralelo, Sun no da soporte para Windows por lo menos en este aspecto, bueno aqui les dejo el codigo que use para comunicar el puerto serial o db9 con java enviar y leer datos:
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.Component;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.List;
import app.Com;
import app.Parameters;
import core.SerialPort;
public class Ventana extends JFrame implements ActionListener{
JLabel labelDato;
private JButton boton;
private Hilo hilo;
public Ventana() {
setLayout(null);
labelDato = new JLabel("...");
boton=new JButton("iniciar");
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("...:::PUERTO:::SERIAL:::...");
labelDato.setFont(new Font("Arial", 0, 54));
labelDato.setLocation(10,10);
labelDato.setSize(280,280);
boton.setLocation(10,300);
boton.setSize(280,20);
boton.addActionListener(this);
add(labelDato);
add(boton);
setLocation(300,300);
setSize(300,350);
centrar(this);
setResizable(false);
setVisible(true);
}
public void actionPerformed(ActionEvent evento){
if(boton.getText().matches("iniciar")){
boton.setText("detener");
iniciar();
}else{
boton.setText("iniciar");
detener();
}
}
public void centrar(Component componente){
Toolkit tk=Toolkit.getDefaultToolkit ();
int lx=(int) tk.getScreenSize().getWidth()*1;
int ly=(int) tk.getScreenSize().getHeight()*1;
lx=lx/2-componente.getWidth()/2;
ly=ly/2-componente.getHeight()/2;
componente.setLocation(lx,ly);
}
private void iniciar(){
try {
if(hilo==null){
hilo = new Hilo(this);
hilo.start();
}else{
hilo.resume();
}
}catch (Exception ex) {
System.out.println (ex);
}
}
private void detener(){
try {
hilo.suspend();
labelDato.setText("...");
setTitle("...:::PUERTO:::SERIAL:::...");
}catch (Exception ex) {
System.out.println (ex);
}
}
}
class Hilo extends Thread{
private Ventana ventana;
public Hilo(Ventana ven){
ventana=ven;
}
public void run(){
try {
SerialPort libres = new SerialPort();
List lista = libres.getFreeSerialPort();
if(lista.size()<1){
throw new Exception("NO SE HAN ENCONTRADO PUERTOS DISPONIBLES");
}
String puerto=lista.get(0);
Parameters configuracion = new Parameters();
configuracion.setPort(puerto);
configuracion.setBaudRate("9600");
configuracion.setStopBits("2");
Com com = new Com(configuracion);
int dato=0;
int i=0;
System.out.println("LOG");
while(true){
dato = com.receiveSingleDataInt();
ventana.labelDato.setText( dato +"");
ventana.setTitle("...:::PUERTO:::SERIAL::("+puerto+"):::..."+dato);
System.out.println("lee "+dato);
sleep(100);
com.sendSingleData(i);
System.out.println("env "+i);
i++;
}
}catch (Exception ex) {
System.out.println (ex);
}
}
public void detener(){
ventana.dispose();
ventana=null;
}
}
class Ejecutable{
public static void main(String args[]) {
Ventana v=new Ventana();
}
}
y aqui les dejo los enlaces para descargar la libreria y el codigo:
http://www.4shared.com/file/102621757/a6780501/conexion_java_serial_db9.html
si ese no funciona prueba con este:
http://www.4shared.com/get/102621757/a6780501/conexion_java_serial_db9.html

Conexion de java con el puerto paralelo db 25

Bueno eso ya estaba hecho haciendolo con el API Com32 de la sun.... pero por su guerra de licencias y leyes y eso y lo otro sun HA DEJADO DE DAR SOPORTE A WINDOWS!!!!, nada raro pero en fin entonces hay que utilizar otro metodo para conectarse y es siguiente es usando JNI 
Esto es llamar metodos nativos esos metodos estan dentro de una dll y alguien que sabes mucho, mucho hizo esa vaina y yo lo implemente:
este es mi codigo:
import javax.swing.JOptionPane;
public class Prueba {
    public Prueba(){
     while (true){
     int n=pedirEntero("Digite un numero");
     escribirEnPuerto(n);
     mostrarPuertos();
     }
    }
    
    public int pedirEntero(String msj){
int n=10;
try {
     String _n="";
     _n=JOptionPane.showInputDialog(null,msj);
     n=Integer.parseInt(_n);
     n=Math.abs(n);
     return n;
}catch (Exception ex) {
return pedirEntero(msj);
}
}
public void escribirEnPuerto(int n){
PuertoParalelo pp = new PuertoParalelo();
try {
pp.output((short)888,(short)n);
}catch (Exception ex) {
System.out.println (ex);
}
try {
pp.output((short)889,(short)n);
}catch (Exception ex) {
System.out.println (ex);
}
try {
pp.output((short)890,(short)n);
}catch (Exception ex) {
System.out.println (ex);
}
}
public void mostrarPuertos(){
System.out.println ("Valores en puertos");
PuertoParalelo pp = new PuertoParalelo();
try {
System.out.println ("puerto 888: "+pp.input((short)888));
}catch (Exception ex) {
System.out.println (ex);
}
try {
System.out.println ("puerto 889: "+pp.input((short)889));
}catch (Exception ex) {
System.out.println (ex);
}
try {
System.out.println ("puerto 890: "+pp.input((short)890));
}catch (Exception ex) {
System.out.println (ex);
}
}
public static void main(String args[]){
new Prueba();
    }
    
}
y aqui les dejo la libreria y el codigo:
http://www.4shared.com/get/102617690/f7a09095/comunicacion_con_db25_conexion_java_paralelo.html
si ese enlace no funciona prueba con este:
http://www.4shared.com/file/102617690/f7a09095/comunicacion_con_db25_conexion_java_paralelo.html
ya  con eso funciona
la conexion con la protoboard esta en una entrada mas abajo
COMENTARIOS, DUDAS... SI NO LO DICES NO LO SE