Mostrando entradas con la etiqueta java. Mostrar todas las entradas
Mostrando entradas con la etiqueta java. Mostrar todas las entradas

miércoles, 13 de mayo de 2020

JAVA - PUZZLE


JAVA
PUZZLE

Un puzzle parecido había realizado hace años para XWIN , también lo había portado a SDL , hace poco lo porté Gambas(VB Linux).
Este puzzle tiene 3 niveles dependiendo del tamaño de la cuadrícula.
Nivel 1. - 4x4
Nivel 2. - 6x6
Nivel 3. -10x10
Cada nivel tiene su propia tabla de puntos.
Dependiendo del nivel empiezas con unos puntos que se irán disminuyendo según pasa el tiempo.
Con el botón izquierdo del ratón se mueven las piezas.


Juego funcionando.

El juego es simple, pero maneja muchas rutinas para aprender a programar.
Carga imágenes jpg, trocea imágenes, utiliza TIMER, carga sonidos, lee y escribe ficheros.
Es un programa para aprender a programar Java.

Antes de nada hay que explicar que Java no es el mejor entorno para realizar juegos, por lo que portar el juego desde SDL no ha sido lo más placentero.
En unas líneas explico mi principales problemas en el desarrollo.

Uno de lo que me volvió loco durante 2 horas fue esto:
        lienzo.drawImage (imagen1,xo,yo,xo+w,yo+h,  xi,yi,xi+w,yi+h,jPanel1);
Pensaréis ¿que problema puede tener esto?. El problema es la sobrecarga de operadores en Java.
Dependiendo del tipo de argumentos que se la pasa a una función, interpreta realizar una función u otra.
En mi caso interpretaba en la compilación la opción incorrecta y producía mal funcionamiento del programa.
Después de muchas pruebas, decidí pasar los parámetros limpios, sin operaciones.
        int a,b,c,d;       
        a=xi+w; b=yi+h; c=xo+w; d=yo+h;
        lienzo.drawImage (imagen1,xo,yo,c,d,  xi,yi,a,b,jPanel1);

Solucionado.    :)

Tiempos de espera Wait().
Algunos os aconsejan utilizar:   Thread.sleep(1);
Esto produce muchos problemas en el tiempo de espera.
Lo mejor es utilizar:      System.currentTimeMillis();
La rutina empleada por mi es:
  void miWait(int z)
    {
       long Time0 = System.currentTimeMillis();
        Time0+=z;
        while(Time0>System.currentTimeMillis())
        {
           // System.out.println("WAIT2="+System.currentTimeMillis());
        }
    }

   
El siguiente problema que me surgió es  repaint()
El repaint en Windows 7, Windows 10, WindowsXP y Linux funciona diferente de un sistema a otro.
Al final he tenido que realizar mi propio repaint:
 public void paint (Graphics g)
        {   
            super.paint(g);         
            if(game==1)
                printPantaH();
            else
                pantallaInit();
            //System.out.println("REPINTAR");
         }


Este punto no es un problema de Java, es digamos que no hace fácil como maneja ficheros sencillos.
Para el manejo de ficheros en C las bibliotecas están muy estandarizadas.
Si quieres mejorar la velocidad en la lectura/escritura de fichero puedes crear muchas rutinas útiles.
En Java pueden utilizar muchas formas, visita la página https://www.baeldung.com/java-write-to-file .
Para usar ficheros simples de puntuaciones he utilizado la forma más fácil que he encontrado.
 void load_puntos()
   {
     int z;
     String tmp;
            try {
             File myObj = new File(ficheroPuntos);
             Scanner myReader = new Scanner(myObj);      
             for(z=0;z<5;z++)
                {
                    nombresMax[z]=myReader.nextLine();
                    tmp=myReader.nextLine();
                    puntosMax[z]=Integer.valueOf(tmp);
                }
             myReader.close();
           }
            catch (FileNotFoundException e) {
             System.out.println("An error occurred.");
           }
   }


Creo que en Java todo es bastante lioso, muchas clases y muchas funciones que hace complicado cosas simples.
O tienes mucha memoria y mucha práctica en Java, o te ves mirando ayudas continuamente.
Pero claro esto es una opinión de un programador de C , C++ y Basic.

Está desarrollado en Debian 10 con netbeans, y probado en Windows7.

PUZZLE netbeans             

PUZZLE_ejecutable

Saludos.
Juan Galaz


