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
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import java.io.OutputStream;
import java.util.Enumeration;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
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);
Proyecto 2:
Encender y apagar leds del JFrame desde pulsadores de Arduino (entradas)
Trabajo del estudiante