Buenos dias os cuento el problema que tengo para ver si alguien me puede ayudar. No he utilizado mucho arduino pero creia que no seria tan complicado comunicarme con este sensor en particular.
Lo que necesito es mediante un arduino mega leer los datos que envia el sensor Lidar 2D de Pepperl Fuchs R2100 con salida RS232 (115200 baudios 8N1) y procesar esa señal. El arduino lo tengo conectado al PC para ver por el monitor del puerto los resultados que se obtienen. Como prueba queria que saber el valor de un byte en concreto. En un principio lo único que quiero es obtener la trama de datos porque el tratamiento lo tengo claro (es similar al de una trama GPS). El sensor es el del siguiente link:
2-D LiDAR Sensor OMD8000-R2100-R2-2V15
En el prototcolo de comunicacion se indica que para obtener respuesta del sensor se debe enviar una trama de 5 bytes que es la siguiente:
0xde 0x01 0x05 0x59 0x83
y el sensor responde con una trama de 50 bytes siendo los 4 iniciales fijos:
0x01 0xde 0x32 0x11 .......
Esta es la trama que quiero obtener.
El montaje que he hecho es conectar la salida del sensor RS232 a un conversor TTL y de ahi:
Vcc a 5V del arduino
GND a GND del arduino
Rx a pin 8
Tx a pin 9
Copio el codigo que estoy utilizando para que se vea si estoy haciendo algo mal:
#include <SPI.h>
#include <stdlib.h>
#include <SoftwareSerial.h>
char RxData[50] = {0} ;
int Distance[11] = {0};
SoftwareSerial mySerial(8, 9);
void setup()
{
Serial.begin(9600); // serial port that communicates with the PC
mySerial.begin(115200);
//Serial1.begin(115200); // serial port that listens to the Lidar unit
}
void loop()
{
mySerial.write(222);
mySerial.write(1);
mySerial.write(5);
mySerial.write(89);
mySerial.write(131);
/*if (Serial.available()) // if there's a byte waiting to be read
}*/
for (byte i = 0; i < sizeof(RxData); ++i){
//RxData[i] = (char)0;
mySerial.readBytes(RxData, 50);
Serial.write(mySerial.read());
}
int Chx = 0; // calculate and check checksum
for (int L = 0; L < 49; L++) {
Chx = RxData[L] ^ Chx;
}
if (RxData[49] != Chx) {
//input code for failed message
}
int BP = 4;
for (int j = 0; j < 11; j++) {
Distance[j] = RxData[BP + 1]*256 + RxData[BP]; // calc the distance
//Distance[L] = Distance[L] + 200; // add the offset
//Echo[L] = word(RxData[BP + 3], RxData[BP + 2]); // calc the echo
BP = BP + 4;
}
Serial.println(RxData[2]);
delay(500);
}
Ya no se por donde tirar. Espero la ayuda de algun entendido en la materia. Muchas gracias