Bibliografía.

PUZZLE SDL
PUZZLE Gambas
https://www.baeldung.com/java-write-to-file

lunes, 4 de mayo de 2020

Localización de municipios de España, Palencia y Burgos, con precisión


JAVA
Coordenadas en un mapa
Localización de municipios
Mapa de España
Mapas de Palencia y Burgos con precisión

En el anterior programa había realizado un localizador de municipios en un mapa.
El mapa era general de España, por lo que la precisión no era demasiado exacta.
En esta ocasión utilizo un mapa con una escala de 1 : 2.000.000 , lo que implica bastante más precisión.


Programa localizador de municipios de España.

Como aún no estaba contento con la precisión, me puse manos a la obra, y capture de Google Maps los mapas de Palencia y Burgos como práctica.
Es bastante tedioso el copiar muchas fotos de planos de Google Maps y juntarlas en una, pero me lo tomé como reto.
El motivo de usar las provincias de Palencia y Burgos es debido a que en una nací, y en la otra resido.


Programa localizador de municipios de Burgos.


Programa localizador de municipios de Palencia.

Los programas de la provincia son muy precisos al tener una gran exactitud  los mapas de Google.
El que quiera puede hacer su propio mapa, lo más difícil es digitalizar el mapa.


PROGRAMA conProyecto netBeans

PROGRAMA_EXE

Saludos.
Juan Galaz


Bibliografía.

https://www.google.es/maps

jueves, 30 de abril de 2020

JAVA - Coordenadas en un mapa Localización de municipios


JAVA
Coordenadas en un mapa
Localización de municipios

En esta ocasión junto los dos anteriores programas:
Coordenadas en un mapa. MAPA
Municipios de España. MUNICIPIOS
Teníamos una base de datos con todos los municipios españoles, en esta base de datos venían las coordenadas de latitud y longitud.
Con esa información de coordenadas, las transformamos en pixel de pantalla, donde dibujamos un cuadrado.

También tenemos que tener en cuenta que la tierra no es plana, y los mapas no son demasiado precisos, por lo cual la traslación de las coordenadas grados decimales a pixel de pantalla, no son lo exactas que deberían ser.
Si la escala del mapa es grande, el error será grande.

Debo pedir perdón a los de las islas Canarias, debido a que el programa debía de ser simple, no están implementadas las islas.
Los grados que proporciona el programa son decimales, son los más fáciles de entender, además son los que utiliza Google Maps.
Como la base de datos de municipios es antigua, los datos de habitantes no serán demasiado exactos.


Programa funcionando.



PROGRAMA conProyecto netBeans

PROGRAMA_EXE

Saludos.
Juan Galaz


lunes, 27 de abril de 2020

JAVA-Coordenadas en un mapa


JAVA
Coordenadas en un mapa

En este intento de aprender a programar en JAVA, creo un visor de coordenadas en un mapa.
Existen  dos sistemas de notación: grados sexagesimales o grados decimales.

"
Grados sexagesimales


El sistema sexagesimal es el método tradicional usado en los mapas impresos, plegables, libros, etc.
Consiste en tres grupos de valores: grados, minutos y segundos.
Por ejemplo el Capitolio de La Habana está situado en los: 23° 08' 06'' N 82° 21' 34'' W

Grados decimales

El sistema decimal es muy empleado es programas y aplicaciones de mapas en la red como Google Maps, OpenStreetMaps, además en los sistemas de navegación por GPS.
Se separa la parte entera de la fraccionaria con una coma y se transforman los minutos y segundos en números decimales.
Por ejemplo a la misma ubicación anterior le corresponde en formato decimal: 23.134999, -82.359444  
"


https://norfipc.com/herramientas/convertir-grados-geograficos-minutos-segundos-decimales.php

También tenemos que tener en cuenta que la tierra no es plana, y los mapas no son demasiado precisos, por lo cual la traslación de las coordenadas de pantalla de una imagen plana a coordenadas en grados decimales, no son lo exactas que deberían ser.
Contra más grande sea el mapa, el error será más grande. En un mapa de España puede ser el error de hasta 20Km por pixel.

Entendiendo lo que se puede esperar en exactitud de este programa, realizo el programa que muestra las coordenadas en un punto de un mapa de España cuando se pulsa el ratón sobre un lugar de la imagen.
Debo pedir perdón a los de las islas Canarias, debido a que el programa debía de ser simple, no están implementadas las islas.
Los grados que proporciona el programa son decimales, son los más fáciles de entender, además son los que utiliza Google Maps.


