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

#21
No es lo mismo que envíes el número 123 como entero, que como una cadena.
Cada carácter tiene el tamaño de un byte.

Entonces tienes que formatear lo que quieras enviar y recibirlo de igual forma.
Si envías el 123 como byte, enviarías un "{" de la tabla ASCII.

En decimal, el carácter "1" de la tabla ASCII equivale al 49, al recibir le das formato y lo interpretas como quieras.
 
#22
Ah gracias darkbites creo que ya voy entendiendo

me fijé en el App inventor que hay una funcion para enviar mas de un byte al mismo tiempo

pero el pic los va a recibir ? o solo podré guardar uno ? y el resto se van a perder ?

o como podria hacer para guardarlos por ejemlo a 3 bytes (123)

creo que por aca esta el problema de Scooter que comentaba que a veces no recibia los datos
 
#23
Con gets(string); puedes recibir toda la cadena hasta que termine con "\r" (13 = Carrriage Return)
Si vas a recibir 10 bytes, creas un arreglo con 11: char cadena[11];
Después la puedes concatenar, convertir, comparar, o usar cada byte por separado.
 
Última edición:
#24
En este caso lo que se recibe es lo mismo que si se pulsa en un teclado, es decir: un '1', "media hora después" un '2' y así sucesivamente.
Yo lo guardaba en un buffer de tan sólo tres bytes y cuando se recibía la tecla "intro" se leía el buffer. Eso con un teclado de verdad en CM.
Con este sistema hay dos posibilidades:
Uno ese mismo, que es el que usa este programa de appinventor ya que conforme pulsas teclas 'escupe' los datos.
Otro generar la cadena en el tablet y enviarla entera y editada con una tecla "send" o algo así. Eso es lo que hace el terminal de arduino
 
#25
en CCS solo veo que estan disponibles las funciones:

getc(), getch() y getchar()

alguna es equivalente a gets() ?

Sinó como se puede hacer para recibir la cadena ? aca estamos perdiendo datos!



HOla Scooter si yo me referia siempre a enviar "de una" varios numeros desde el App Inventor por ejemplo el numero 123
 
Última edición:
#27
Por eso digo que hay que ir a la ayuda del CCS y no a lo que encontras por internet ! <-- kiko !

bueno con toda esta info ya se puede arrancar a verificar la transmicion de datos del App inventor. Si Scooter tiene ganas y tiempo de hacer una App que envie numeros y un programa en ccs que los reciba,bien simple, seria mucho mas rapido (asi lo "debuggeamos" paso a paso para ver que esta mandando el App inventor) , sinó esperenme unos dias a que aprenda a usar el App inventor y hago un programita y lo subo

creo que en la transmicion y/o recepcion de los datos esta el problema de Scooter y no en Android ( esas cosas las hacen personas inteligentes, yo digo siempre que cuando algo no esta funcionando bien o falla es por culpa mia XD, y en el 100% de los casos tenia razon ! )
 
#28
Si, vale. Me apunto.

Ya no tengo problemas: el bluetooth versión 1.05 fallaba en algunos dispositivos. El 1.06 va fenómeno en todos los que he probado.

¿Que quieres? ¿Un terminal bluetooth? Ya hay media docena en al market, pero podemos hacer uno más.

Se puede poner una etiqueta o cuadro de texto con el texto que va entrando y un cuadro de texto con un botón "enviar" para lo que va saliendo
 
#29
Bueno, he hecho una modificación a la aplicación.
Ahora tiene una "pantalla" que es un cuadro de texto en la que aparece lo que se recibe como hacía antes. Hay que enviar todo de golpe ya que si se envía en dos se borra y vuelve a empezar.
Cuatro teclas F1, F2, F3 y Enviar
Un cuadro de texto en el que escribir lo que se quiere enviar.

Al pulsar enviar se envía el contenido del cuadro de texto.

F1, 2 y 3 son configurables con lo que queramos. Ponemos el texto que se quiera en el cuadro de texto y se mantiene pulsada la tecla que se desee, entonces esa Fn enviará cada vez ese texto.

Probadlo y me contáis.


En principio todo esto es para mandar cadenas ascii, si queremos mandar números en float o lo que sea habría que pensar como va la cosa. Ahora mismo se envían los números como cadenas.
 

Adjuntos

Última edición:
#32
Con gets(string); puedes recibir toda la cadena hasta que termine con "\r" (13 = Carrriage Return)
Si vas a recibir 10 bytes, creas un arreglo con 11: char cadena[11];
Después la puedes concatenar, convertir, comparar, o usar cada byte por separado.
hola Darkbites, puede ser que nunca me llegue el retorno de carro ?
estoy debugeando y recibo bien los datos, pero el programa nunca sale de la función gets(string)

no tendria que salir sola ? o le tengo que enviar un retorno de carro desde la aplicacion ?
 
#33
Siempre es necesario enviar el retorno de carro al final de la cadena, de otra manera la función no retorna.
Eso es lo que espera gets() para que retorne la cadena completa dentro del arreglo. (Sin el char 13)
 
#34
Yo no estoy mandando retorno de carro. Luego lo modifico o le pongo un check para incorporar el retorno de carro.
¿Solo el 13?
¿O 10+13 como en güindos?
 
#36
el \n funciona pero el \r no ( lo toma por separado y guarda la barra y el r )

alguna otra secuencia de escape que reemplace el \r ?



estoy probando las secuencias de escape \... mandarlas desde la App para que las reconozca el gets(string) . Por ahora solo me reconoce \n

que raro ! a lo mejor el App inventor tiene algun tipo de programacion diferente para enviarle las secuencias de escape ? PHP ? o no se ya no se que pensar ja
 
Última edición:
#37
Actualizado.
Ahora además hay dos checkbox para añadir un CR \r y/o un LF \n a voluntad a cualquier envío por el puerto blutúz.

Bueno, entre otras averiguaciones podemos ver que hace cada cosa que si \n o \r...
 

Adjuntos

#38
Hola Scooter como lograste hacer funcionar el \r ? estoy luchando con eso desde hace varias horas !

Yo envio un string desde el App Inventor , lo tomo con el gets(string), pero nunca logro que salga del gets() :(

pudiste enviar un string con retorno de carro para salir de un gets () ???


saludos!
 
#39
Espero que no estés mandando el CR así "\r". Eso es para lenguaje C.
Lo que tienes que enviar es carácter 13 cómo ASCII.

Por ejemplo, en Visual Basic se manda así:
cadena = "esta es una cadena" & vbCr
O de ésta otra forma:
cadena = "esta es una cadena" & Chr(13)

En AppInventor no sé cómo se conviertan los números a ASCII, porque uso B4A (Basic For Android)
 
#40
He puesto añadir \r o \n según el check que marques. Se supone que appinventor reconoce esa secuencia. Eso dice la documentación.
De cualquier modo he puesto el código fuente, así que lo podéis editar a vuestro gusto.
 
Arriba