TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: groundman en 03 de Septiembre de 2012, 20:16:51
-
hola.despues de estudiar el protocolo modbus de cabo a rabo.y realizar desde cero un programa en asm para el control de
las tramas. me veo obligado a desarroyar un interface para poder visualizar las tramas de una manera comoda.para ello he
desarroyado una aplicacion de android.ya que ese es el sistema operativo que tiene mi mobil.que lo prefiero al Phone.
la plicacion esta realizada con el app_inventor.la primera impresion que me ha dado el app_inventor.es que es muy sencillo
de realizar aplicaciones.pero esta muy limitado o es que todabia no lo entiendo del todo.por mi parte no he logrado
copiar y pegar.lo que hace que la aplicacion haya que realizarla desde cero.y si te quedas sin internet,no puedes seguir.
yo quiero cambiar el titulo del proyecto y no veo la forma.asi que el titulo del icono de la aplicacion no tendra que ver
con esta.
ya que aunque la aplicacion iva dirijida al la visualizacion de una trama modbus.esta la he creado para el envio/recepcion
de caracteres mediante bluetooth.es decir,esta aplicacion es un hiperterminal bluetooth.
La aplicacion tiene un cuadro para introducir la MAC del dispositivo bluetooth al que nos vamos a conectar.en mi caso es
un modulo bluetooth SPP con una usart a 9600bps por defecto.
Tiene un boton para conectar/desconectar al/del modulo bluetooth.para conectar hay que hacer clic.y para desconectar mantener pulsado.
Antes de realizar la conexion.hay que emparejar el modulo bluetooth con el dispositivo mobil.en caso contrario se visualizaran
errores de conexion en el terminal.
aveces puede producirse varios intentos fallidos de conexion.pero no hay que desistir.si esto sucede es posible que tengamos que
volver a apagar/encender el modulo bluetooth.
Una vez que tengamos un enlace de comunicacion.introduciremos la cadena de caracteres a enviar en el cuadro de texto pequeño.
y pulsaremos el boton Enviar.esto hara que recivamos la trama en el dispositivo que tengamos conectado el modulo bluetooth.
en mi caso en el hiperterminal de windows del PC.
ademas cualquier caracter que enviemos desde el PC.sera recivido en el dispositivo mobil.
La tecla Borrar es para limpiar el cuadro de recepcion y Salir para cerrar el programa.
si no disponemos de un modulo bluetooth para realizar las prueva.tambien podemos conectarnos a otros dispositivos bluetooth que tengan puerto SSP
como un GPS bluetooth.
este es el codigo:
(http://img715.imageshack.us/img715/2742/bluetoothhiperterm.png) (http://imageshack.us/photo/my-images/715/bluetoothhiperterm.png/)
Uploaded with ImageShack.us (http://imageshack.us)
el archivo no me lo deja subir.haber si encuentro donde alojarlo.
-
No esta demás ir aprendiendo a usar AppInventor, pero una aplicación tipo hyperterminal mediante bluetooth ya habia: BlueTerm :mrgreen:
Para cambiarle el nombre al proyecto podes hace Save As ;-)
Saludos!
-
gracias.pues ya hay dos. :D
he instalado la aplicacion que me indicas.y veo que me queda mucho que aprender con el app_inventor.es mi primera aplicacion y me parece un milagro que funcionara a la primera.
lo que no se es si BlueTerm esta hecho con el app_inventor.me gustaria tener el codigo para poder aprender mas.
esta es una imagen de la aplicacion.
(http://img713.imageshack.us/img713/2773/20120904012644.th.png) (http://imageshack.us/photo/my-images/713/20120904012644.png/)
y este el circuito bluetooth que he montado:
(http://img145.imageshack.us/img145/5515/1346754120867.th.jpg) (http://imageshack.us/photo/my-images/145/1346754120867.jpg/)
-
El AppInventor creo que nació en el MIT como experimento, y no se si lo siguen actualizando.
Yo utilizaría el SDK de Android y eclipse como ide.
Puede descargar el SDK y los plugins para eclipse en:
http://developer.android.comTiene hasta un emulador para probar las aplicaciones, aunque es muy lento.
-
me han aconsejado a usar el SDK de Android en conjunción con Netbeans.
Es lo mismo que el eclipse?
-
Lo mismo, pero me parece que el IDE Netbeans es más pesado que eclipse :tongue:
-
pues me he puesto con el eclipse.y ya estoy haciendo mis primeras aplicaciones con android.
ahora necesito algun ejemplo para comunicarme por bluetooth.
pero necesito que el ejemplo este en un archivo.no en un apk.estaria muy bien el HiperTerm.o el bluetooth chat.
o algo por el estilo.todos los ejemplos que he visto no estan muy bien explicados.y no puedo realizar la aplicacion.si no se produce un error,falta algun archivo.
quiero saber paso a paso como funciona el bluetooth en android.
PD: si quereis ambiar el idioma del eclipse a español.hay que entrar en Ayuda,Install New Sotware... / y añadir la linea: http://download.eclipse.org/technology/babel/update-site/R0.10.0/juno
si es que estais usando la version juno de eclipse. luego le damos añadir.le ponemos un nomre y continuamos despues de elegir el idioma que queramos.
-
como siempre me pasa.solo encuentro las cosas cuando arto de buscar pido ayuda.y por arte de magia lo encuentro.
esta es la direccion donde lo he encontrado: http://pymasde.es/blueterm/
lo he podido compilar en un proyecto nuevo.parece que da algunos warnings.pero no seran muy importantes cuando al instalar el .apk en el movil.me ha funcionado.
ademas tambien me funciona la emulacion en mi dispositivo en modo de depuracion.no pasa lo mismo en el emulador AVD.que aunque si arranca.manda un mensage de que el bluetooth no se puede ejecutar.
mi mobil es un HTC ONE S. con android 4.0.4. asi que podre hacer aplicaciones de todo tipo.haciendo pruevas conb el gps,brujula,wifi.etc
por el momento empezare a desmenuzar el codigo de la aplicacion bluetooth para poder realizar mis propias aplicaciones con bluetooth.
-
por fin despues de un mes aprendiendo a utilizar el ECLIPSE.y a programar en java.ya he podido realizar una plicacion que
controle una transmision por bluetooth.
la verdad es que me ha costado bastante.sobretodo sin tener ni idea de java.hacia mucho tiempo que queria aprender C++.
pero no veia el momento ni tenia el tiempo suficiente.
ahora veo que java y C++ se parecen mucho.y tener una pequeña nocion de C++ y Vbasic.me ha ayudado a entender la programacion
orientada a objetos.cosa que me sonaba a chino.
yo soy mas de ensembler para PICs claro.y prefiero tener el control total del chip.por eso creo que por el momento dejare a un
lado el C compiler para PICs.
bueno,vamos al tema.
para poder entender el funcionamiento del bluetooth para android.he tenido que buscar ejemplos por intenet.pero no
por llegar a encontrar varios ejemplos,he llegado ha realizar lo que queria a la primera.no basta con cojer una aplicacion
y ejecutarla.
tambien esta la compatibilidad entre dispositivos.y dentro de esto,la compatibilidad entre versiones.
la verdad que 30 dias sin parar de estudiar son muchos fines de semana.aunque ya se me acaban las vacaciones(forzosas).
un ejemplo de aqui: https://github.com/luugiathuy/Remote-Bluetooth-Android
si no os funciona cambiar el UUID por este: UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
es el que encontre mas facil de comprender.he visto que tiene alguna clase que se parece mucho a otros ejemplos que he visto
por la red.creo que la mayoria de los ejemplos son mezclas unos de otros.he notado que hay metodos que duplican el tipo de mensajes
de error y estado de la conexion.
yo lo he modificado un poco para mis propositos.pero creo que se le podrian quitar algunos metodos para simplificar la
aplicacion.y de esta forma entender mejor su funcionamiento.pero todabia no tengo los conocimientos suficientes para hacerlo
sin provocar fallos en la aplicacion.
este es el aspecto de la app.
(http://imageshack.us/a/img43/1796/tramabluetooth.jpg)
su funcionamiento es como sigue:
ejecutamos la aplicacion y entramos en el menu.en mi caso un HTC one S.android 4.0.4. son tres puntos que hay en la parte
inferior de la pantalla.
veremos dos opciones.Hacer visible y Conectar con el dispositivo.
tocaremos conectar con el dispositivo.y se nos desplegara una lista con los dispositivos (a nuestro alcance o emparejados).
no he hecho la prueba.
luego conectamos con el dispositivo.en mi caso un modulo bluetooth de SURE.el cual esta conectado al ordenador atraves de un conversor
USb-TTL de 3.3v
nos saldran diferentes mensages indicandonos la conexion o desconexiones establecidas.
ya solo nos queda introducir el texto que queremos enviar en el editText y pulsar el button.podremos ver los caracteres ascii
en el hiperterminal de windows.
tambien he introducido la tecla enter en el boton VOL- del smartphone.y line feed para el boton VOL+
esta aplicacion solo es para enviar datos.por si queremos realizar un proyecto con un microcontrolador que solo necesite
la entrada de datos.en la proxima ya vere que se me ocurre.aunque las posibilidades son infinitas.debido a la cantidad de
modulos que disponen hoy en dia estos smartphones.y las opciones que tiene android para poder gestionarlas.
tambien incluyo la aplicacion mas abajo . y el proyecto aqui: http://www.4shared.com/rar/TyRDqkN3/TramaBluetooth.html
-
para poder hacer practicas.aqui: http://157.253.195.173/ttdewikim1/index.php/Android_Conexi%C3%B3n_Bluetooth_con_ATXMEGA32A4_(Windows)#Aplicaci.C3.B3n_en_Android
(http://imageshack.us/a/img6/110/conexionbluetoot.png)
hay un ejemplo para el envio de unos caracteres.es una aplicacion mas basica que la anterior y asi sera mas facil entender el manejo del bluetooth.
esta es una de las primeras aplicaciones que me descarge.pero por falta de experiencia no pude hacerla funcionar en mi HTC ONE S.
lo que pasaba es que hay que poner a mano la MAC del dispositivo al que queramos conectarnos.
asi que pondremos la mac del modulo bluetooth en la linea: String address ="00:06:66:43:45:20";
lastima que no vea como recivir datos.
tengo la aplicacion BlueTerm.que envia y recive.pero es muy compleja para mis conocimientos y no veo en que parte del programa esta la recepcion.
el problema es que tiene un objeto: emulatorView. que no veo en la paleta de herramientas.me da la sensacion de que ha sido creada por el que ha diseñado
el programa.y no se como acceder a sus propiedades.
-
mirando el codigo.me he dado cuenta de que el programa anterior si que puede recivir datos aunque esta un poco limitado.
enviando mediante el hiperterminal de windows,el caracter "&" . la imagen de la aplicacion cambia.ademas se produce el evento de recivir el caracter &.aunque
es enviando cualquier caracter.
habra que modificar el programa para recivir diferente caracteres ascii.
-
hola.he desmenuzado la aplicacion anterior hasta quitar casi todo lo que no estaba relacionado con la parte que se dedica a la recepcion
de caracteres ascii.he dejado algunas lineas dedicadas a la visualizacion de mensages de error y eventos.
aparte de los metodos de conexion.
podriamos quitar estos mensages.pero no sabriamos que esta pasando del porque no hay conexion en un momento dado.
hay varios casos del porque no se puede establecer una conexion.los cuales se indican con diferentes mensages.
los fallos mas importantes son:
que el dispositivo no sea compatible.p.ejem que no disponga de SPP.
que no sea visible.porque el modulo este apagado o en modo sleep.
o tambien que aunque el dispositivo este ya conectado al modulo bluetooth.no estemos enviandole caracteres.
muchas veces aunque el hiperterminal de windows diga que esta conectado.realmente no lo este.
y tengamos que desconectar y volver a conectar.teniendo en cuenta que el puerto y la velocidad de transmision sea la correcta.
respecto al programa.el registro que hace que se envien los datos es la de abajo.
(strBufferIn) es una variable que contiene una cadena de caracteres. que son los que va reciviendo del buffer de recepcion bluetooth
en la aplicacion del smartphone.
en el programa estos datos seran visualizados en un textView.
este programa no nos da la opcion de elegir a que dispositivo conectarnos.pero si podemos conectarnos sabiendo la mac del dispositivo
al que queremos conectarnos.
si queremos hacer practicas con un modulo bluetooth y el programa.recomiendo copiar la mac y pegar,sera mas rapido que introducir la
mac a mano.
ya que en esta aplicacion hay que cerrarla para cada conexion nueva.por no querer complicarla mucho para su entendimiento.
(http://imageshack.us/a/img825/5303/conexionbluetooth2.jpg)
aqui esta la aplicacion modificada:
http://www.4shared.com/rar/IoC-DbDQ/ConexionBluetoothActivity2.html
-
despues de mucho tiempo intentando realizar una aplicacion que reciba y envie caracteres por bluetoth.al fin he podido modificar
una que me descarge de internet.pero que solo estaba implementada para la recepcion.
a base de hacer pruebas con multitud de errores.he conseguido hacer una aplicacion lo mas basica posible.con la seguridad suficiente
que evitase bloqueos y fallos.ya que estos se indicaran con un mensage.
la aplicacion consta de un boton y un editText para indicar a la mac que queremos establecer comunicacion y conectarnos.
un editText para escribir lo que queremos transmitir,con su boton de Enviar.y un textView para recibir los caracteres desde
el otro dispositivo al cual nos conectaremos.
esta aplicacion es muy simple para que la podamos entender.proximamemnte ire ampliando sus caractereristicas para mejorarla.
(http://imageshack.us/a/img442/8892/activity6.jpg)
http://www.4shared.com/rar/WhIknbcK/ConexionBluetoothActivity6.html
-
hola de nuevo.sigo estudiando el java y el systema operativo android.y cada vez me gusta mas.aunque todabia no lo he asimilado.
de momento sigo mejorando la app anterior.y hay problemas que se me presentan y que poca informacion hay al respecto.
ya que en la programacion hay muchas maneras de hacer la misma cosa.y cuanto mas depurado este el programa.mas dificil es entender
el codigo.
en esta app he añadido la forma de conectarnos a una MAC sin tener que escribirla en un cuadro de texto y pulsar un boton.
en su lugar he realizado un menuItem para seleccionar el dispositivo desde una lista de un menu.asi ahorramos espacio en la pantalla.
tambien he dispuesto mas cuadros de texto y botones para enviar diferentes mensages al dispositivo bluetooth al que nos conectemos.
(http://imageshack.us/a/img13/9591/conexionbluetooth8.jpg)
estoy mareado con un problema con la desconexion del enlace con el dispositivo bluetooth.una vez que conecto no se como desconectar.
sin que tenga problemas con una nueva conexion.
voy a ver si empiezo de cero.para entender que es lo que se me ha pasado por alto.
http://www.4shared.com/rar/1LBifRYb/ConexionBluetoothActivity18.html
-
hola.sigo poniendo avances que he logrado desmenuzando el BlueTerm.poco a poco voy aprendiendo cosas sobre la programacion de android
aunque respecto a este programa.solo entiendo el 50%
de todas formas.he hecho un programa bastante simplificado con partes de blueterm.que ya me hubiera gustado encontrar por internet.
para no perder tantos dias haciendo pruebas.
en este programa hay implementadas varias cosas lo relativamente simples para entender como se realiza una conexion bluetooth.
y el manejo del programa sin que se produzcan errores.
una de las primeras cosas que hace este programa es que cuando abrimos la aplicacion se comprueba si tenemos activado el bluetooth en nuestro telefono.
y si no es asi,se visualiza un mensage invitandonos a activarlo.si elegimos No.la aplicacion se cerrara.si por el contrario elegimos Si.
se abrira otro mensage pidiendonos permiso para activar el bluetooth.si elegimos Si.el bluetooth se activara y podremos empezar a utilizar nuestra
aplicacion.
pero si elegimos No.el bluetooth no se activara.aunque la aplicacion seguira enmarcha.el problema es que al intentar conectar aparecera un mensage
diciendo que no hay dispositivos emparejados.y si hacemos clic en buscar dispositivos,el programa entrara en un bucle intentando buscar dispositivos.
no he querido arreglar esto por no complicar mucho la aplicacion.mas adelante lo arreglare si lo veo oportuno.
esta parte del programa se situa nada mas empezar en: "public synchronized void onResume() {"
parte de los mensages se hubican dentro de: "DeviceListActivity.java"
Cuando tenemos el programa con el bluetooth activado y y la aplicacion corriendo correctamente.lo primero que tenemos que hacer es actuar con el menu.
aunque se pueden poner muchas mas.yo he puesto una sola pestaña.la cual tiene dos estados."conectar" y "desconectar"
aunque es la misma pestaña.solo que le cambiamos el texto segun este activado o desactivado el bluetooth.
esta funcion se gestiona desde las lineas dando comienzo a " public boolean onCreateOptionsMenu(Menu menu) {"
el cual crea la pestaña del menu.
y " public boolean onOptionsItemSelected(MenuItem item) { " que es el que gestiona el accionamiento del las pestañas.
Cuando queramos conectarnos a un dispositivo.seleccionaremos "Conectar" en el menu de opciones.y se nos desplegara una lista
con los dispositivos que previamente teniamos emparejados.dentro de la memoria del telefono.
cuando selecionemos el dispositivo al cual nos queramos conectar.se nos puede dar la condicion de que el dispositivo no esta presente.en consecuencia
nos saldra un mensage de que ha sido imposible conectar.en el caso de que estubiera presente y hubieramos conectado.tambien se puede dar el caso de perder
la conexion.que tambien sera avisado de tal circustancia.
todos estos mensages pueden ser modificados desde "res/values/strings" que es donde hubican parte de las variables de android.
la parte donde se encarga de la gestion de estos mensages es en: " private final Handler mHandlerBT = new Handler() {"
esta no es la mejor forma de indicar el estado de la conexion con el dispositivo.lo suyo seria poner su estado en la barra de titulo.
asi sabriamos en todo momento si la conexion esta activa o se ha interrumpido.pero para no complicar la cosa.lo implementare en proximas modificaciones.
Otra parte del programa muy importante es esta:" public void onActivityResult(int requestCode, int resultCode, Intent data) {"
es la encargada de vincular la MAC del dispositivo a conectar y realizar la conexion.
En el Layout principal de esta aplicacion.solo he implementado un boton que cuando tengamos la conexion realizada.al pulsarlo enviaremos el dato 0x10
al dispositivo bluetooth.
ya que mi intencion es explicar la forma de realizar una conexion.posteriormente implementare el envio/recepcion de datos.
Tambien quiero indicar que en el programa vereis muchas lineas con este aspecto: "if (DEBUG)Log.e(LOG_TAG, "+++ ON CREATE +++");"
aunque tambien vereis estas: "Log.e(LOG_TAG, "+++ ON CREATE +++");" pero con el texto interior de las comillas con otro tipo de mensage.
la diferencia entre estas dos es que la primera tiene una condicional que se ha definido previamente en el comienzo del programa.
y solo es para habilitar/deshabilitar estas lineas.
se supone que la forma correcta es la de la primera linea.aunque las dos funcionan igual.solo se me ocurre que con la primera ahorraremos
mas memoria al compilar el programa y producir el APK. si previamente hubieramos definido DEBUG a "false". pero no he hecho la prueba.
estas lineas solo son unos mensages que se visualizan en la ventana LogCat del Eclipse.y se utilizan para saber que linea se esta ejecutando
en un instante determinado.y que tambien nos puede devolver un valor si lo especificamos en la linea.como:
"if (DEBUG)Log.e(LOG_TAG, "MENSAGE" + Variable);"
hay diferentes tipos de mensages:
Verbose :v
Debug :d
Info :i
Warning :w
Error :e
Assert :a
y que se indican despues de Log.
ESTAS SON LAS LINEAS A INTRODUCIR:
public static final boolean DEBUG = true; : Valor de habilitacion o false para deshabilitacion.
public static final String LOG_TAG = "bluebas"; : Nombre del programa
esto es todo.pronto pondre mas avances.
(http://imageshack.us/a/img29/3995/bluebas.jpg)
http://www.4shared.com/rar/mIIq8ydF/BlueBas7.html
-
quiero indicar un problema que me surgio hace tiempo y solo he podido solucionar ahora que tengo mas experiencia.
resulta que cuando empeze con esto del andriod.estuve buscando ejemplos por todos sitios para poder aprender.pero claro.estos ejmplos no
estan hechos a gusto de cualquiera.y necesitamos modificarlos.
lo peor de esto no es que nos gusten o no.si no que llegen almenos a arrancar.
tal como explique al principio del hilo una de las cosas que hay que cambiar es el UUID que hay que cambiarlo por este : UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
y otra cosa es la version.que si en los mensages de error nos indican que la version minima no es la correcta.
hay que ejecutar AndroidManifest.xml y en Min SDK version. hay que poner la version minima con la que deberia funcionar el programa.
en mi caso he puesto la version 7.
ahora ya me funciona el ejemplo que trae el eclipse.espero poder terminar el programa anterior.ya que solo puedo transmitir.pero no recibir caracteres.
a no ser que realize una conexion independiente.que entonces si puedo recibir pero no de la forma que quiero.
-
Sigo de cerca las publicaciones de tus avances. Estoy por empezar con lo mismo. por ahora recolectando informacion. Gracias por compartir los avances!
Saludos
-
no hay de que.me alegro de que te sirba.
por fin averigue como se reciven los datos del bluetooth.es mas sencillo de lo que parece.pronto pondre la modificacion para que funcione
en la aplicacion anterior.
estoy muy contento por el descubrimiento.ya que llevo 2 dias sin avances.menosmal que logre reparar el ejemplo bluetooth del eclipse.
y pude aberiguarlo.
-
y lo prometido es deuda.
ya tengo la aplicacion funcionando tambien con la recepcion de datos.todo estaba en : private final Handler mHandlerBT = new Handler() {
habia que introducir case MESSAGE_READ: y en readMessage se reciven los datos.
una cosa de la que me he dado cuenta es que si recivimos mas de un caracter,el primero se pierde.me parece que esta circunstancia se me dio
en otro programa que estube estudiando.pero ahoramismo no me acuerdo de como lo solucione.ya lo pondre si lo aberiguo.
ah.tambien he implementado el envio de caracteres al presionar Vol Up y Vol Down
:) :) :) :) http://www.4shared.com/rar/SVEAtz8K/BlueBas12.html :) :) :) :)
-
he modificado la aplicacion anterior para que veais algo curioso respecto a la recepcion de datos.he implementado un TextView y un EditText.
la diferencia es que uno plasma directamente el contenido del buffer y el otro va sumando los datos recividos.
se da la circunsatancia de lo que comente antes.un caracter no tiene problemas.pero dos si en el Textview.y segun que pareja de caracteres tambien falla
en el EditText.como puede ser at . pero 3 ya no falla en el EditText.
si alguien hace la prueva y logra averiguar que es.me gustaria que lo expusiera.
http://www.4shared.com/rar/LaQyDDBN/BlueBas13.html
-
hola de nuevo.aqui traigo la joya de la corona :D :D :D ¡ no me queda na!
(http://imageshack.us/a/img11/9991/bluebas18.jpg)
por fin consegui realizar una herramienta que tenia en mente.
se trata de una aplicacion que recibe texto en una ventana.de la cual podemos seleccionar el texto que queramos y pegarlo en los textEdit
que hay junto a los botones.
y al pulsar el boton transmitimos el texto.o tambien podemos escribir lo que queramos.y enviarlo.con esta herramienta podemos enviar comandos
hacia un microcontrolador para activar lo que queramos.
en esta aplicacion podeis aprender como manejar los eventos de muchos botones sin tener que escribir un monton de lineas.con un For-
he podido hacerlo con esta linea: int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
buttons = ((Button) findViewById(resID));
dentro de un bucle finito.
aunque no he podido declarar ni identificar los EditText en un bucle.es decir de forma dinamica.he intentado hacerlo con el mismo sistema.
pero no se si es que no se puede o hay otra forma diferente.
ahora quiero mejorar la plicacion poniendo los estados de conexion en la barra de titulo.vamos a ver lo que pasa.
como podeis ver. las aplicaciones cada vez las hago mas compactadas.esto significa que se van haciendo mas amigables a la vista pero tambien
mas complejas.
asi que si estais empezando os sugiero que practiqueis con las mas antiguas.ya que os ayudara a entender su funcionamiento.aunque tambien
es verdad que algunas utilizan metodos diferentes.y esto os puede confundir.pero con la practica las entendereis mejor y asi podreis coger
pedazos de codigo para usarlos en buestros proyectos.porque no todo el mundo queremos lo mismo.
si quereis practicar con una de estas aplicaciones en concreto.mirad el nombre de la aplicacion enn el enlaze de descarga.esta por ejemplo es: BluBas18
asi que tendriais que buscar numero inferiores.ya que cuando hago las practicas suelo copiar los proyectos.y pegarlos con un numero diferente.
asi si cometo un herror.no tengo que empezar por el principio.
la programacion es como un libro que se esta escribiendo.y si pierdes lo esqcrito te acordaras de algunas cosas .pero no de todas.y el tiempo es oro.
http://www.4shared.com/rar/_7_LXqBC/BlueBas18.html
-
al final me rindo con lo de poner iconos en el menu.he aprendido muchas cosas respecto a insertar iconos pero solo he podido cambiar los dos tipos
que tiene el ejemplo BluetoothChat que tiene el eclipse.y lo curioso es que estos iconos ic_menu_search y ic_menu_mylocation
no se encuentran en ninguna carpeta de esta aplicacion.nisiquiera en la carpeta drawable que es donde deberian estar.
supongo que estaran comprimidos en algun archivo del sistema. u ocultos.ya llevo 4 dias perdidos y no voy a perder mas.por eso si
alguien sabe como se hace esto.le agradeceria me lo digera.saludos
-
tildado a favoritos!!! ;-) ((:-))
-
Yo no lo se hacer, pero vi uno de los videos de NEOTEO y alli Mario ponia el icono en la pantalla.
-
el icono de la barra de titulo es facil de cambiar.pero los iconos del menu no veo los archivos .png en ninguna carpeta.mucho menos en drawable.
que es donde se supone que deben ir.
pero bueno.ya lo lograre algun dia.por el momento estoy con otras cosas mas practicas.
(http://imageshack.us/a/img707/5738/seekbar.jpg)
en la siguiente modificacion que le he hecho a la aplicacion interior.he añadido mas cosas al menu.
se trata de unas barras de desplazamiento que segun en la posicion donde pongamos el cursor.se transmitira su valor por bluetooth.
ademas de mostrarlo en un mensage.al mensage he querido darle un toque de funcinalidad.como la emulacion de una trama NMEA.aunque nada tiene que ver con esta.
en el formulario que he creado hay dos barras de desplazamiento.la primera debuelve un valor entre 0 y 255.y la segunda un valor entre 0h y ffh.
que podemos darle otro rango si queremos.
esto es una pequeña practica para demostrar lo que se puede hacer con ANDROID sumado a un microcontrolador.
conseguir esto no me ha resultado sencillo.ya que he tenido que aprender varias cosas respecto al sistema ANDROID y su programacion en java.
como es la creacion de un hilo(thread) para ejecutar un evento cada cierto tiempo.en este caso cada 3 segundos.que podemos modificar a nuestro antojo
sin ningun problema.ademas de la destruccion de la aplicacion para que no este ejecutandose en segundo plano.
tambien he tenido que aprender a tomar valores en diferentes clases.o para que lo entendais mejor.entre diferentes formularios.
y comno no.la extraccion de datos de un objeto.como son los SeekBar.
tambien quiero comentar.que he intentado hacer la barras de desplazamiento(SeekBar) de forma dimnamica.tal y como hize los buttons de la primera aplicacion.
pero no se si se puede hacer o no.
tengo el codigo sin errores.pero cuando lo ejecuto todo se va al garete.
no se porque.me esta costando encontrar informacion especifica respecto a algunas funciones en la programacion de android.
yo pondria el codigo aqui para que entre todos nos ayudasemos a entender el funcionamiento de segun que cosas.
pero no veo que este tema de ANDROID aplicado a los microcontroladores.este muy difundido.solo tengo que ver las pocas respuestas que he recivido
en este hilo.aunque me cabe que las personas que lo siguen lo hacen con mucho interes.
por eso seguire poniendo mis avances.hasta que consiga mi proposito mas inmediato.que es crear una aplicacion que mantenga una comunicacion con
el protocolo MODBUS para la gestion inhalambrica de todos los dispositivos que quiero crear.ya sea por bluetooth o por WI-FI.
http://www.4shared.com/rar/WFE1Rgz6/BlueBas27.html
-
hola.el siguiente enlace contiene el mismo programa que el anterior.pero he incluido un codigo para que cuando se salga de la aplicacion,no se borre lo que hemos
escrito en los EditText.porsupuesto hay que pulsar el boton emparejado al EditText.para que se almacenen en memoria dichos datos.
he quitado tamaño al archivo.si no os funciona decirlo para cambiarlo.
http://www.4sync.com/rar/N8WL_vIV/BlueBas30.html
-
siguiendo con la programacion en android e intentando realizar una conexion mediante el protocolo MODBUS.me surge la necesidad de realizar una comprovacion
CRC de las tramas que hay que gestionar.
asi que he tenido que buscar un codigo que saque el CRC de una trama de datos.pero no he he encontrado una que me viniera bien con lo que quiero hacer.
yo necesitaba un codigo para CRC16 con el Polynomial: x^16 + x^15 + x^2 + 1 (0xA001)
pero solo he encontrado codigo en C.no lo he encontrado para java.asi que con los pocos conocimientos que tengo en java ni en C.he necesitado un dia.
a base de pruevas y rebuscar mucho codigo.pero gracias a que tuve que aprenderme como realizar el CRC16 para MODBUS en asm.pues las matematicas
son las mismas.y esto me ha ayudado a entender el C.
el codigo de abajo es mi resultado.pero es para caracteres ASCII.
// Calculo del CRC para protocolo MODBUS (polinomial 0xA001) para una trama ASCII
public void CRC16(String mens1) {
int crc = 0xFFFF; // valor inicial
byte[] bytes=mens1.getBytes();
for (byte b : bytes) {//ir tomando los bytes del string desde el primero al ultimo.
crc^=b;//xor de crc con primer dato
for (int i = 8; i != 0; i--) { // bucle de 8 movimientos para crear el crc por cada byte
if ((crc & 0x0001) != 0) { //si el ultimo bit esta a 1,
crc >>= 1; // desplaza a la derecha
crc ^= 0xA001; //xor con valor polinomial 0xA001(MODBUS)
}
else // si el ultimo bit no esta a cero;
crc >>= 1; // rota a la derecha
}
// crc &= 0xffff;
}
String CRCmens = ("CRC16 = " + Integer.toHexString(crc));
Toast.makeText(getApplicationContext(), CRCmens , Toast.LENGTH_LONG).show();
}
hay que realizar una llamada desde el codigo con: CRC16(mens1);donde mens1 es el string a analizar.y en CRCmens obtendremos el CRC16.asi de facil.
sobretodo ahora que esta hecho.
y algunos enlaces donde busque la informacion:
http://en.wikipedia.org/wiki/Cyclic_redundancy_check
http://www.nongnu.org/avr-libc/user-manual/group__util__crc.html
http://www.cppfrance.com/codes/CRC-16_31553.aspx
http://www.lammertbies.nl/comm/info/crc-calculation.html
http://www.ccontrolsys.com/w/How_to_Compute_the_Modbus_RTU_Message_CRC
ya incluire este avance en la aplicacion anterior.
-
ya llevo una semana intentando generar el CRC de una trama Hexagesimal.he hecho pruevas de todos los tipos.hasta me he hecho un experto en el funcionamiento
de la generacion de CRCs del polynomio A001 para MODBUS.
el metodo anterior funciona perfectamente para caracteres ASCII. ya que estos no superan el valor 127.pero si quisieramos realizar la comprobacion con caracteres extendidos,mas altos del valor 127.obtendriamos un CRC erroneo.ya que la generacion del CRC la estamos haciendo con un ByteArray.
y este tipo de datos trabaja con valores entre 0-127 y -0 a -127
http://es.wikipedia.org/wiki/Representaci%C3%B3n_de_n%C3%BAmeros_con_signo
por eso el metodo anterior no lo podemos usar para enviar tramas MODBUS ya que no obtendriamos unos CRC correctos en cuanto nos pasaramos de valores 0x79.consegui introducir algunas lineas de codigo para evitar el fallo al pasar del valor 0x7F.y consegui arreglarlo.pero al siguiente valor
ya tenia el mismo problema.
asi que he decidido modificar el metodo anterior con valores integer.y ya he podido hacerlo funcionar.pronto lo expondre aqui.
-
Por fin...
ya consegui lo que queria hacer.este es mi primer programa en java.que no he tenido que copiar de ningun sitio.que trabajito me ha costado.
este programa que he realizado consiste en coger un String y separar los caracteres ASCII en parejas.estos caracteres solo pueden contener los valores
0 al 9 y letras A al la F.en mayusculas.las letras en minusculas darian errores en los calculos.aunque podria usar minusculas he preferido las mayusculas.
si alquien quisiera minusculas.solo tendria que modificar el programa.
bueno.el programa convierte una cadena ejem. "A1FE0543" en un array de valores int. ejem-> 161,254,5,67. siempre el array tiene que contener
un numero de caracteres par.en este ejemplo seria de 4 parejas.no he querido poner ningun tipo de proteccion ante errores de cantidad de caracteres para
no relentizar el programa.esto lo realizaremos en el layout del android.
este es el programa al que llamaremos con:
String trama="A1FE0543";
variableX=NombreDeLaClase.CRC16int(trama);
y este es el programa:
//se toman los caracteres ASCII del string de dos en dos.para obtener un valor entre 0 y 255.y asi crear un array de valores decimales
//a partir de un array de valores Hexagesimales.
public static int[] hexStringToIntArray(String cadenaDec) {
int len = cadenaDec.length();//longitud de la cadena
if (len <= 2){ len=2;};//para la obtencion del CRC de un solo valor hexagesimal.
int[] data = new int[len/2];//asignar indices del array.un indice por cada dos caracteres.
for (int i = 0; i < len; i += 2) {
int data1=cadenaDec.codePointAt(i)-48;//tomar valor int de caracter ASCII de valores entre (0-9)
if (data1 > 9) {data1=data1-7;};//modificar valor int para valores int de caracteres ASCI de valores entre (A-F)en mayusculas.
int data2 = cadenaDec.codePointAt(i+1)-48;//lo mismo que lo anterior pero para las unidades "ya que lo anterior es para las decenas"
if (data2 > 9) {data2=data2-7;};//lo mismo que lo anterior pero para las unidades "ya que lo anterior es para las decenas"
data[i/2]=(int) ((data1*16)+data2);//obtener el valor int del Hex string de dos cifras.
}
return data;
}
Con la llamada a este programa hemos conseguido transformar una cadena de caracteres Hexagesimales.en un array de enteros decimales.
los cuales vamos a usar en el siguiente programa para extraerles el CRC.
el programa que hize en anteriores respuestas hera para generar el CRC de una cadena de caracteres ASCII.el problema es que se usa un array de Bytes.
y estos tienen valores entre 0-127 y -0 a -127.y no nos sirven para valores entre 0 y 255 decimal.o entre 00h y FFh
asi que he creado el siguiente generador de CRC con polinomio A001.para un array de enteros.
// Calculo del CRC para protocolo MODBUS (polinomial 0xA001) para un array de valores integer.
public static String CRC16int(int[] cadenaDec) {
int crc = 0xFFFF; // valor inicial
int[]bytes=cadenaDec;
for (int b : bytes) {//ir tomando los bytes del string desde el primero al ultimo.
crc^=(b);//xor de crc con primer dato
for (int i = 8; i != 0; i--) { // bucle de 8 movimientos como maximo para crear el crc por cada byte
if ((crc & 0x0001) != 0) { //si el ultimo bit esta a 1,
if (DEBUG)Log.e(LOG_TAG, "bytes3 "+ crc);
crc >>= 1; // desplaza a la derecha
crc ^= 0xA001; //xor con valor polinomial 0xA001(MODBUS)
}
else // si el ultimo bit no esta a cero;
crc >>= 1; // rota a la derecha
}
// crc &= 0xffff;
}
String strCRC = Integer.toHexString(crc);
for (int i=strCRC.length();i<4;i++){strCRC= "0"+strCRC;};//asegura que el CRC sea de 4 caracteres.rellenar con ceros por la izquierda hasta obtener 4 cifras.
return strCRC;
}
Este programa en conjuncion con el anterior.genera el CRC del array introducido. en formato string.asi que lo podemos visualizar en un TextView.
o enviarlo atraves del bluetooth de la aplicacion que estoy desarroyando.
asi que junto a las lineas anteriores.
String cadenaHex7="A1FE0543";
cadenaHex18=ModBus.hexStringToIntArray(cadenaHex7);//debuelbe un array de bytes
cadenaHex3=NombreDeLaClase.CRC16int(cadenaHex18);
podemos unir las siguientes:
EditTextCRC.setText(cadenaHex3); // para visualizarlo en un textView.
cadenaHex2=ModBus.hexStringToByteArray(cadenaHex3);// o para extraer los bytes y..
mSerialService.write(cadenaHex2);// enviarlos atraves de
y de esta forma enviariamos el CRC de la trama "A1FE0543" en formato hexagesimal.que lo uniremos a la trama para transmitirla por bluetooth.
ya mismo pondre la aplicacion de envio de tramas con CRC incorporado.
PD: por cierto el CRC de la trama "A1FE0543" es 8900 segun mi programa.
y tambien lo podeis comprobar aqui: http://www.lammertbies.nl/comm/info/crc-calculation.html
-
he encontrado un error en el programa CRC16int(). resulta que cuando generaba un CRC 0657 por ejemplo.como tiene un cero delante,el programa
solo generaba el valor CRC 657 de tres cifras.esto ocasionaba un error fatal.ya lo he corregido.he puesto que cuando el RCR sea inferior a 4,se rellene con ceros a la izquierda
es posible que esto mismo haya que hacerlo en el programa que genera lo CRC ASCII.pero no lo he podido comprobar.aunque es bueno tenerlo en cuenta.
-
:-/ pues ya tengo el programa hecho :-/.ademas de obtener el CRC de una trama de bytes.como puede ser la trama del protocolo MODBUS.que como sabemos trabaja
con el polinomio A001.
tambien podemos enviar la trama completa con el CRC invertido.que es como trabaja este protolcolo.sin la necesidad de escribirlo en la trama.ya que se
incluye automaticamente.
solo tenemos que escribir los bytes en los EditText y pulsar el boton.para obtener el CRC en la esquina inferior izquierda de la pantalla.
y si quisieramos transmitirla por bluetooth,daremos a CONECTAR.y seleccionamos el dispositivo al que queramos conectarnos.
y pulsamos Enviar.y se enviara la trama completa con el CRC incluido.insisto no hay que añadirlo al texto.
ahora me toca realizar la recepcion.para el acuse de recibo del esclavo. mas retos :cheesy:
PD.os invito a que hagais pruebas y me indiqueis si se produce algun error en el calculo del CRC.para asi poder solventarlo.
(http://imageshack.us/a/img706/7456/serialmodbus20.jpg)
http://www.4sync.com/rar/Kio26rgU/SerialModbus20final.html
-
bueno.casi una semana despues.sigo atrancado en la fase de la recepcion.el problema que tengo es que pierdo el primer dato recibido.tal y como comente en algunas respuestas al principio del hilo.
si mando un caracter este no se pierde.pero si mando mas de 1 el primer caracter de la trama se pierde.
he visto por donde mas o menos esta el fallo.pero no logro entenderlo.
resulta que al recibir datos o caracteres.segun queramos usarlos.el buffer de entrada de datos bluetooth contiene los datos recibidos.asi que cuando se recibe un caracter,
se produce un evento que hace que hace que se ejecute un hilo.y este es el encargado de ejecutar una rutina para gestionar los datos recibidos en el buffer de entrada bluetooth.
la cosa esta en que el primer dato que parece perderse,realmente no se ha perdido.lo que pasa es que cuando se recibe el primer caracter de la trama.este queda almacenado en el buffer de entrada;
pero antes de recibir el segundo caracter,se produce un nuevo evento que hace cargar el buffer de entrada con el resto de caracteres.realmente no se porque se produce esto.y si podria anular la forma
de que se produciera el siguiente evento.y de esta forma cargar todos los datos en el buffer de entrada de una sola vez.dado que no se hacer esto.he probado a almacenar en el buffer un solo dato.
y funciona.pero claro,hubiese sido mas efectivo cojer los datos directamente de buffer.ya que es una array.y de esta forma tendre que crear yo mismo el array.
o tambien puedo unir el primer caracter al array de caractres.vere que es lo mejor.y si llega a funcionar.
-
al final he podido realizar la parte de la recepcion de datos.se necesitan un monton de calculos y conversion de tipos de valores.resumidamente lo que hago es
tomar los datos del buffer de recepcion y convertirlos para visualizarlos.ademas de generar el CRC de la trama recibida.y compararlo con el CRC que
tambien lo trae la trama recibida.y si es correcto lo visualizo en un EditText.
y aunque funciona.se me presenta un problema bastante gordo.y es que cuanto mas largas son las tramas recividas.mas fallos tiene la transmision.
dandose ocasiones en que se necesitan 10 transmisiones para recibir una trama correcta.
resulta que cuando recibo una trama,la trama la mayoria de las veces no se recibe completa.aveces se pierde la cabeza del mensage.otras veces faltan caracteres
por la mitad.etc
estoy pensando en recibir los datos uno a uno.haber si de esta forma tiene menos fallos.quise hacer esto anteriormente.pero como todabia no se gestionar los
tiempos en android.pues me decante por usar el buffer completo.veremos haber que tal me sale.
-
bueno.ya he terminado con la recepcion de las tramas bluetooth.durante el desarroyo de esta aplicacion,se me ha presentado infinidad de problemas.ya sea
por fallos mios.o por no entender bien el funcionamieto del sitema bluetooth dentro de un terminal con android.yo ya he llegado al final de la comprension
de este sistema.y no quiero decir que lo sepa todo sobre el.el problema es que no encuentro mas informacion respecto al comportamiento interno del hardware
del bluetooth.
he aprendido lo suficiente para el descubrimiento y conexion a dispositivos bluetooth.tambien he aprendido a enviar datos por el buffer de salida de datos
que dispone android.
pero no entiendo bien el funcionamiento del buffer de entrada.en las primeras aplicaciones que hize.tambien se producia fallos durante la recepcion.
incluso con caracteres ASCII.
cuando enviamos una trama de datos al terminal.en el programa se produce un evento que ejecuta un thread.el cual envia los datos recibidos al hilo principal
mediante un Handler.
la cosa esta en que al recibir la trama,normalmente se produce un evento con el primer dato recibido.y seguidamente recibimos otro evento con el resto del
la trama.
si no gestionamos esto.se producirian dos llamadas al hilo principal mediante el Hndler.por eso he realizado unas instrucciones para que los dos eventos.
se traduzcan en el envio de una sola trama al hilo principal.
pero abezes en una misma trama se pueden producir varios eventos.quizas debido a una interferencia.o algun retardo en el tiempo entre datos.o quizas
un evento producido en nuestro terminal... yo no lo se.
tambien he visto como datos residuales de una trama anterior.se han quedado en el buffer de entrada.y he tenido que limpiarlos enviando una trama de ceros.
ya que no se como limpiar este buffer con algun tipo de instruccion del android.he mirado en el SDK y no he visto nada al respecto.
con todo esto.he llegado a la conclusion,de que el envio de datos atraves de bluetooth necesita de una buena comprobacion de los datos recibidos.
de ahi que use el CRC.pero ademas veo que es mejor usar tramas cortas para que se produzcan los menores fallos posibles.
esto no creo que sea un problema para el manejo del protocolo MODBUS.ya que en vez de direccionar los datos a enviar a una sola direccion con una trama larga.
podemos usar varias direcciones con una trama mas corta.
segun las pruebas que he hecho con esta aplicacion.raramente la trama no se envia a la primera,cuando la trama no excede de 10 datos hexgesimales.
tambien he hecho pruebas con 15 datos con 1 acierto un por cada 5 intentos,20 datos con 10 intentos para 1 acierto.y cuanto mas larga,mas fallos hay e incluso igual nunca se produce el acierto.
aunque esto no conlleva ningun problema en cuanto a la fidelidad de los datos.que llegaran bien gracias a la comprovacion del CRC. que sera el esclavo el que decidira cuantas veces le pedira al maestro
que la embie de nuevo.
claro esta que cuantos mas fallos,mas se ralentizara el proceso que tenga que realizar el esclavo ante la falta del dato que precisa.
pues aqui pongo la aplicacion.no exenta de bugs ya que soy novato en esto.y aunque he intentado por todos los medios calcular diferentes combinaciones
ante la generacion del CRC o transformacion de valores,puede que en algun calculo se desborde algun valor y esto haga que la aplicacion se pare.
asi que si alguien hace pruebas y le sale algun error.me lo indique para ver de donde viene el fallo.
(http://imageshack.us/a/img856/6966/serialmodbus37.jpg)
http://www.4sync.com/rar/uHfEss_Z/SerialModbus37.html
En esta aplicacion en la parte de la transmision tambien he implementado el poder escribir las tramas de envio en minusculas.aunque tambien funciona con
mayusculas.
y en la parte de la recepcion.he añadido un contador de errores y aciertos.ademas de un reset en el menu para ponerlos a cero.
debajo de estos se ubica la trama recibida correcta.y abajo del todo todo el trafico de entrada separado por puntos y coma por trama recivida.
espero que le sea util a alguien.y podais aprender.
si aprendo mas cosas sobre el buffer de recepcion,ya modificaria el programa.
ahora no se si empezar a realizar circuitos y sus respectivas aplicaciones.o empezar con la recepcion/envio de datos mediante Wi-Fi.
-
hola.ya hace algun tiempo que he dejado de seguir poniendo aplicaciones por aqui.y es porque estoy realizando una
aplicacion para la apertura de puertas electronicas.
el proyecto lo tengo precticamente acabado.basicamente lo que hace es enviar una trama modbus a un pic.comprobar si
la trama es corecta mediante su CRC.y si lo es activar una salida del pic.
hasta aqui todo correcto.pero el problema se me presenta cuando envio desde el pic a la aplicacion.la trama de confirmacion
como en los ulimos programas que he ealizado,sigo teniendo el problema de la recepcion.
aveces recivo la trama correctamente y otras no.y aunque en esta aplicacion no es muy importante.si quisiera
realizar una aplicacion de monitoreo de datos.si que seria un serio problema.
como ya estube investigando.el problema creo que esta en la recepcion de tramas largas en el buffer de recepcion.
asi que intentare realizar una recepcion caracter a caracter.espero que los tiempos entre caracteres no excedan
del maximo estipulado de las indicaciones del protocolo modbus.
-
he logrado crear un byte array que se le van sumando los valores recibidos en el evento de recepcion.ahora me queda lo mas dificil.
crear una rutina que cada vez que se reciba un evento de recepcion,una temporizacion se resete cuando de reciva otro evento de recepcion.
y que el byte array quede preparado para su uso.pero que si se sobrepasa esta temporizacion,se iran añadiendo valores al array.
supongo que podre hacerlo con un thread.pero no es tan facil.creo
-
por fin logre lo que queria hacer.he modificado la aplicacion anterior para poder conseguir que no se produzca ningun error al recibir los datos
desde el master.de 100 intentos no ha fallado ninguno.solo ha tenido fallos cuando me he alejado del modulo bluetooth unos cuantos metros y sin perder la conexion han podido perderse algunos datos.
eso si.el unico problema que conlleva la modificacion.es que al recibir los caracteres de uno en uno.es que se pierde mucho tiempo en la gestion de estos datos.
no es lo mismo que recibir el buffer lleno y coger los datos necesarios.
en esta aplicacion que recoge los datos uno a uno. tenemos la ventaja es que los datos recividos van a llegar correctamente.
sea cual sea la cantidad de estos.
a no ser que se contaminen con una interferencia o la mala recepcion de ellos.
lo malo es que el master va a tener que enviar los datos con un retardo de 0.1s cada uno.claro que tambien dependera de la velocidad de procesamiento de nuestro terminal.el mio es un HTC one s a 1.5Ghz
este desfase de 0.1s hace que aunque los datos que contiene una trama MODBUS sean totalmente compatibles.el espacio inter dato,no lo sea.
y la trama seria descartada por cualquier dispositivo compatible MODBUS.
aunque estamos ablando de la recepcion de nuestro terminal.no sucede lo mismo con la transmision que si es totalmente compatible.
de ahi que este tipo de sistema solo lo use para terminales con conexion bluetooth.
espero que cuando aprenda ha hacer esto.pero con wi-fi.no tenga los mismos problemas.espero que el buffer de recepcion en wi-fi.llegen
todos lo datos en condiciones.
respecto a la modificacion que he hecho.las modificaciones que hice en la clase BluetoothCommandService.las he dejado como originariamente
las encontre cuando me baje el archivo de internet.
pero en la clase Main.en el mHandlerBT.en la parte case MESSAGE_READ:
si he tenido que modificarlo.y tambien he incorporado otras rutinas para la gestion de la trama recivida al final de la clase.solo hay que comparar los programas.
PD. de todas formas si queremos usar el primer sistema.tampoco es mala opcion para tramas cortas.lo que mas suele fallar es el primer envio.los sucesivos no suelen dar problemas.por eso se me ha ocurrido.enviar una primera trama de prueba antes de enviar la informacion importante.asi supongo que ira bien.
aqui dejo el link de descarga: http://www.4sync.com/rar/GaCFolkc/SerialModbus40mod.html
-
hola :D me gustaria q me ayudaces con una conexion con un dispositivo bluetooth que estoy haciendo para hacer una app pulsometro a travez de una banda polar wearlink bluetooth solo me falta la parte de la conexion con este y x supuesto q me envie las pulsaciones a la app si me ayudaces con algun ejemplo
-
siento no poder ayudarte por ahora.estoy bastante ocupado con otras cosas.pero en este tema he puesto muchos ejemplos.te sugiero que los leas y practiques.
y si tienes alguna duda te informo.
saludos
-
hola logre que el la banda se conectara solo que ahora envia datos estraños por pantalla como hago para traducir ese codigo me darias una manita solo con eso :( recomendandome que hacer
-
Si recibes datos extraños es porque no tiene bien configorada La velocidad de transmision
-
y donde configuro eso :( disculpa la falta de conocimiento
-
josexp.no me pones muchos datos.segun he mirado por internet tu cinta transmite los datos codificados.no se que quedran decir ellos con esto.
sabes ya que protocolo usan para transmitir los datos? y como decodificarlos si es que estan codificados.
porque si no sabes tratar los datos que te envia la cinta.de poco te sirve recivirlos correctamente.
-
aqui tienes una aplicacion para esto. https://play.google.com/store/apps/details?id=HRnavi.HRnavigator&feature=search_result#?t=W251bGwsMSwyLDEsIkhSbmF2aS5IUm5hdmlnYXRvciJd
no se si habras probado tu banda con otras aplicaciones.en todo caso busca el SDK haber si lograras entender la comunicacion.
-
baud rate por defecto?
-
baudrate por defecto del bluebas18?
-
Probaste 115200??
-
La verdad solo probé con 9600 y 19200 sin buen resultado. Estás seguro que ese es el que está por default?
-
hay alguna manera de cambiar el baud rate desde el codigo fuente?
-
De manera fácil no, tenes que instalarte NDK y trabajar con alguna librería de forma nativa.
http://en.wikibooks.org/wiki/Serial_Programming/termios
Saludos
-
Gracias, me ha sido muy útil la información. En caso de no ser 115200 el baud rate por default, tienes idea de algún otro valor con el que pueda funcionar?
-
hola de nuevo a todos.ya hace tiempo que no posteo por aqui.ya que estube con otros proyectos.pero adjunto al control bluetooth.
queria poner mi experiencia con respecto el bluetooth de android.
en una aplicacion de android que estoy realizando con eclipse.ya hace tiempo que pude hacer funcionar una comunicacion con un modulo HC-05 y un PIC.
en esta aplicacion envio datos en una trama MODBUS.y estos datos llegan perfectamente al pic.puedo extraer los datos de la trama,comprobar el CRC y
enviar una respuesta de retorno.tal y como se indica en el protocolo MODBUS.respetando los tiempos de cabecera y entre datos.
pero el problema esta en la recepcion.segun todas la pruebas que he realizado.el primer dato que envio en la respuesta se pierde cuando se envia una trama
de mas de dos caracteres.
no es el caso si es que envio los datos caracter a caracter.de esta forma logro enviar una trama aunque tampoco excesivamente larga.ya que de hacerlo
asi.se me producen muchos errores en tramas que se reciven a lo largo del tiempo.
ademas la recepcion se demora excesivamente al tener que realizar una pausa entre caracteres.ya que si recorto el tiempo de esa pausa.se producen mas errores.
asi que ahora que retomo el proyecto.he estado haciendo pruebas que han mejorado los resultados.aunque no son infalibles.
a costa de mejorar la comunicacion en sacrificio del protocolo MOSBUS.he optado por enviar una trama sin pausas entre caracteres.pero con un
caracter extra en el inicio.ya que este se pierde cuando se usa este sistema.ademas el caracter es el dato 0xAA ya que a mi parecer al ser en binario
b10101010 .parece que sincroniza mejor y no se producen tantos errores.
se me paso por la cabeza que el proble pudiera ser del pic que no enviara correctamente los datos de respuesta al modulo HC-05.pero puse
el hiperterminal en esos pin.y los datos son correctos.asi que descartado.
tambien cometi el error de conectar tx del pic al rx del HC-05.pero tambien configure este pin como colector abierto y poner una resistencia pull-up
a 3.3v .y no funciona correctamente del todo.pero no se si ya dañe los modulos.haber si me llegan otros que tengo pedidos.pero me estraña
que el problema de los datos incorrectos sea porque se han averiado los modulos.ya que en ese caso nunca irian bien.que no es el caso.
alguien tiene alguna experiencia respecto a estos tipos de problemas con bluetooth? me parecio haber visto algun proyecto de este tipo de nocturno.
pero no se si lo termino.
-
bueno.al final logre mejorar la recepcion.ya puedo recibir datos sin casi errores.y eso para tramas de 20bytes.con tramas cortas no hay errores.
o un 1% por poner algo.
todo el tema esta en la forma en que se reciben los datos por bluetooth.yo pensaba que la trama se recivia completa con todos los bytes que se transmiten.
y esto no es asi.
cuando se recibe una trama.esta va diseccionada.por norma general primero se recibe un solo caracter.esto podria servir para determinar la cabezera de la trama.
posteriormente se recibe el resto de la trama.pero sin un orden en la recepcion respecto al numero de bytes recibidos.pero para esto hay un dato
muy importante para ordenar la trama recibida.y es el numero de bytes recibidos.
con esto y los trozos de trama recibidos.he desarroyado una rutina que los ordena y crea un array de bytes con la trama ya ordenada.
en esta rutina cada vez que se recibe los datos.los voy ordenando dentro de la clase BluettothCommandService.que es la encargada de
la recepcion de los datos bluetooth.
en una prueba que hize.los datos los iva ordenando en un Handler de la actividad principal.pero al parecer se perdian datos. porque aunque
si que llegaban al handler de la actividad principal.llegaban sin poder ordenarlos en la rutina que hize.por eso la rutina va en la misma clase donde se
reciben los datos.
pero para poder recibir la trama completa.hay que identificar la cabecera.y esto lo realizo en una temporizacion que empieza cuando se recibe
el primer caracter suelto.
aparte esta temporizacion se determina con un tiempo multiplicado por el numero de bytes recibidos.
esta temporizacion se mantiene hasta que se dejan de recibir datos.y es entonces cuando se prepara la rutina para recibir otra nueva trama.
y el array recibido es transferido al receptor de anuncios de la actividad principal.
para una correcta recepcion de la trama.el microcontrolador tiene que enviar los datos con un pequeño retardo entre dato y dato.pero este retardo
puede ser nulo para tramas de 9bytes.sin embargo si que debe de haber un retardo para tramas largas de 20bytes.por eso yo he puesto un retardo
intermedio y va bien.quizar mas adelante haga una rutina que modifique este retardo segun bytes a enviar por el microcontrolador.
-
bueno.al final logre mejorar la recepcion.ya puedo recibir datos sin casi errores.y eso para tramas de 20bytes.con tramas cortas no hay errores.
o un 1% por poner algo.
Y el bluetooth no tiene nada para corregir los errores ? o para verificar si hay un error y volver a enviarlo ?.
Parece raro que siendo un sistema que se transmite por aire no tenga vaaaaaaarios bits para la deteccion y correccion de errores.
-
hola KILLERJC.el bluetooth transmite los datos perfectamente sin problemas.todos los bytes van por el aire hasta que un dispositivo los recibe.
el problema esta en la recepcion.ya porque se ha producido una interferencia,que el dispositivo este lejos,o que la aplicacion android
este haciendo otro trabajo y se pierda algun dato.
por eso en el receptor hay que comprobar mediante un CRC si la trama es correcta.si no lo es pues podemos enviarle la peticion de que nos envie de nuevo
la trama.
yo creo que la mayoria de los errores que se producen es por la gestion que realiza android para recibir los datos.si pusieramos un HC05 como maestro.
y otro HC05 como esclavo.no creo que se produciese ningun error.almenos por gestion.otra cosa seria por interferencias o distancia excesiva entre dispositivos.