Programa funcionando.

Está realizado en Debian10_64bits comprobado en Windows10_64bits , Windows7_32bits, WindowsXP y Debian9 32bits .
Tenéis que tener en cuenta, que por defecto netBeans utiliza la versión JDK 11, la versión mayor que tiene instalado el sistema.
Lo normal es que la versión que tengáis instalado en vuestro sistema sea la versión  de Java 8, la mas extendida.
Cambiar en propiedades del proyecto en netBeans  a la versión JDK 8, y vuestro programa no tendrá problemas en cualquier sistema operativo.


PROGRAMA conProyecto netBeans

PROGRAMA_EXE

Saludos.
Juan Galaz


jueves, 23 de abril de 2020

JAVA - Base de datos autores, SQLite

Página principal

JAVA
Base de datos autores
SQLite

Sigo con el trabajo de portar antiguos programas realizados en C a JAVA.
Esta vez es un base de datos SQLite,  para consulta de escritores.
En un antiguo programa lo había realizado en C  para Linux  dbautor.html, y para Windows autoresw.html .


En esta ocasión la programo en Java en mi intento de aprender a programar en este lenguaje.
A pesar de existir mucha documentación sobre Java y SQLite , es difícil buscar soluciones concretas , o está cortado el código, o no funciona.
Lo normal es que las dll estén instaladas en Windows, pero si tienes algún problema al respecto, se pueden bajar de: https://www.sqlite.org/index.html
Sigo pensando que es mucho mejor programar en C que en Java.
La única y gran ventaja que tiene Java sobre C, es que no tienes que tocar ni una sola línea de código para que funcione el programa en todas las plataformas.


Linux.


Windows10

Está realizado en Debian10_64bits comprobado en Windows10_64bits , Windows7_32bits, WindowsXP y Debian9 32bits, .


PROGRAMA con Proyecto netBeans

PROGRAMA_EXE

Saludos.
Juan Galaz

Bibliografía:

https://javapuntes.wordpress.com/2014/01/31/instalar-y-usar-driver-jdbc-sqlite-en-netbeans/
https://serprogramador.es/como-conectar-y-utilizar-java-con-sqlite/
https://professor-falken.com/programacion/java/como-conectar-java-a-una-base-de-datos-sqlite/

domingo, 19 de abril de 2020

JAVA - Municipios de España


JAVA
Municipios de España

En mi intento de coger el gusto al Java, y mira que le pongo ganas, sigo con un anterior programa realizado para android,  androj.html .
Este programa es una especie de base de datos que busca los municipios de España.
El fichero con la base de datos de municipios se llama municipios0.txt que se incluye en el propio programa dentro de la carpeta de recursos internos llamada datos.
En esta carpeta interna  datos, incluyo también un icono de representación del programa, y un fondo para que quede más estético el programa.
Al no saber mucho de Java, y provenir de C o Basic, el manejo de ficheros se hace de lo mas lioso.
En Java necesitas abrir un descriptor de ficheros FileReader , y un BufferedReader . En C con openFile vale, se pensarán los diseñadores de Java que los sistemas operativos no tienen como mínimo dos buffer para que el acceso sea rápido, además de el de el propio disco.
También te obligan a comprobar con try que la operación no tuvo errores.
Otras de las sorpresas que tuve y que me llevo tiempo encontrar el error fue la función substring.
Esta función extrae un trozo de una cadena, en mi caso era xtmp=tmp.substring(0,25); , para que los campos largos me los acortara.
El problema era que unas veces me funcionaba y otras no. Estuve tiempo hasta que descubrí que no comprobaba el tamaño de la cadena de origen. Entonces para que sirven los String, si en cosas como esta no comprueban el tamaño.
Tuve que solucionarlo con: int z=tmp.length();         if(z>25) z=25;         xtmp=tmp.substring(0,z); .
Creo a mi parecer que en Java se complican demasiado utilizando para todo herencias y clases. Pero esto es lo que hay.
Pero dejémonos de quejas sobre Java y continuemos.

