Arduino Con Java
Arduino Con Java
7 en Eclipse
(por Gustavo Circelli)
Para aquellos desarrolladores que utilizan el Eclipse como herramienta y entorno de programacin,
les cuento que he probado la librera de Antony en esta plataforma para encender y apagar el Led
del pin 13 de la placa Arduino Uno. No obstante lo que he realizado es una comunicacin
bidireccional de manera que cuando Arduino encienda o apague dicho led, esta enve un mensaje de
confirmacin a la interface Java. Por otra parte en envo de datos desde la interface utiliza la funcin
sendByte, que a diferencia de otros Post lo hace mediante sendData. La diferencia es que sendBye
tiene la posibilidad de enviar enteros entre 0 y 255. Para conocer ms de esta librera se encuentran
los Post anteriores, incluso navegando dentro de los Archivos de la API encontraran la
implementacin de dichas funciones y sus diferencias, para ello deben utilizar un editor de texto de
su agrado para leer los archivos.java.
https://github.com/PanamaHitek/Arduino-JavaAPI/releases/tag/v2.7.0
En principio no debera haber inconvenientes en cuanto al uso de la librera dado que NetBeans es
tambin una plataforma en Java , aunque siempre encontramos alguna que otra diferencia en cuanto
a las implementaciones.
El Eclipse que utilizo es el Indigo, ya que posee la ventaja de disponer del WindowBuider que nos
permite disponer de todas las herramientas y objetos Swing para disear una interface grfica.
El sitio para el Eclipse Indigo lo pueden encontrar en:
https://eclipse.org/downloads/packages/release/Indigo/SR2
La intencin no es hacer un aporte sobre Eclipse, y entiendo que quienes lo utilicen ya estn
familiarizados con este entorno.
Lo primero que sucede al ejecutar Eclipse es preguntarnos el WorkSpace a utilizar. Este es una
carpeta donde ustedes realizan sus proyectos, incluso pueden tener diferentes WorkSpace para
distintos tipos de proyecto. Lo pueden crear en cualquier Disco, C, D, E etc, pero es conveniente
hacerlo en la carpeta donde tengan el Eclipse y su archivo de ejecucin.
File - new JavaProyect , le damos el nombre Ejemplo LEDD2.7
Crearemos
el
proyecto
LED2.7
una
vez
creado
debe
lucir
como
esto:
Podemos observar como Eclipse inserta el mtodo esttico Main() que es el encargado de ejecutar
la aplicacin. Dentro de este mtodo se crea el objeto frame , como instancia de la clase creada Led:
LED frame = new LED();
Incluso podramos agregar un ttulo al frame que se va a visualizar:
frame.setTitle(Probando librera arduino 2.7);
frame.setVisible(true); har visible dicho marco.
Lo que hago ahora es una forma de trabajo que considero es ms ordenada. Debemos importar la
librera de Arduino, pero previo a ello creamos una carpeta dentro del proyecto llamada por ejemplo
Librerias, con el objeto de colocar all los archivos .jar necesarios de la librera. De esta manera en
cada proyecto sabremos las libreras que utiliza, es a mi entender , ms ordenado.
Hay varias maneras de crear esta carpeta Librera, se puede hacer manualmente entrando a la
carpeta del proyecto y crearla como cualquier carpeta. La otra manera es hacerlo desde Eclipse.
Desde Eclipse nos posicionamos en src new SourceFolder , y le damos el nombre Librerias.
Lo que haremos ahora es Importar la librera, ya que el hecho de haber creado esta carpeta no
implica haberla importado, recordar que es solo a los efectos de orden.
Para importar nos posicionamos sobre el Proyecto LEDD2.7 Click derecho properties:
Vamos a JavaBuiltPath . Aqu hay varias opciones , entre ellas Add External Jar y Add Jar.
Como la librera est en una carpeta local que hemos creada hacemos Add Jar.
Vamos a Native Library Location(None) , aparece None porque no est configurado an.
Vamos a Edit y luego a WorkSpace: y seleccionamos la carpeta Libreras que es donde est la
librera de Arduino. Y le decimos OK.
JButto
n
JPanel
JLabel
A los botones debemos cambiarle la propiedad Name : OK y OFF tambin podemos darle estilos a
los botones, colores, etc.
Es importante que los componentes se definan como globales , es decir variables de clase globales
que se definen al inicio de la clase LED.java:
private JPanel contentPane;
private
private
private
private
JButton btnOn;
JButton btnOf;
static JPanel panel;
static JLabel lblEstado;
Para hacer que estas variables de clase sean globales y accesibles desde cualquier lugar del cdigo
nos posicionamos sobre el componente: sobre el panel de navegacin de las propiedades del objeto
y hacemos Convert Local to Fiel
Conve
rt
El cdigo:
Para que no haya errores vamos a tener que ir importando libreras en la medida que se vayan
solicitando.
Lo comn es que al ir generando cdigo, java , en caso de errores nos va indicando opciones para
eliminarlos, y la mayora se resuelven importando las libreras.
Creamos ahora una instancia de la Clase Ardunio, es decir un Objeto:
public class LED extends JFrame { // Nuestra CLASE
private JPanel contentPane;
private JButton btnOn;
private JButton btnOf;
private static JPanel panel;
private static JLabel lblEstado;
static PanamaHitek_Arduino ardu = new PanamaHitek_Arduino(); // Creamos Objeto ardu
JPanel contentPane;
JButton btnOn;
JButton btnOf;
static JPanel panel;
static JLabel lblEstado;
En mi caso uso el COM5, pero cada uno debe ver cual es el puerto conectado a Arduino. Ver Post
anteriores.
Notar que la conexin lleva como argumento al objeto evento. Lo dems es conocido, el puerto y
la velocidad ( misma que Arduino)
Volvemos a nuestra Clase donde creamos el objeto evento para ver como queda la recepcin desde
Arduino:
static SerialPortEventListener evento = new SerialPortEventListener() {
};
e.printStackTrace();
} // envia un Byte desde 0 a 255
}
});
btnOf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
ardu.sendByte(78); // envia entero 78
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
Codigo completo:
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
gnu.io.SerialPortEvent;
gnu.io.SerialPortEventListener;
java.awt.BorderLayout;
java.awt.EventQueue;
javax.swing.JFrame;
javax.swing.JPanel;
javax.swing.border.EmptyBorder;
javax.swing.JButton;
javax.swing.border.LineBorder;
java.awt.Color;
javax.swing.UIManager;
java.awt.event.ActionListener;
java.awt.event.ActionEvent;
javax.swing.JLabel;
panamahitek.Arduino.PanamaHitek_Arduino;
java.awt.Font;
javax.swing.border.CompoundBorder;
javax.swing.border.MatteBorder;
java.awt.Cursor;
JPanel contentPane;
JButton btnOn;
JButton btnOf;
static JPanel panel;
static JLabel lblEstado;
btnOn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
ardu.sendByte(10);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // envia un Byte desde 0 a 255
}
});
btnOn.setBackground(new Color(216, 191, 216));
btnOn.setFont(UIManager.getFont("Button.font"));
btnOn.setForeground(new Color(0, 0, 0));
btnOn.setBounds(37, 22, 89, 23);
contentPane.add(btnOn);
btnOf = new JButton("OFF");
btnOf.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
btnOf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
ardu.sendByte(78);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
btnOf.setForeground(Color.BLACK);
btnOf.setFont(UIManager.getFont("Button.font"));
btnOf.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 255)));
btnOf.setBackground(new Color(216, 191, 216));
btnOf.setBounds(37, 104, 89, 23);
contentPane.add(btnOf);
panel = new JPanel();
panel.setBackground(new Color(255, 0, 0));
panel.setBounds(205, 58, 35, 23);
contentPane.add(panel);
lblEstado = new JLabel("ARDUINO DICE:");
lblEstado.setFont(new Font("Tahoma", Font.BOLD, 11));
lblEstado.setBounds(37, 150, 317, 26);
contentPane.add(lblEstado);
}
Cdigo ARDUINO:
/*
Reading a serial ASCII-encoded string
*/
// pins for the LEDs: