Visual Basic para Excel

Arduino y Java (NetBeans

Instalación y configuración

  • Instrucciones generales Arduino y Java (NetBeans) - Del sitio oficial de Arduino
  • Descargar la librería RXTX (puerto serial mfz-rxtx-2.2-20081207-win-x64) - IMPORTANTE: Se debe decargar la Versión según el sistema operativo que se tenga ya sea de 32 o 64 bits.
  • Instalación para Windows (las instrucciones vienen en el archivo install descargado con la librería):   En Archivos de programa, en java sobre la carpeta jdkxxxx//jre//lib - ext copiar el archivo RXTXcomm.jar, y en la carpeta jdkxxxx//jre //bin los archivos rxtxParallel.dll (opcional) y rxtxSerial.dll (xxxx versión del jdk)
  • Se crea un proyecto nuevo NetBeans y se adiciona la librería RXTXcomm desde propiedades del proyecto o haciendo clic derecho sobre Bibliotecas (Libraries) y en Agregar archivo JAR (Add JAR).  La ubicación del archivo JAR es la ruta de la descarga realizada.
  • Y listo

Proyecto 1:
Encender y apagar leds desde NetBeans utilizando los botones del GUI (salidas)

Sketch Arduino - Montaje y Pruebas con Arduino

const int ledRojo = 13;
const int ledAzul = 12;
int lectura = 0;

void setup() {
  Serial.begin(9600); // abre el puerto serie
  pinMode (ledRojo, OUTPUT);
  pinMode (ledAzul, OUTPUT);
  digitalWrite (ledRojo, LOW);
  digitalWrite (ledAzul, LOW);
}
void loop() {
  if (Serial.available()>0){
    lectura = Serial.read();
    if (lectura == '0'){
      digitalWrite (ledAzul, LOW);
    } else
      if (lectura =='1') {
          digitalWrite (ledAzul, HIGH);
      } else
        if (lectura == '2'){
          digitalWrite (ledRojo, LOW);
        } else
        if (lectura == '3'){
          digitalWrite (ledRojo, HIGH);
        }
    }
}

Nuevo formulario (JFrame) y diseño del entrono gráfico de usuario

Se crea la clase ventanaArduino y se requiere cuatro imágenes para el efecto de encendido y apagado para cada color de led.

NOTA: Aquí dejo un sitio muy interesante para generar ícono png en diferentes colores y resoluciones [visitar sitio]

Programación y ejecución

  • Librerías requeridas

import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import java.io.OutputStream;
import java.util.Enumeration;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

  • Declaraciones

     private static final String apaga_azul ="0";
    private static final String enciende_azul ="1";
    private static final String apaga_rojo ="2";
    private static final String enciende_rojo ="3";

    
    // variables de conexión
       private OutputStream salida = null;
    SerialPort puertoSerial;
    private final String puerto = "COM4";
    private static final int tiempo_espera = 2000; // milisegundos
    private static final int data_rate = 9600; // igual que en arduino

  • En la constructora se agrega:

       inicializarConexion();
    jLabel1.setIcon(new ImageIcon(getClass().getResource("/imagenes/apagadoazul.png")));
    jLabel2.setIcon(new ImageIcon(getClass().getResource("/imagenes/apagadorojo.png")));

  • Se crea el método inicializar conexión

public void inicializarConexion(){
        CommPortIdentifier puertoID = null;
        Enumeration puertoEnum = CommPortIdentifier.getPortIdentifiers();
        while (puertoEnum.hasMoreElements()){
            CommPortIdentifier actualPuertoID = (CommPortIdentifier) puertoEnum.nextElement();
            if (puerto.equals(actualPuertoID.getName())){
                puertoID = actualPuertoID;
                break;
            }
        }
        if (puertoID==null){
            mostrarError ("No hay conexión");
            System.exit(ERROR);
        }
        try {
            puertoSerial = (SerialPort) puertoID.open(this.getClass().getName(),tiempo_espera);
            puertoSerial.setSerialPortParams (data_rate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
            salida = puertoSerial.getOutputStream();
        } catch (Exception e) {
            mostrarError (e.getMessage());
            System.exit(ERROR);
        }
  }

  • Y los métodos enviar datos y mostrar error:

private void enviarDatos (String datos){
        try {
            salida.write(datos.getBytes());
        } catch (Exception e) {
            mostrarError ("Error");
            System.exit(ERROR);
        }
    }
   

public void mostrarError(String mensaje){
        JOptionPane.showConfirmDialog(this, mensaje, "Error", JOptionPane.ERROR_MESSAGE);
    }

  • Se programa el botón de encender el o los led seleccionados en los jRadioButton1 y 2

      if (jRadioButton1.isSelected()){
            enviarDatos(enciende_azul);
            jLabel1.setIcon(new ImageIcon(getClass().getResource("/imagenes/encendidoazul.png")));
        }
        if(jRadioButton2.isSelected()){
            enviarDatos(enciende_rojo);
            jLabel2.setIcon(new ImageIcon(getClass().getResource("/imagenes/encendidorojo.png")));
        }

  • Se programa el botón de apagar el o los led seleccionados en los jRadioButton1 y 2

        if (jRadioButton1.isSelected()){
            enviarDatos(apaga_azul);
            jLabel1.setIcon(new ImageIcon(getClass().getResource("/imagenes/apagadoazul.png")));
        }
        if(jRadioButton2.isSelected()){
            enviarDatos(apaga_rojo);
            jLabel2.setIcon(new ImageIcon(getClass().getResource("/imagenes/apagadorojo.png")));
        }

  • En la clase Main del protecto se crea un objeto de tipo ventanaArduino y se vizualiza

ventanaArduino objeto = new ventanaArduino();
objeto.setVisible(true);

  • Ejecutar el proyecto

Proyecto 2:
Encender y apagar leds del JFrame desde pulsadores de Arduino (entradas)

Trabajo del estudiante