He realizado dos programas que hacen lo mismo.
El primero utiliza referencias para colocar los diferentes elementos gráficos en la ventana principal.
El segundo utiliza coordenadas absolutas para colocar los elementos gráficos. Esto es debido a que quería colocar un fondo en la aplicación para que quedara más estética. También  implica utilizar absolutelayout que debes incluir en el programa.
El botón de Maps solo funciona en Linux, debido a que abre el navegador firefox con la coordenadas, en Windows se podrá hacer, pero lo he dejado como tarea para otros.



Normal.
Con absolutelayout y fondo.

Está realizado en Debian9_32bits comprobado en Windows10_64bits , Windows7_32bits, WindowsXP y Debian10 64bits, .


PROGRAMA


Saludos.
Juan Galaz


viernes, 17 de abril de 2020

JAVA - Cálculo bobinas núcleo de aire



JAVA
Cálculo bobinas núcleo de aire


En un programa anterior  androi.html  había realizado un programa que calculaba la inductancia de una bobina con núcleo de aire.
Estaba realizado para la plataforma Android, y como es normal en Java.
Como estaba en la época de programar en Java, y  es  fácil pasar de Android a PC, en un rato lo he pasado.


Lo mas difícil fue insertar la imagen en el programa, pero después de ver unos videos que empleaba un texto con imagen de fondo, la programación se hizo rápida.

Una cosa que me ha pasado y que quiero comentar, es el problema de que cuando genero el archivo *.jar desde netBeans 11 , solo me funciona en Debian10.
Pero si lo genero tanto en Windows10_64bits como en Debian9_32bits, me funciona en cualquier plataforma, incluso WindowsXP.
Aunque la tendencia es pasar todas las aplicaciones a 64bits, tengo la sensación de que funciona todo mejor y mas rápido en las plataformas de 32bits.

PROGRAMA


Saludos.
Juan Galaz

Bibliografía:
https://www.youtube.com/watch?v=xGzeEUHcsj8

martes, 14 de abril de 2020

Arduino. Control salidas realizado con JAVA y NetBeans


Arduino

Control salidas

JAVA - NetBeans


En el montaje anterior javled.html había realizado un controlador de salidas mediante una placa Arduino.
Estaba realizado en JAVA, había salido bastante frustrado en su realización.
Me había prometido no tocar durante bastante tiempo el JAVA, pero no pude resistir el probar el IDE netBeans para mitigar mi frustración.
Después de unos cuanto vídeos sobre este IDE, decidí hacer un video propio demostrando como portar mi anterior montaje a netBeans.
Lo difícil ya estaba realizado, la programación serie, solo me faltaba copiar y pegar parte del código de un proyecto a otro.
Le resultado ha sido bastante satisfactorio, además de útil para próximas aplicaciones.


Interface del programa.


Programa funcionando.

El programa esta realizado a base de botones, y no como en el anterior proyecto que eran JRadioButton.
Quizás los JRadioButton son en este caso mas intuitivos, pero mi intención era hacerlo de otro modo.








VIDEOTUTORIAL

PROGRAMA-JAVA-ARDUINO


Espero que les sirva este video tutorial para vuestros proyectos.

Saludos.
Juan Galaz

Bibliografía:

http://josedeveloper.com/2012/01/28/comunicacion-serial-java-y-arduino/

lunes, 13 de abril de 2020

Arduino control salidas con JAVA


Arduino
Control salidas

JAVA


En un montaje anterior arseta.html había realizado un controlador de salidas mediante una placa Arduino.
Estaba realizado en Gambas (VB Linux), en esta ocasión lo realizo en JAVA.
Normalmente o trabajo en C, C++, y Basic.
El trabajo que he tenido que realizar para programarlo en JAVA a sido increíble.
Intentar encontrar fuentes donde existan ejemplos sobre la programación de los puertos serie en JAVA a sido muy difícil.
Cuando encontraba algo, estaba semicompletado o no funcionaba realmente.
En una de mis múltiples búsquedas encontré:
    http://josedeveloper.com/2012/01/28/comunicacion-serial-java-y-arduino/
Además de proporcionar los programas completos, enseñaba como compilar los programas sin errores.


Circuito.


Programa JAVA funcionando.


En cuanto al programa realizado para el arduino, los códigos se basan en anteriores montajes míos, son del tipo: petición de dato a través del interface serie, y respuesta por parte del arduino a través del mismo interface serie.
Por ejemplo:
     SET 8,0          Apagar pin 8  

    SET 8,1          Encender pin 8
