Autor Tema: Proyectos con Android  (Leído 26702 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con Android
« Respuesta #15 en: 28 de Diciembre de 2012, 11:47:54 »
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.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Proyectos con Android
« Respuesta #16 en: 28 de Diciembre de 2012, 15:16:41 »
Sigo de cerca las publicaciones de tus avances. Estoy por empezar con lo mismo. por ahora recolectando informacion. Gracias por compartir los avances!

Saludos
-
Leonardo Garberoglio

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con Android
« Respuesta #17 en: 28 de Diciembre de 2012, 17:18:29 »
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.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con Android
« Respuesta #18 en: 28 de Diciembre de 2012, 20:44:15 »
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        :) :) :) :)
« Última modificación: 28 de Diciembre de 2012, 21:50:24 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con Android
« Respuesta #19 en: 28 de Diciembre de 2012, 23:13:06 »
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
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con Android
« Respuesta #20 en: 29 de Diciembre de 2012, 19:16:36 »
hola de nuevo.aqui traigo la joya de la corona  :D :D :D ¡ no me queda na!



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
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con Android
« Respuesta #21 en: 03 de Enero de 2013, 14:18:39 »
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
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Proyectos con Android
« Respuesta #22 en: 03 de Enero de 2013, 17:20:18 »
tildado a favoritos!!!  ;-) ((:-))
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Proyectos con Android
« Respuesta #23 en: 03 de Enero de 2013, 17:27:55 »
Yo no lo se hacer, pero vi uno de los videos de NEOTEO y alli Mario ponia el icono en la pantalla.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con Android
« Respuesta #24 en: 07 de Enero de 2013, 21:22:01 »
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.




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

Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con Android
« Respuesta #25 en: 10 de Enero de 2013, 17:19:00 »
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
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con Android
« Respuesta #26 en: 11 de Enero de 2013, 11:38:03 »
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.
« Última modificación: 17 de Enero de 2013, 05:33:04 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con Android
« Respuesta #27 en: 19 de Enero de 2013, 10:33:54 »
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.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con Android
« Respuesta #28 en: 20 de Enero de 2013, 16:11:49 »
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
« Última modificación: 21 de Enero de 2013, 08:55:21 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Proyectos con Android
« Respuesta #29 en: 20 de Enero de 2013, 21:12:06 »
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.
« Última modificación: 21 de Enero de 2013, 08:57:28 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)