Aplicación en AppInventor para sustituir un teclado y un display

#1
No tengo muy claro si esto debe de ir como aporte o en otro sitio, si no es este su sitio, algún amable moderador que lo cambie.

Adjunto una aplicación en AppInventor para Android que emula un display y un teclado hexadecimal conectandose a un microcontrolador con el típico modulito bluetooth.
Real.jpg Simulado.jpg
Instrucciones:
Previamente hay que emparejar el módulito bluetooth con el teléfono/tablet.

Al abrir el programa lo primero que pregunta es con que dispositivo de la lista que dispone el teléfono como emparejados queremos comunicar, lo seleccionamos y ya está, aparece una pantalla con un teclado y un display.
Para cortar la conexión bluetooth basta con cerrar la aplicación.

La cadena que pasemos de una vez por la uart+bluetooth aparecerá en el "display", si se vuelve a enviar se "pisa" el contenido anterior.
Cada tecla que pulsemos envía por la uart su caracter ascii.
En el lado del microcontrolador hay que determinar que se hace con todo eso. Esto es un "terminal tonto" pero que muy tonto.

Está disponible la aplicación .apk y el archivo "fuente" .aia para que lo edite quien quiera, eso si, pediría al que haga algo interesante sobre esta base que lo comparta también en este foro.

Mas cosas; el programa me ha dado una guerra increíble porque según en que dispositivo android el tema del bluetooth se comporta diferente, en unos me da problemas cuando transmito que no vacía el buffer y en otros cuando recibo, así que puede que no le funcione a todo el mundo.
 

Adjuntos

Última edición:
#2
checando tu apk estoy viendo que, una vez que activas el timer y el cual genera la interrupcion no lo desactivas y tal vez por eso te de problemas, entonces intenta desactivarlo cuando atiendas la interrupcion, y una vez que termines vuelves a reactivar el timer, porque si no lo desactivas va a estar desbordando continuamente. (no se si con eso se solucione tu problema)
 
#3
Si lo desactivas dejas de recibir datos.
No desborda porque 10ms es una eternidad, antes estaba a 100 que es mas tiempo y va igual de mal.

En algunos android lo que falla es el envío de cadenas; es como si se quedase esperando un ACK o algo así que nunca llega. Por ejemplo envías "1" y la aplicación se queda parada hasta que da error, aceptas y a continuación envías "2" pero lo que envía en realidad envías "12" porque se cree que el 1 no fue recibido. La aplicación va igual de mal si se elimina por completo la interrupción y todo el código de recepción.

Respecto a la recepción, en unos casos llega la cadena toda junta y en otros teléfonos llega a trozos, por eso la junto toda en una variable antes de ponerla en la etiqueta que hace de pantalla. Eso ahora va bien en todos.

Ahora mismo iba a probar a cambiar el control bluetoothClient por BluetoothServer, a ve si es que el modulito es client y dos clients no se hablan bien según que tipo de stack bluetooth tenga el teléfono. Edito, pues no, parece que bluetooth server es para responder si se conectan desde el otro lado y no es el caso.
 
Última edición:
#4
He seguido probando la aplicación en mas dispositivos y en algunos va y en otros no. Debe de ser el driver o stack bluetooth de cada uno según como esté implementado.
Será cuestión de que lo pruebe cada uno a ver si va o no va.
 
#8
gracias por contestar. me pregunto si alguien tiene otra forma de concatenar la cadena de caracteres con un acci13 al final.

en la imagen que les mostre anteriormente no funciona solo llega el caracter acci13 y nada de cadenas.
 
#9
En las funciones de cadenas hay un bloque para unir cadenas. Pones la cadena en si en uno de los enganches y un bloque de convertir a ASCII en el otro
 
#10
muy bueno tu planteamiento pero no encuentro la forma de comvertir el numero 13 en ascii
para luego concatenarlos. o tal vez haya una función que comviarta los numero en ascii que no lo encuentro por ningun lado ,,,
 
#11
Esta mañana lo he probado con otro módulo bluetooth y si que funciona en todos los dispositivos, uno dice que es BTBoard 1.05 el que va a según el teléfono y el 1.06 si que va



muy bueno tu planteamiento pero no encuentro la forma de comvertir el numero 13 en ascii
para luego concatenarlos. o tal vez haya una función que comviarta los numero en ascii que no lo encuentro por ningun lado ,,,
Me parece que tienes que poner "La cadena que quieras \n" o \r directamente sin unir nada.
 
Última edición:
#14
gracias por responderr. asunto solucionado lo he enviado el numero 13 como byte y si llegan las cadenas.
he utilizado la función SendByteNumer de app inventor.
amigo puedes mostrar los bloques que usaste para enviar la cadena, necesito enviar el valor de un slider a un pic y recibirlo con la funcion gets, pero aun no logro como enviar con la tecla enter :cry: muestro la imagen del bloque slider que estoy tratando de enviar
 

Adjuntos

#16
Hola como estan !
tengo varias dudas con el App inventor, les comento de a una para no ser tan pesado XD!

la primera es: si enviamos desde la App un numero ( NO una letra ) al pic , se puede recibir con la funcion getc() ??? o es solo para recibir char ?
 
#19
Creo que eso es intrascendente. Appinventor o cualquier otro, envía lo que tu le digas que envíe. Siempre son bytes en binario puro. Lo que luego hagas tu con esos bytes es asunto tuyo.
Ya no me acuerdo de como lo hice, me parece que es el valor asccii de la tecla lo que envía, un sólo byte.
 
Última edición:
#20
bueno si, será cuestion de probarlo yo tambien supongo que envia el valor ascii pero no estoy seguro por eso les consultaba a ustedes que tienen mas experiencia.

Y suponiendo que nosotros enviemos un 123(ciento veintitres) y entonces el App Inventor envie el valor ascii que seria: 49-50-51

lo recibimos en el pic con la funcion getc()

y lo guardamos en un INT o en un CHAR ?

char=getc()

int=getc()

Como que veo que hay algo raro pero tampoco puedo explicarlo bien, espero que se entienda un poco mi duda gracias !
 
Arriba