El que quiera puede mandar los comandos por el teminal y mandarlos con SEND, harán el mismo efecto.
En la parte del Arduino, está preparado para que entienda desde los pin 14 al 19, que corresponden a A0 - A5 , pero no están implementados en la interface JAVA.
El cansancio de programar este programa en JAVA, me hizo que no realizara la comprobación del estado real de las salidas, estaba harto.
Para colmo, en teoría se puede empaquetar todo en un único fichero *.jar, pero yo no lo he conseguido.
Para hacer mas fácil la compilación y ejecución del programa, he realizado dos ficheros de comandos BASH   ./copile y ./run .
Lo que parece fácil de C o C++ , se hace muy complicado en JAVA, como el manejo de ficheros o puertos serie.
Está realizado en el entorno de Debian 10 , por lo cual el arduino debe encontrarse en /dev/ttyUSB0 , lo normal es que  buscase automáticamente donde está conectado el arduino, pero lo he simplificado.
Si por casualidad estuviese en otro sitio, deberemos indicarlo en la línea de comandos. ./run /dev/ttyUSB1 .

Espero que les sirva este programa para vuestros proyectos.

PROGRAMA-JAVA-ARDUINO

Saludos.
Juan Galaz

Bibliografía:
http://josedeveloper.com/2012/01/28/comunicacion-serial-java-y-arduino/

domingo, 5 de abril de 2020

Osciloscopio Arduino JAVA - Processing - 183000 M/S


Osciloscopio

Arduino

JAVA - Processing


En uno de mis artículos anteriores había mostrado varios analizadores digitales - analógicos .
Entre ellos mostraba Arduinoscope que era un visualizador de 6 señales analógicas utilizando el arduino.

Era bastante útil para visualizar señales en baja velocidad, pero el arduino podía convertir señales A/D bastante mas rápido.
El programa arduinoscope estaba programado en JAVA utilizando una biblioteca llamada Processing. processing
Processing es un potente software dedicado a la producción de imágenes, animaciones e interactivos.
Processing está compuesto de todo un entorno de programación en JAVA, (muy similar al del arduino), incluidas un montón de librerías para el tratamiento de imágenes.
Se puede descargar de su própia página, y funciona en Windows, Linux y Mac, además de ser Open Source.

Mis conocimientos en JAVA son bastante limitados, y en muchos casos me vuelvo loco utilizando funciones que en C o C++ están permitidas y en JAVA no.
Me puse manos a la obra para transformar el Arduinoscope en un Osciloscopio de un solo canal, pero con muestreo de 180000 m/S.
En varios artículos había realizado un osciloscopio similar realizado en diferentes lenguajes de programación, Gambas, SDL, Xwin, wxwidgets.
Para mi es un reto programar en JAVA, pero los retos me gustan.

Como soy un tanto particular en la programación, he utilizado el editor Geany y la línea de comandos linux (Debian 10) para compilación (copile) y ejecución (run).
También he colocado todos los archivos en un solo directorio, incluidas las fuentes (un formato de fuentes de lo mas particular formato vlw) .
Los purista me meterían a la cárcel, pero bueno soy autodidacta, y se me puede perdonar.
Forma de onda en mi osciloscópio. En un oscilocópio comercial.

Señal de 5000 Hz.

El muestreo máximo que permite el arduino en modo Fast es de 183000 m/S , con una resolución de 8 bits.
A esta velocidad la exactitud de la conversión A/D no es muy precisa, pero suficiente.



Como se puede ver he colocado una resistencia entre la entrada A1 y los 3,3V, y esto tiene un motivo.
Resultaba que al hacer pruebas de medida en DC, las medidas no eran correctas, eran algo inferiores.
Revisando voltajes por el circuito descubrí que la tensión en el arduino nano  no era de 5V , era de 4,7V y alteraba todas las mediciones.
Mirando los esquemas del arduino UNO y el arduino NANO , había diferentes formas de alimentar el micro. El primero utilizaba un transistor sin caída de tensión, y el segundo un diodo que hacia caer la tensión entre 0,3V a 0,7V . Este cambio en la alimentación produce errores de lectura .
Para solucionar este problema, realizo una lectura de referencia de los 3,3V en el pin A1. Con esta lectura de referencia calculo la lectura real de la entrada A0.

Espero que le haya gustado este proyecto.
Ha sido mas una lucha por aprender JAVA que por realizar el osciloscopio.

VIDEO

PROGRAMA

Saludos.
Juan Galaz




Bibliografía:
https://github.com/konsumer/arduinoscope
https://processing.org/download/

