Go Down

Topic: HC-05 + RMU900 datos basura... (Read 3475 times) previous topic - next topic

4jay

#15
Dec 09, 2016, 09:43 pm Last Edit: Dec 10, 2016, 12:49 pm by 4jay
Bien fijate este es el codigo que estoy usando


Code: [Select]
#include <SoftwareSerial.h>

 #define rxPin 10
 #define txPin 11

 // configura un nuevo puerto serie
 SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);

 void setup()  {
   // defines los modos de pin para tx, rx:
   pinMode(rxPin, INPUT);
   pinMode(txPin, OUTPUT);
   // configura la velocidad de datos del puerto SoftwareSerial
   mySerial.begin(9600);
 }

 void loop() {
  if (mySerial.available()) {
    Serial.print(mySerial.read(), HEX);
    Serial.write(' '); // Pone un espacio (0x20) entre valores hexadecimales
  }
}



ya al momento de entrar en el software serial no pasa nada y ya estoy leyendo el codigo de barra



y este es el momento cuando visualizo el puerto TTL de mi modulo Bluetooth



fijate lo logre con Python usando la liberia PySerial no me tomo mas de 10 minutos en crear un tipo de lectura unica aunque no se si es la correcta...


Lucario448

Espera un momento...

En el monitor serie de Arduino vas a 9600 bps, y en el de Python vas a 57600 bps. Cuál es la velocidad correcta entonces?




Entre toda la exótica documentación del escáner RFID (o la disque SDK), no vendrá la configuración a la que trabaja su puerto serial? Necesito saber:

  • Tasa de baudos (baud rate). Posibles opciones: wuuuuuuuuuuuuuu, son demasiadas como para enlistarlas.
  • Bits de datos (data bits). Posibles opciones: entre 5 y 8.
  • Bits de parada (stop bits). Posibles opciones: 1 o 2.
  • Bit de paridad (parity bit). Posibles opciones: par (even), impar (odd), no.

4jay

  • Tasa de baudos (baud rate). Posibles opciones: wuuuuuuuuuuuuuu, son demasiadas como para enlistarlas.
  • Bits de datos (data bits). Posibles opciones: entre 5 y 8.
  • Bits de parada (stop bits). Posibles opciones: 1 o 2.
  • Bit de paridad (parity bit). Posibles opciones: par (even), impar (odd), no.

la configuracion del RMU es de 57600, 8, 1, no. lo que se dice en la SDK. Eh igual cambie los Baud a la indicada no pasa nada igual

lo que sucede es que le pongo al arduino a leer el serial port y no obtiene nada, con el ejemplo en python es que puedo leer los datos sin usar el arduino y va todo muy bien, quiero es poder decirle al Arduino Lee los datos que obtienes del modulo Bluetooth y transformalos, el codigo por lo que veo esta bien, lo que debe estar fallando es mi esquema. cambie igual mente lo que me comentaste del TX y RX, tengo una placa arduino Mega deberia probar con esa para ver que sucede?

Lucario448

#18
Dec 10, 2016, 06:38 pm Last Edit: Dec 10, 2016, 06:39 pm by Lucario448
la configuracion del RMU es de 57600, 8, 1, no.
Problema de configuración completamente descartado. Por defecto Arduino (y el 99% de los dispositivos que se comunican por serial UART) trabaja de modo 8N1 (8 bits de datos, 1 de parada, no paridad)



lo que sucede es que le pongo al arduino a leer el serial port y no obtiene nada, con el ejemplo en python es que puedo leer los datos sin usar el arduino y va todo muy bien
Con lo que dices + el esquema; llego a pensar que lo tienes conectado al USB, mientras el escáner lo tienes con los pines 0 y 1. Eso no se puede hacer a menos de que quites el microcontrolador de la placa.

Si la idea es usar el microcontrolador, entonces conecta escáner/módulo Bluetooth a los pines definidos en la instancia de SoftwareSerial (mySerial).



tengo una placa arduino Mega deberia probar con esa para ver que sucede?
Si quieres; pero esta vez el otro dispositivo debe ir al par que pertenece al Serial1:




Recuerda que TX con RX y viceversa.

4jay

Hombres Mil Gracias por la ayudaaaa..... la Solucion era que tenia los cables de TX y RX malos jajajaja en algun punto estaban quebrados...

MIL GRACIAS de verdad....  :)  :)  :)  :)   :smiley-lol:  :smiley-lol:  :smiley-lol:  :smiley-lol:

Lucario448

Ahhh... y qué es lo que debería mostrar al fin y al cabo?

4jay

Este fue el codigo que monte en el arduino:

Code: [Select]
#include <SoftwareSerial.h>

#define rxpin 2
#define txpin 3

int cod_complet;
int cod_start;
int cod_close;
int cod_final;
int i;

SoftwareSerial RFID = SoftwareSerial(rxpin, txpin); // RX and TX

  void setup()
  {
    pinMode(rxpin, INPUT);
    pinMode(txpin, OUTPUT);
    RFID.begin(57600); // inicio base del lector
    Serial.begin(9600); // inicio de lectura hacia el arduino
  }
  void loop()
{
  if (RFID.available() > 0)
  {
    i = RFID.read();
    cod_complet = (i);
    Serial.print(cod_complet, HEX);
    Serial.print(" ");
    delay(1);
  }
}


