//////////////////////////////////////////////////////////////////////////////////////
//// ////////////////Classe que lê e envia dados a Serial
/////////////////////////////////////////////////////////////////////////////////////
import javax.comm.;
import java.io.;
public class SComm implements Runnable, SerialPortEventListener {
public String Dadoslidos;
public int nodeBytes;
private String Porta;
private int baudrate;
private int timeout;
private CommPortIdentifier cp;
private SerialPort porta;
private OutputStream saida;
private InputStream entrada;
private Thread threadLeitura;
//indicadores
private boolean IDPortaOK; //true porta EXISTE
private boolean PortaOK;// true porta aberta
private boolean Leitura;
private boolean Escrita;
//construtor default paridade : par
//baudrate: 9600 bps stopbits: 2 COM 1
public SComm(String p) {
Porta = p;
baudrate = 9500;
timeout = 2000;
};
//um Objeto ComObj é passado ao construtor
//com detalhes de qual porta abrir
//e informações sobre configurações
public SComm( String p , int b , int t ){
this.Porta = p;
this.baudrate = b;
this.timeout = t;
};
//habilita escrita de dados
public void habilitarEscrita(){
Escrita = true;
Leitura = false;
}
//habilita leitura de dados
public void habilitarLeitura(){
Escrita = false;
Leitura = true;
}
//Obtém o ID da PORTA
public void obterIdDaPorta(){
try {
cp = CommPortIdentifier.getPortIdentifier(Porta);
if ( cp == null ) {
System.out.println("A " + Porta + " nao existe!" );
System.out.println("ERRO!Abortando..." );
IDPortaOK = false;
System.out.println("Erro ao obter id da porta");
}
IDPortaOK = true;
}
catch (Exception e) {
System.out.println("Erro durante o procedimento. STATUS" + e );
IDPortaOK = false;
System.out.println("Erro ao obter id da porta");
}
}
//Abre a comunicação da porta
public void abrirPorta(){
try {
porta = (SerialPort)cp.open("SComm",timeout);
PortaOK = true;
System.out.println("Porta aberta com sucesso!");
//configurar parâmetros
porta.setSerialPortParams(baudrate, porta.DATABITS_8, porta.STOPBITS_2, porta.PARITY_NONE);
}
catch (Exception e) {
PortaOK = false;
System.out.println("Erro ao abrir a porta: " + Porta + " ! STATUS:" + e );
}
}
//função que envie um bit para a porta serial
public void enviarUmaString(String msg){
if (Escrita==true) {
try {
saida = porta.getOutputStream();
System.out.println("FLUXO OK!");
}
catch (Exception e) {
System.out.println("Erro.STATUS: " + e );
}
try {
System.out.println("Enviando um byte para " + Porta );
System.out.println("Enviando : " + msg );
saida.write(msg.getBytes());
Thread.sleep(100);
saida.flush();
}
catch (Exception e) {
System.out.println("Houve um erro durante o envio. ");
System.out.println("STATUS: " + e );
}
}
else {
System.out.println("Erro ao enviar!");
}
}
//leitura de dados na serial
public void lerDados(){
if (Leitura == true){
try {
entrada = porta.getInputStream();
System.out.println("FLUXO OK!");
}
catch (Exception e) {
System.out.println("Erro.STATUS: " + e );
System.out.println("Erro ao ler");
}
try {
porta.addEventListener(this);
System.out.println("SUCESSO. Porta aguardando...");
}
catch (Exception e) {
System.out.println("Erro ao criar listener: ");
System.out.println("STATUS: " + e);
System.out.println("Erro ao ler");
}
porta.notifyOnDataAvailable(true);
try {
threadLeitura = new Thread(this);
threadLeitura.start();
}
catch (Exception e) {
System.out.println("Erro ao iniciar leitura: " + e );
}
}
}
public void run(){
try {
Thread.sleep(5000);
}
catch (Exception e) {
System.out.println("Erro. Status = " + e );
}
}
//gerenciador de eventos de leitura na serial
public void serialEvent(SerialPortEvent ev){
switch (ev.getEventType()) {
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;
case SerialPortEvent.DATA_AVAILABLE:
byte[] bufferLeitura = new byte[20];
try {
while ( entrada.available() > 0 ) {
nodeBytes = entrada.read(bufferLeitura);
}
String Dadoslidos = new String(bufferLeitura);
if (bufferLeitura.length == 0) {
System.out.println("Nada lido!");
}
else if (bufferLeitura.length == 1 ){
System.out.println("Apenas um byte foi lido!");
} else {
System.out.println(Dadoslidos);
}
}
catch (Exception e) {
System.out.println("Erro durante a leitura: " + e );
}
System.out.println("n.o de bytes lidos : " + nodeBytes );
break;
}
}
//função que fecha a conexão
public void fecharCom(){
try {
porta.close();
System.out.println("CONEXAO FECHADA>>FIM..");
}
catch (Exception e) {
System.out.println("ERRO AO FECHAR. STATUS: " + e );
System.out.println("Erro ao fechar");
}
}
//Acessores
public String getObterPorta(){
return Porta;
}
public int getObterBaudrate(){
return baudrate;
}
}
//////////////////////////////////////////////////////////////////////////////////////
//// ////////////////Classe que apenas reconhece as portas disponíveis
/////////////////////////////////////////////////////////////////////////////////////
import javax.comm.<em>;
import <a href="http://java.io">java.io</a>.</em>;
import java.util.*;
public class SerialCom {
//variáveis para identificar portas
protected String[] portas;
protected Enumeration listaDePortas;
//construtor
public SerialCom(){
try{
listaDePortas = CommPortIdentifier.getPortIdentifiers();
carregarPortas();
}
catch(Exception e){
System.out.println("Erro 0 -> " + e.getMessage());
}
}
//Copia portas para um Array
protected void carregarPortas() {
try{
int i = 0;
portas = new String[10];
while (listaDePortas.hasMoreElements()) {
CommPortIdentifier ips = (CommPortIdentifier)listaDePortas.nextElement();
portas[i] = ips.getName();
i++;
}
}
catch(Exception e){
System.out.println("Erro 1 -> " + e.getMessage());
}
}
//pesquisa se a Porta existe
public boolean portaExiste(String COMp){
boolean ex = false;
try{
String temp;
while (listaDePortas.hasMoreElements()) {
CommPortIdentifier ips = (CommPortIdentifier)listaDePortas.nextElement();
temp = ips.getName();
if (temp.equals(COMp)== true) {
ex = true;
};
}
return ex;
}
catch(Exception e){
System.out.println("Erro 2 -> " + e.getMessage());
}
return ex;
}
//imprime as portas disponíveis
protected void imprimePortas(){
try{
carregarPortas();
for (int i = 0 ; i < portas.length ; i ++ ) {
if (portas[i] != null ) {
System.out.println(portas[i] + " ");
}
}
System.out.println(" ");
}
catch(Exception e){
System.out.println("Erro 3 -> " + e.getMessage());
}
}
//retorna as portas disponíveis
public String[] getObterPortas(){
return portas;
}
}
//////////////////////////////////////////////////////////////////////////////////////
///As classes são instânciadas em uma tela ABAIXO
//////////////////////////////////////////////////////////////////////////////////////
public class Serial extends javax.swing.JFrame {
/** Creates new form Seial */
public Serial() {
initComponents();
carregaPortas();
}
private void initComponents() {
cmdSair = new javax.swing.JButton();
pnlPortas = new javax.swing.JPanel();
cboPortas = new javax.swing.JComboBox();
jPanel1 = new javax.swing.JPanel();
scroll1 = new javax.swing.JScrollPane();
txtDados = new javax.swing.JTextArea();
cmdLer = new javax.swing.JButton();
getContentPane().setLayout(null);
setTitle("Verificar Portas");
setFont(new java.awt.Font("Verdana", 0, 10));
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
cmdSair.setFont(new java.awt.Font("Verdana", 0, 10));
cmdSair.setText("Sair");
cmdSair.setToolTipText("Sair");
cmdSair.setPreferredSize(new java.awt.Dimension(250, 210));
cmdSair.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmdSairActionPerformed(evt);
}
});
getContentPane().add(cmdSair);
cmdSair.setBounds(10, 300, 250, 25);
pnlPortas.setLayout(null);
pnlPortas.setBorder(new javax.swing.border.TitledBorder(null, "Portas Dispon\u00edveis", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Verdana", 0, 10)));
pnlPortas.setFont(new java.awt.Font("Verdana", 0, 10));
cboPortas.setFont(new java.awt.Font("Verdana", 0, 10));
pnlPortas.add(cboPortas);
cboPortas.setBounds(10, 20, 230, 21);
getContentPane().add(pnlPortas);
pnlPortas.setBounds(10, 10, 250, 60);
jPanel1.setLayout(null);
jPanel1.setBorder(new javax.swing.border.TitledBorder(null, "Ler Chip", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Verdana", 0, 10)));
jPanel1.setFont(new java.awt.Font("Verdana", 0, 10));
jPanel1.setPreferredSize(new java.awt.Dimension(250, 210));
scroll1.setFont(new java.awt.Font("Verdana", 0, 10));
txtDados.setColumns(20);
txtDados.setEditable(false);
txtDados.setRows(8);
scroll1.setViewportView(txtDados);
jPanel1.add(scroll1);
scroll1.setBounds(10, 20, 230, 140);
cmdLer.setFont(new java.awt.Font("Verdana", 0, 10));
cmdLer.setText("Ler");
cmdLer.setToolTipText("Sair");
cmdLer.setPreferredSize(new java.awt.Dimension(77, 25));
cmdLer.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmdLerActionPerformed(evt);
}
});
jPanel1.add(cmdLer);
cmdLer.setBounds(10, 170, 90, 25);
getContentPane().add(jPanel1);
jPanel1.setBounds(10, 80, 250, 210);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-277)/2, (screenSize.height-370)/2, 277, 370);
}
private void cmdLerActionPerformed(java.awt.event.ActionEvent evt) {
ler();
}
private void cmdSairActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new Serial().show();
}
// Variables declaration - do not modify
private javax.swing.JComboBox cboPortas;
private javax.swing.JButton cmdLer;
private javax.swing.JButton cmdSair;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel pnlPortas;
private javax.swing.JScrollPane scroll1;
private javax.swing.JTextArea txtDados;
// End of variables declaration
private void carregaPortas(){
try{
SerialCom serial = new SerialCom();
String port[] = serial.getObterPortas();
for (int i = 0 ; i < port.length ; i ++ ) {
if (port[i] != null ) {
cboPortas.addItem(serial.portas[i]);
}
}
}
catch(Exception e){
System.out.println("Erro " + e);
}
}
private void ler(){
try{
SComm serial = new SComm(cboPortas.getSelectedItem().toString().trim());
serial.abrirPorta();
serial.habilitarEscrita();
serial.lerDados();
}
catch(Exception e){
System.out.println("Erro " + e);
}
}
}