{"id":1852,"date":"2014-06-22T21:54:00","date_gmt":"2014-06-23T02:54:00","guid":{"rendered":"http:\/\/linuxitos.com\/main\/recibir-datos-desde-arduino-utilizando-una-interfaz-en-java\/"},"modified":"2014-06-22T21:54:00","modified_gmt":"2014-06-23T02:54:00","slug":"recibir-datos-desde-arduino-utilizando-una-interfaz-en-java","status":"publish","type":"post","link":"https:\/\/linuxitos.com\/main\/recibir-datos-desde-arduino-utilizando-una-interfaz-en-java\/","title":{"rendered":"Recibir datos desde arduino utilizando una interfaz en java"},"content":{"rendered":"<div style=\"text-align: center;\"><span style=\"color: purple; font-family: Verdana, sans-serif; font-size: large;\"><b>Ejecutar jbuttons desde arduino al presionar botones f\u00edsicos.<\/b><\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\">Recientemente desarroll\u00e9 una aplicaci\u00f3n utilizando arduino para manipular una interfaz gr\u00e1fica a trav\u00e9s de botones f\u00edsicos conectados a arduino. La interfaz gr\u00e1fica fue hecha en java, utilizando netbeans 8.0 en fedora 20.<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\">Fue la primera vez que utilic\u00e9 arduino, adem\u00e1s tambi\u00e9n fue la primera vez que conect\u00e9 arduino con java.<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\">Cuando se usa linux, por lo general se complica lo suficiente al querer ejecutar un programa, la mayor\u00eda de las veces es por cuestiones de permisos de archivos o permisos de ejecuci\u00f3n de archivos, as\u00ed tambi\u00e9n como los permisos que tenga el directorio donde est\u00e1 almacenado dicho ejecutable.<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\">Antes de comenzar es necesario que tengan instalado:<\/span><\/div>\n<p><\/p>\n<li style=\"background-color: #1e1e1e;\"><span style=\"color: white; font-family: Liberation Mono, bitstream vera sans mono, DejaVu Sans Mono, Courier New, consolas, monaco, courier, monospace;\"><span style=\"font-size: 14px; line-height: 18.66200065612793px; white-space: pre;\"><b>Java<\/b><\/span><\/span><\/li>\n<li style=\"background-color: #1e1e1e;\"><span style=\"color: white; font-family: Liberation Mono, bitstream vera sans mono, DejaVu Sans Mono, Courier New, consolas, monaco, courier, monospace;\"><span style=\"font-size: 14px; line-height: 18.66200065612793px; white-space: pre;\"><b>Arduino<\/b><\/span><\/span><\/li>\n<li style=\"background-color: #1e1e1e;\"><span style=\"color: white; font-family: Liberation Mono, bitstream vera sans mono, DejaVu Sans Mono, Courier New, consolas, monaco, courier, monospace;\"><span style=\"font-size: 14px; line-height: 18.66200065612793px; white-space: pre;\"><b>Librerias de arduino<\/b><\/span><\/span><\/li>\n<li style=\"background-color: #1e1e1e;\"><span style=\"color: white; font-family: Liberation Mono, bitstream vera sans mono, DejaVu Sans Mono, Courier New, consolas, monaco, courier, monospace;\"><span style=\"font-size: 14px; line-height: 18.66200065612793px; white-space: pre;\"><b>Netbeans 7.4 O superior<\/b><\/span><\/span><\/li>\n<p><\/p>\n<div style=\"text-align: justify;\"><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\">Tomar\u00e9 en cuenta que ya tienen instalado los paquetes necesarios y continuar\u00e9 con la explicaci\u00f3n de la peque\u00f1a aplicaci\u00f3n que he creado.<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\"><b>Se utiliz\u00f3 la tarjeta arduino uno.<\/b>&nbsp;<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\"><b>Descripci\u00f3n del proyecto: crear una interfaz en java utilizando jframe con 4 botones, cada bot\u00f3n realizar\u00e1 un determinada acci\u00f3n. Realizar un peque\u00f1o tablero con 4 pushbuttons conectados a arduino. La idea es que cuando se presione un bot\u00f3n en el tablero se ejecute la acci\u00f3n de un bot\u00f3n en la interfaz desarrollada en java. De tal modo que el dispositivo de interacci\u00f3n sea el tablero con botones.<\/b><\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\"><b><br \/><\/b><\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\"><b>Realizaci\u00f3n:<\/b><\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\">Primero se crear\u00e1 la interfaz gr\u00e1fica, lo dejar\u00e9 a su criterio, es un jframe que debe de tener 4 botones.<\/span><\/div>\n<div style=\"clear: both; text-align: center;\"><a href=\"http:\/\/4.bp.blogspot.com\/-3Rxnz0UAbIk\/U6UEC2iQAzI\/AAAAAAAAAGs\/112JBLNC7ks\/s1600\/Captura+de+pantalla+de+2014-06-20+23:02:32.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img loading=\"lazy\" decoding=\"async\" border=\"0\" src=\"http:\/\/4.bp.blogspot.com\/-3Rxnz0UAbIk\/U6UEC2iQAzI\/AAAAAAAAAGs\/112JBLNC7ks\/s1600\/Captura+de+pantalla+de+2014-06-20+23:02:32.png\" height=\"221\" width=\"320\" \/><\/a><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\">Pueden crear una interfaz parecida a la imagen de arriba o hacer una que les convenga.<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\">Los botones f\u00edsicos que estar\u00e1n conectados a arduino pueden dise\u00f1arlos o colocarlos en un protoboard.<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">El circuito es el siguiente:<\/span><\/p>\n<div style=\"clear: both; text-align: center;\"><a href=\"http:\/\/4.bp.blogspot.com\/-L48EPUoo2pw\/U6eSPo18vjI\/AAAAAAAAAG8\/h27venkq08s\/s1600\/ejemploFritzing_bb.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img loading=\"lazy\" decoding=\"async\" border=\"0\" src=\"http:\/\/4.bp.blogspot.com\/-L48EPUoo2pw\/U6eSPo18vjI\/AAAAAAAAAG8\/h27venkq08s\/s1600\/ejemploFritzing_bb.png\" height=\"138\" width=\"320\" \/><\/a><\/div>\n<p><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\">El programa que estar\u00e1 codificado en arduino es el siguiente:<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">\/\/se declaran los pines de entrada que se usaran<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">const int buttonPin = 2; &nbsp; &nbsp; \/\/Se reserva el numero de pin de entrada<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">const int buttonPin2 = 3; &nbsp; &nbsp;\/\/Se reserva el numero de pin de entrada<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">const int buttonPin3 = 4; &nbsp; &nbsp;\/\/Se reserva el numero de pin de entrada<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">const int buttonPin4 = 5; &nbsp; &nbsp;\/\/Se reserva el numero de pin de entrada<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">const int ledPin = &nbsp;12; &nbsp; &nbsp; &nbsp;\/\/Se reserva el numero de pin de entrada<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">const int ledPin2 = &nbsp;11; &nbsp; &nbsp; \/\/Se reserva el numero de pin de entrada<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">const int ledPin3 = &nbsp;10; &nbsp; &nbsp; \/\/Se reserva el numero de pin de entrada<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">const int ledPin4 = &nbsp;9; &nbsp; &nbsp; &nbsp;\/\/Se reserva el numero de pin de entrada<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">\/\/variables que cambian de valor durante la ejecucion<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">int buttonState = 0; &nbsp; &nbsp; &nbsp; &nbsp; \/\/variable que almacena el valor del estado del pin de entrada buttonPin<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">int buttonState2 = 0; &nbsp; &nbsp; &nbsp; &nbsp;\/\/variable que almacena el valor del estado del pin de entrada buttonPin2<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">int buttonState3 = 0; &nbsp; &nbsp; &nbsp; &nbsp;\/\/variable que almacena el valor del estado del pin de entrada buttonPin3<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">int buttonState4 = 0; &nbsp; &nbsp; &nbsp; &nbsp;\/\/variable que almacena el valor del estado del pin de entrada buttonPin4<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">int buttonStateFinal1 = 0; &nbsp; &nbsp; &nbsp; &nbsp; \/\/variable que almacena el valor del estado del pin de entrada buttonPin<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">int buttonStateFinal2 = 0; &nbsp; &nbsp; &nbsp; &nbsp;\/\/variable que almacena el valor del estado del pin de entrada buttonPin2<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">int buttonStateFinal3 = 0; &nbsp; &nbsp; &nbsp; &nbsp;\/\/variable que almacena el valor del estado del pin de entrada buttonPin3<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">int buttonStateFinal4 = 0; &nbsp; &nbsp; &nbsp; &nbsp;\/\/variable que almacena el valor del estado del pin de entrada buttonPin4<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">int sensorPin = A0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\/\/entrada del sensor de ritmocardiaco se declara el pin que se usara<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">int sensorValue = 0; &nbsp; &nbsp; &nbsp; &nbsp; \/\/variable en la que se almacena el valor leido del pin de entrada del sensor<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">int leerDatos=0; \/\/variable para indicar si se continua leyendo o no;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">void setup(){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; \/\/Serial.begin(115200); \/\/Open the serial port<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; Serial.begin(9600); \/\/se abre el puerto serial<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; \/\/se inicializan los pines salida en caso de que se necesiten<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; pinMode(ledPin, OUTPUT);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; pinMode(ledPin2, OUTPUT);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; pinMode(ledPin3, OUTPUT);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; pinMode(ledPin4, OUTPUT);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; \/\/se inicializan los pines de entrada y que seran los que se tienen que leer<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; \/\/para saber cual es estado de cada boton<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; pinMode(buttonPin, INPUT);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; pinMode(buttonPin2, INPUT);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; pinMode(buttonPin3, INPUT);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; pinMode(buttonPin4, INPUT);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">}<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">void loop(){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/\/leerDatos = Serial.read();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/\/if(leerDatos==&#8217;1&#8242;){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; \/\/ se leen los estados de cada uno de los pines de entrada<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; buttonState = digitalRead(buttonPin);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; buttonState2 = digitalRead(buttonPin2);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; buttonState3 = digitalRead(buttonPin3);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; buttonState4 = digitalRead(buttonPin4);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; \/\/sensorValue = analogRead(sensorPin);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; \/\/ verifica el valor leido de cada pin<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; \/\/ si el valor es 1 los leds se encienden, en caso contrario<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; \/\/ el led continua apagado<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; if(buttonState == HIGH){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; digitalWrite(ledPin4, HIGH);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; buttonStateFinal1=1;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; }else{<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; digitalWrite(ledPin4, LOW);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; buttonStateFinal1=0;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; if(buttonState2 == HIGH){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; digitalWrite(ledPin3, HIGH);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; buttonStateFinal2=2;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; }else{<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; digitalWrite(ledPin3, LOW);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; buttonStateFinal2=0;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; if(buttonState3 == HIGH){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; digitalWrite(ledPin2, HIGH);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; buttonStateFinal3=3;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; }else{<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; digitalWrite(ledPin2, LOW);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; buttonStateFinal3=0;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; if(buttonState4 == HIGH){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; digitalWrite(ledPin, HIGH);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; buttonStateFinal4=4;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; }else{<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; digitalWrite(ledPin, LOW);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; buttonStateFinal4=0;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; \/\/se imprimen los valores leidos a pantalla, este proceso es necesario<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; \/\/de aqui depende para que desde java se puedan leer dichos valores<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; Serial.println(buttonStateFinal1);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; Serial.println(buttonStateFinal2);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; Serial.println(buttonStateFinal3);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; Serial.println(buttonStateFinal4);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; \/\/Serial.println(sensorValue);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; \/\/el programa se espera un tiempo de 100 milisegundos antes de volver<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; \/\/a realizar una lectura, no es tan necesario el retardo, para<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; \/\/para que java no se le haga pesado, es necesario un retardo<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/\/}<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; delay(100); \/*detiene el programa por 100 milisegundos antes de volver a leer los puerto*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">}<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">El c\u00f3digo de arduino parece mucho, pero las impresiones son m\u00e1s bien para saber qu\u00e9 est\u00e1 pasando en cada momento, as\u00ed que descuiden, dependiendo de la necesidad que tengan, as\u00ed pueden ir modificando dicho c\u00f3digo.<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">Despu\u00e9s de que su c\u00f3digo ya est\u00e9 codificado en la tarjeta, procedemos a crear la aplicaci\u00f3n en java.<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">La clase principal, que se mostr\u00f3 en la primera imagen lleva el siguiente c\u00f3digo. En realidad pueden crear s\u00f3lo un jframe con 4 botones o los que consideren necesarios y listo.<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">\/*<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp;* La clase VentanaJuego que extiende jframe, contiene el juego principal,<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; es decir, \u00e9sta clase es donde se muesra en s\u00ed todo el proceso del juego.<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp;*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">package ventanasScoop;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">import java.util.logging.Level;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">import java.util.logging.Logger;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">\/**<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp;*<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp;* @author neo Jes\u00fas Fernando Merino Merino<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp;*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">public class VentanaJuego extends javax.swing.JFrame implements &nbsp;Runnable{<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/**<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp;* Se crea un objeto de tipo VentanaJuego para que reciba el objeto que le<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp;* envian de la interfaz iniciarScoop, dicho objeto.<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp;* Es aqu\u00ed donde se crea el objeto que se usar\u00e1 para leer los datos desde arduino<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp;*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/*Objeto creado para manipular la interfaz del juego scoop*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private VentanaJuego jugarJuego;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/*Se crea el objeto de tipo DatosJugador dicho objeto almacenar\u00e1 toda la<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; informaci\u00f3n necesari del jugador que inice sesi\u00f3n para jugar*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private DatosJugador datosJugador;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/*variable que almacena la interfaz de inicio de sesi\u00f3n*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private iniciarScoop inicioSesion;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/*variable que se usa para iniciar el sensado de la tarjeta arduino<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; b\u00e1sicamente es un hilo que se lanza, y que s\u00f3lo se consultan los datos<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; almacenados en un vector declarado en dicha clase*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/\/LecturaFromArduino lectArduino=new LecturaFromArduino();<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private LecturaFromArduino lectArdReciv;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp;&nbsp;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/*variable que debe de estar activada para poder realizar validaciones cuando<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; el usuario est\u00e9 sobre esta ventana*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private boolean permitBotArdVentJueg=true;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp;&nbsp;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/*variable que almacena el hilo que se pone en ejecuci\u00f3n para relizar la validadi\u00f3n<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; de los datos que se reciben al presionar un bot\u00f3n en el tapete*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; Thread obtDatArd;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp;&nbsp;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public VentanaJuego() {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; initComponents();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public VentanaJuego(VentanaJuego ventJuego,DatosJugador datJugador) {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; initComponents();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public VentanaJuego(iniciarScoop inicio,DatosJugador datJugador) {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; \/*constructor que recibe el objeto de inicio de sesi\u00f3n y los datos del jugador*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; initComponents();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; setLocationRelativeTo(null);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; setDatosJugador(datJugador);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; setInicioSesion(inicio);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; visulizarNomJugadorVentana();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public VentanaJuego(iniciarScoop inicio,DatosJugador datJugador, LecturaFromArduino lectArd) {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; \/*constructor que recibe el objeto de inicio de sesi\u00f3n, los datos del jugador<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; y el objeto que inicia la lectura desde arduino, para poder acceder al m\u00e9todo<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; que retorna el arreglo de datos obtenidos desde arduino*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; initComponents();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; setLocationRelativeTo(null);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; setDatosJugador(datJugador);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; setInicioSesion(inicio);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; visulizarNomJugadorVentana();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: blue;\">setLectArduReciv(lectArd);<\/span><\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; iniciaValidBotArd();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public void ninioONinia(DatosJugador datosJugador){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; \/*m\u00e9todo que valida si el usuario que a accedio es ni\u00f1o o ni\u00f1a, para modificar<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; el color de los \u00edconos*\/ &nbsp;&nbsp;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public final void visulizarNomJugadorVentana(){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; \/*se establece el nombre del jugador en el jlabel*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; jlDatosJugador.setText(\u00abBienvenido: \u00ab+datosJugador.getNomJugador());<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/*inicia declaraci\u00f3n de m\u00e9todos de set y get de los atributos de esta interfaz*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public void setVentanaJugador(VentanaJuego ventana){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; jugarJuego=ventana;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public final void setDatosJugador(DatosJugador datos){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; datosJugador=datos;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public final void setInicioSesion(iniciarScoop inicio){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; inicioSesion=inicio;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public void setPermitBotArdVentJue(boolean permitir){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; permitBotArdVentJueg=permitir;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public final void setLectArduReciv(LecturaFromArduino let){<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; \/*inicializa el objeto recibido del sensado desde arudino*\/<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; lectArdReciv=let;<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public boolean getPermitBotArdVentJue(){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; return permitBotArdVentJueg;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/*finaliza declaraci\u00f3n de m\u00e9todos de set y get de los atributos de esta interfaz*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp;&nbsp;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; <span style=\"color: blue;\">public void detenerValidBotVentJuego(boolean &nbsp;estado){<\/span><\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; \/*detiene o reanuda la valici\u00f3n de los resultados que se obtienen de los<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; hilos, dependiendo si el usuario se encuentra en la ventanaJuego*\/<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; permitBotArdVentJueg=estado;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><span style=\"color: blue;\">&nbsp; &nbsp; <\/span>}<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; <span style=\"color: blue;\">public final void iniciaValidBotArd(){<\/span><\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; obtDatArd=new Thread(this);<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; obtDatArd.start();<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><span style=\"font-family: Verdana, sans-serif;\"><span style=\"color: blue;\">&nbsp;<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private void jbSalirActionPerformed(java.awt.event.ActionEvent evt) { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; new SalirJuego(this, true,datosJugador,inicioSesion,lectArdReciv).setVisible(true);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; } &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp;&nbsp;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/\/ Variables declaration &#8211; do not modify &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private javax.swing.JButton jbAyuda;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private javax.swing.JButton jbIniciar;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private javax.swing.JButton jbRanking;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private javax.swing.JButton jbSalir;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private javax.swing.JLabel jlDatosJugador;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private javax.swing.JLabel jlTutorial;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private javax.swing.JPanel jpBackJuego;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; \/\/ End of variables declaration &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; <span style=\"color: red;\">@Override<\/span><\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public void run() {<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/throw new UnsupportedOperationException(\u00abNot supported yet.\u00bb); \/\/To change body of generated methods, choose Tools | Templates.<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; \/*m\u00e9todo que ejecuta acciones en la ventana de men\u00fa del jugador, de acuerdo<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; a los datos que se reciben de los botones que se presionan desde el tapete*\/<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; String [] datosArd;<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; while (permitBotArdVentJueg) { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; datosArd = lectArdReciv.getDatRecArduino();<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/System.out.println(\u00abDatos de arduino: \u00ab+datosArd[0]+\u00bb &nbsp;\u00ab+datosArd[1]+\u00bb &nbsp;\u00ab+datosArd[2]+\u00bb &nbsp;\u00ab+datosArd[3]);<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(\u00abDatos de arduino: \u00ab+datosArd[0]);<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/*proceso de validar qu\u00e9 n\u00famero de bot\u00f3n se ha presionado*\/<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; switch(datosArd[0]){<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case \u00ab1\u00bb:<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jbIniciar.doClick();<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case \u00ab2\u00bb:<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jbRanking.doClick();<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case \u00ab3\u00bb:<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jbAyuda.doClick();<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case \u00ab4\u00bb:<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jbSalir.doClick();<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; default:<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try {<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Thread.sleep(100);<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } catch (InterruptedException ex) {<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Logger.getLogger(VentanaJuego.class.getName()).log(Level.SEVERE, null, ex);<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/><span style=\"color: blue; font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\"><\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">}<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">B\u00e1sicamente las funciones que est\u00e1n de azul, son las m\u00e1s importantes.<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">En primera se inicia un un hilo que crea un objeto de tipo zyncronized, el cual lee constantemente desde el puerto que est\u00e9 conectado arduino, luego valida qu\u00e9 bot\u00f3n fue el que se puls\u00f3, de acuerdo al n\u00famero que se recibe de arduino.<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">Y lo que se hace es, que se ejecuta el doclic() del bot\u00f3n que se necesario. Y listo.<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">La clase de arduino es la siguiente:<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">package ventanasScoop;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">import gnu.io.CommPortIdentifier;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">import gnu.io.PortInUseException;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">import gnu.io.SerialPort;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">import gnu.io.SerialPortEvent;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">import gnu.io.SerialPortEventListener;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">import gnu.io.UnsupportedCommOperationException;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">import static java.awt.image.ImageObserver.ERROR;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">import java.io.BufferedReader;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">import java.io.IOException;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">import java.io.InputStreamReader;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">import java.io.OutputStream;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">import java.util.Enumeration;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">import java.util.TooManyListenersException;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">\/**<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp;*<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp;* @author neo Jesus Fernando Merino<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp;*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">public class LecturaFromArduino implements SerialPortEventListener{<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private OutputStream Output = null;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private BufferedReader Input = null;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private SerialPort serialPort;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private String[] inputLine;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private final String PORT_NAME = \u00ab\/dev\/ttyUSB0\u00bb;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private static final int TIME_OUT = 110;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private static final int DATA_RATE = 9600;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; int cont=0;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public LecturaFromArduino() {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; this.inputLine = new String[5];<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public String[] getDatRecArduino(){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; \/*retorna el arreglo que contien los datos que se reciben desde Arduino*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; return inputLine;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; @Override<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public synchronized void serialEvent(SerialPortEvent oEvent) {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try{<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inputLine[0]=Input.readLine();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/inputLine[1]=Input.readLine();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/inputLine[2]=Input.readLine();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/inputLine[3]=Input.readLine();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/System.out.println(\u00abDatos recibidos: \u00ab+inputLine[0]+\u00bb : \u00ab+inputLine[1]+\u00bb : \u00ab+inputLine[2]+\u00bb : \u00ab+inputLine[3]);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }catch (IOException e){<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.err.println(\u00abErorr funci\u00f3n serialEvent: \u00ab+e.getMessage());<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp;&nbsp;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; public void ArduinoConnection() {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; CommPortIdentifier portId = null;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; while (portEnum.hasMoreElements()) {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (PORT_NAME.equals(currPortId.getName())) {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; portId = currPortId;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; if (portId == null) {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.exit(ERROR);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; try {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; serialPort = (SerialPort) portId.open(this.getClass().getName(), TIME_OUT);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; serialPort.setSerialPortParams(DATA_RATE,<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SerialPort.DATABITS_8,<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SerialPort.STOPBITS_1, \/*SerialPort.STOPBITS_1*\/<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SerialPort.PARITY_NONE);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Output = serialPort.getOutputStream();<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; serialPort.addEventListener(this);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; serialPort.notifyOnDataAvailable(true);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; } catch (PortInUseException | UnsupportedCommOperationException | IOException | TooManyListenersException e) {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.err.println(\u00abError ArduinoConnection: \u00ab+e.getMessage());<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private void EnviarDatos(String data) {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; try {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Output.write(data.getBytes());<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; } catch (IOException e) {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.exit(ERROR);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; private void RecibirDatos() throws IOException {<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; int Output1;<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; Output1 = Integer.parseInt(Input.readLine());<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; cont= Integer.parseInt(Input.readLine());<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(\u00abOuput1: \u00ab+Output1 +\u00bb valor recibido: \u00ab+cont);<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">&nbsp; &nbsp; }<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">}<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">Ojo, necesitar\u00e1n la librer\u00eda&nbsp;librxtxSerial.so, tambi\u00e9n el jar&nbsp;RXTXcomm.jar, y lo colocan en la carpeta lib de su proyecto, y pues claro importan los jar para que funcione.<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\">Adem\u00e1s en la pesta\u00f1a propiedades de su proyecto deben especificar la ruta en donde se encuentra la&nbsp;<\/span><span style=\"font-family: Verdana, sans-serif;\">librer\u00eda&nbsp;librxtxSerial.so en la secci\u00f3n run en la descripci\u00f3n VM options: de preferencia muevan la librer\u00eda&nbsp;<\/span><span style=\"font-family: Verdana, sans-serif;\">librxtxSerial.so a la carptea lib de su proyecto, y coloquen la siguiente ruta.<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\">-Djava.library.path=\u00bb..\/scoopControlButtons\/lib\/\u00bb<\/span><br \/><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span><span style=\"font-family: Verdana, sans-serif;\"><br \/><\/span>Ejecutan su proyecto y deber\u00e1 funcionar, en caso de que no, por favor env\u00edenme un msj para aclarar dudas.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Ejecutar jbuttons desde arduino al presionar botones f\u00edsicos. Recientemente desarroll\u00e9 una aplicaci\u00f3n utilizando arduino para manipular una interfaz gr\u00e1fica a trav\u00e9s de botones f\u00edsicos conectados a arduino. La interfaz gr\u00e1fica fue hecha en java, utilizando netbeans 8.0 en fedora 20. Fue la primera vez que utilic\u00e9 arduino, adem\u00e1s tambi\u00e9n fue la primera vez que conect\u00e9 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1507,87,1470,446,4,1516,1518,1519,1517,1472],"tags":[],"class_list":["post-1852","post","type-post","status-publish","format-standard","hentry","category-arduino","category-gnome","category-hilos","category-java","category-linux","category-login-fedora","category-puerto-serial","category-rxtx","category-sincronizacion","category-thread"],"_links":{"self":[{"href":"https:\/\/linuxitos.com\/main\/wp-json\/wp\/v2\/posts\/1852","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linuxitos.com\/main\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linuxitos.com\/main\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linuxitos.com\/main\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/linuxitos.com\/main\/wp-json\/wp\/v2\/comments?post=1852"}],"version-history":[{"count":0,"href":"https:\/\/linuxitos.com\/main\/wp-json\/wp\/v2\/posts\/1852\/revisions"}],"wp:attachment":[{"href":"https:\/\/linuxitos.com\/main\/wp-json\/wp\/v2\/media?parent=1852"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linuxitos.com\/main\/wp-json\/wp\/v2\/categories?post=1852"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linuxitos.com\/main\/wp-json\/wp\/v2\/tags?post=1852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}