jueves, 5 de mayo de 2016

ANDROID - ARDUINO - Programación JAVA - MAX7219 - Bluetooth - HC05 Conexión serie.


Android

ANDROID - ARDUINO
Anunciador con matriz de led controlado por android
Programación JAVA
MAX7219
Bluetooth  HC05
Conexión serie

En un montaje de electrónica, había realizado un marcador con el chip MAX7219. En este montaje el control lo había hecho utilizado un interprete de basic  en su modo trial  BASIC4Android. Me quedó las ganas de realizarlo en java, pero no había programado nunca en java. Ahora que tengo un poco de idea lo he realizado, quitándome la espina.
He de decir que ha sido difícil la programación, buscando por aquí y por allí encontré algún que otro ejemplo que me ayudo bastante. He de decir que al estar muy extendido android, existen infinidad de páginas y tutoriales que te ayuda a la programación.
El programa hace uso del bluetooth para manda los textos que se representan en la matriz de led. Utiliza la comunicación serie para transmitir la información, en el otro lado se encuentra el módulo HC05 que es un convertidor de bluetooth a serie.
En el terminal android debemos tener activado el bluetooth y emparejados los dispositivos.
Escribimos lo que queramos y lo mandamos a la matriz de caracteres.

Mediante eclipse diseñamos el interface gráfico.


activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <EditText
        android:id="@+id/Aentrada"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView1"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="22dp"
        android:ems="10"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:inputType="text"
        android:text="@string/entrada"
        android:textSize="@dimen/abc_action_bar_subtitle_text_size" />

    <EditText
        android:id="@+id/Asalida"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/Aentrada"
        android:layout_below="@+id/Aentrada"
        android:layout_marginTop="26dp"
        android:ems="10"
        android:inputType="text"
        android:text="@string/salida"
        android:textSize="@dimen/abc_action_bar_title_text_size" >

    </EditText>

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/Asalida"
        android:layout_marginTop="60dp"
        android:gravity="center" >

        <Button
            android:id="@+id/Aboton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="FunSend1"
            android:text="@string/boton1" />

        <Button
            android:id="@+id/Aboton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="FunSend2"
            android:text="@string/boton2" />

        <Button
            android:id="@+id/Aboton3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="FunSend3"
            android:text="@string/boton3" />
    </LinearLayout>

    <Button
         android:id="@+id/Asalir"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/linearLayout1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="34dp"
        android:onClick="FunSalir"
        android:text="@string/salir" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/Aentrada"
        android:layout_alignParentTop="true"
        android:text="@string/hello_world" />

</RelativeLayout>

También hay que modificar el ficheros AndroidManifest.xml para poder utilizar el bluetooth.
Además impedimos que rote la pantalla.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.seta43blue"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />


    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>



La totalidad de los fichero los he comprimido y los he colocado en el enlace que se ve al final de página.
El programa en java es largo y solo explicare algún trozo.
El programa empieza con la función onCreate donde se mira si el dispositivo android tiene bluetooth, y si lo tiene activado.
Después lanzamos una función FunConectar2 donde se realiza la conexión al dispositivo.
 protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        Wentrada=(EditText)findViewById(R.id.Aentrada);
        Wsalida=(EditText)findViewById(R.id.Asalida);  
        Miblue = BluetoothAdapter.getDefaultAdapter();
                 
        if (Miblue == null)
        {
              AlertDialog.Builder dialog = new AlertDialog.Builder(this);
              dialog.setMessage("Sin soporte bluetooth");
              dialog.setCancelable(false);
              dialog.setPositiveButton("OK", new DialogInterface.OnClickListener()
                  {
                  public void onClick(DialogInterface dialog, int which)   { finish(); }                                            
                });
                dialog.show();
        }
       
        if (!Miblue.isEnabled())
        {
              AlertDialog.Builder dialog = new AlertDialog.Builder(this);
              dialog.setMessage("Activar bluetooth");
              dialog.setCancelable(false);
              dialog.setPositiveButton("OK", new DialogInterface.OnClickListener()
                  {
                  public void onClick(DialogInterface dialog, int which)   { finish(); }                                            
                });
                dialog.show();
        }
       
        AlertDialog.Builder dialog0 = new AlertDialog.Builder(this);
        dialog0.setMessage("Programa para conectar android y arduino.\nManda frases a la matriz de led.\nSETA43");
        dialog0.setCancelable(false);
        dialog0.setPositiveButton("OK", new DialogInterface.OnClickListener()
              {
              public void onClick(DialogInterface dialog, int which)   { FunConectar2(); }                                            
            });
        dialog0.show();
              
    }