esto fue lo que me arrojo la lectura que era lo que necesitaba:

Code: [Select]
AA 3 12 0 55 AA 3 10 1 55 AA 3 12 0 55 AA 3 10 1 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 11 10 0 30 0 E2 0 41 6 22 E 2 43 19 70 4A A7 55 AA 3 12 0 55

Ahora solo me hace falta crear un string separando el codigo HEX que me arroja al encender/apagar el lector, y contar cuantas veces se repite el codigo de lectura en 1 segundo para saber cuanto tiempo estuvo leyendo la barra  :D

A menos que sepas si hay una mejor forma de hacerlo? si la hay, encantado de escuchar ideas   :smiley-kitty: :smiley-kitty:

Lucario448

contar cuantas veces se repite el codigo de lectura en 1 segundo para saber cuanto tiempo estuvo leyendo la barra  :D
Define "repetir código de lectura".
Te refieres a contar las tramas o comparar los contenidos de estas?

Aquí me tendrías tú que ayudar con la estructura. Lo que sé hasta el momento es:

  • 0xAA es el inicio de una trama.
  • 0x03 indica una trama corta
  • Si el tercer byte es 0x12, entonces el siguiente... es false (0)? Si es 0x10, entonces... es true (1)?
  • 0x55 es el fin de la trama.

Este patrón se repite cuatro veces, con el tercer y cuarto byte alternados.

Luego está la trama larga, que se retransmite exactamente igual, unas 16 veces; siendo interrupida en la decimosétima.


Aquí más bien eres tú el que tiene que poner de su parte; no sé interpretar esta información.
Lo único que veo, es un patrón de bytes tan bien definido que se le podría aplicar un algoritmo de compresión de datos.

4jay

Aquí más bien eres tú el que tiene que poner de su parte; no sé interpretar esta información.
Lo único que veo, es un patrón de bytes tan bien definido que se le podría aplicar un algoritmo de compresión de datos.
Exacto yo de aqui en adelante ya puedo interpretar y darle de manera logica un uso a los datos ya arrojados, lo que tengo pensado hacer es Crear un string guardando la longitud de la cantidad de caracteres del codigo, luego quitar de esa longitud los caracteres arrojados del lector al iniciar la lectura con el botom y tendre mi codigo unico por cada barra UHF...

4jay

Define "repetir código de lectura".
Te refieres a contar las tramas o comparar los contenidos de estas?

Aquí me tendrías tú que ayudar con la estructura. Lo que sé hasta el momento es:

  • 0xAA es el inicio de una trama.
  • 0x03 indica una trama corta
  • Si el tercer byte es 0x12, entonces el siguiente... es false (0)? Si es 0x10, entonces... es true (1)?
  • 0x55 es el fin de la trama.

Este patrón se repite cuatro veces, con el tercer y cuarto byte alternados.

Luego está la trama larga, que se retransmite exactamente igual, unas 16 veces; siendo interrupida en la decimosétima.
cuando inicia la lectura arroja este codigo "AA 3 10 1 55" cuando termina la lectura es la siguiente "AA 3 12 0 55" entonces la lectura comprendida es la siguiente [(inicio) + (codigo) + (final)]

Lucario448

cuando inicia la lectura arroja este codigo "AA 3 10 1 55" cuando termina la lectura es la siguiente "AA 3 12 0 55" entonces la lectura comprendida es la siguiente [(inicio) + (codigo) + (final)]
Si el formato siempre es así, entonces lo que necesitas nada más es la sección que tu llamas "código".
Se me ocurre lo siguiente:

Code: [Select]
byte lectura[20]; // Global
byte longitudValida = 0; // Contador que indica la longitud (sección "código") de la última lectura

void leerCodigo() {
  RFID.readBytesUntil(0x55, lectura, 20); // Descarta la cabecera inicial (inicio)
  RFID.read(); // Descarta el 0xAA inicial
  longitudValida = RFID.readBytesUntil(0x55, lectura, 20); // Lee el código que necesitas, sin el 0x55 final.
  RFID.flush(); // Descarta lo que sobre, que sería el "pie" de la trama (final)
}

void imprimirCodigo() {
  for (int i = 0; i < longitudValida - 1; i++) {
    Serial.print(lectura[i], HEX);
    Serial.write(' ');
  }
  Serial.println(lectura[longitudValida - 1], HEX);
}

Nótese que para separar secciones no es necesario convertir a texto de antemano; se pueden ingresar los delimitadores directamente al código y en forma hexadecimal (antepuesto por "0x").

4jay

mas que PERFECTO jejeje... logre hacer el codigo pero termine usando el que posteaste es mucho mas limpio y no tan redundante de datos... logre terminar esa fase de la idea MUCHAS GRACIAS!!! de verdad jejeje  :D  :D  :D  :D

Go Up