La función FunConectar2 es la que realiza la conexión al dispositivo ya emparejado.
Crea un lista de dispositivos emparejados.
ArrayList <String> list = new ArrayList<String>();

Prueba a crear un createBluetoothSocket al dispositivo emparejado. Esto me creó una confusión debido a que no daba error aunque no existiese ese dispositivo, pero lo que creo que comprueba si dispone de conexión serie.
btSocket = createBluetoothSocket(device);

Prueba a crear un  btSocket.connect();  ,y si se se puede indica en pantalla ok->dirección desl dispositivo.
btSocket.connect();
Log.d(TAG, "....Conexion ok...");
Wentrada.setText("ok->" + address);

Para terminar creamos una clase donde se realiza la escritura y la lectura desde el bluetooth. ConnectedThread.
mConnectedThread = new ConnectedThread(btSocket);
mConnectedThread.start();                          

La clase ConnectedThread tiene varias funciones: la própia de creación ConnectedThread  que se inicia con start, la run que no la usamos para nuestro ejemplo, y la write utilizada para mandar la cadena.
 private class ConnectedThread extends Thread
     {
        private final InputStream mmInStream;
        private final OutputStream mmOutStream;
 
        public ConnectedThread(BluetoothSocket socket)
         {
            InputStream tmpIn = null;
            OutputStream tmpOut = null;
            try
                {
                tmpIn = socket.getInputStream();
                tmpOut = socket.getOutputStream();
                }
            catch (IOException e) { }
            mmInStream = tmpIn;
            mmOutStream = tmpOut;
         }
 
        public void run() {
           byte[] buffer = new byte[256]; 
           int bytes; 
            // Keep listening to the InputStream until an exception occurs
            while (true)
             {
                try {
                         bytes = mmInStream.read(buffer);
                         bytes=bytes+1; //No sirve para nada es para quitar aviso
                    //h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget();     // Send to message queue Handler
                    }
                catch (IOException e) { break; }
             }
        }
 
        /* Call this from the main activity to send data to the remote device */
        public void write(String message) {
            Log.d(TAG, "...Data to send: " + message + "...");
            byte[] msgBuffer = message.getBytes();
            try
                {  mmOutStream.write(msgBuffer);  }
            catch (IOException e)
                {  Log.d(TAG, "...Error data send: " + e.getMessage() + "...");  }
        }

    }

Para termina creamos las funciones que mandan la cadena mediante la pulsación de los botones.
public void FunSend1(View view)
    {
        mConnectedThread.write(Wsalida.getText()+ "        " + "\n");
    }
public void FunSend2(View view)
    {
        mConnectedThread.write("/" + Wsalida.getText() + "\n");
    }  
public void FunSend3(View view)
    { 
        mConnectedThread.write("&"+ Wsalida.getText() + "\n");       
    }  

Perdonar si no explico muy bien los programa, estoy aprendiendo java y android.

Captura de pantalla del dispositivo físico.


PROGRAMA


Notas
Para depurar los programas  utilizamos la consola de eclipse.
  private static final String TAG = "bluetooth2";
 
Log.d(TAG, "...Conectando...");

Con el comando Log.d(TAG, "...Conectando..."); mandamos la cadena bluetooth2  ...Conectando...   a la consola android.
Para poder filtra todos los mensaje, que son muchos, configuramos de la siguiente forma:

Observamos  en la pantalla LogCat todos los mensajes que lleven la cadena bluetooth2.

Saludos
Juan Galaz


Bibliografía:
http://code.tutsplus.com/es/tutorials/create-a-bluetooth-scanner-with-androids-bluetooth-api--cms-24084
http://developer.android.com/intl/es/guide/topics/connectivity/bluetooth.html
http://www.tutorialspoint.com/android/android_bluetooth.htm
http://solderer.tv/data-transfer-between-android-and-arduino-via-bluetooth/
http://www.intorobotics.com/how-to-develop-simple-bluetooth-android-application-to-control-a-robot-remote/
http://www.instructables.com/id/Android-Bluetooth-Control-LED-Part-2/
https://examples.javacodegeeks.com/category/android/core/bluetooth/