Buenas tardes a todos,
Estoy realizando un proyecto pero me estoy encontrando con diversos problemas. La idea principal es que tengo que comunicar un sensor con una placa Arduino Mega. Para que el sensor empiece a funcionar debo enviar una cadena de bytes, pero creo que no lo estoy haciendo viendo ya que no obtengo respuesta. Según el manual debo hacer esto (disculpar pero está en inglés):
The Model 864 Digital Altimeter communicates over a 2-wire differential RS-485 serial
data transmission line or optionally a half-duplex RS-232 data line. To interrogate the
head and receive echo data, a Switch Data Command string is sent via a serial command
program at a baud rate of 115200 bps, No Parity, 8 Data Bits and 1 Stop Bit. When the
Switch Data command is accepted, the head transmits, receives and sends its return data
back to the command program.
Mas especificamente, pone que la cadena debe empezar con unos bites y acabar con otros, como especifica:
The altimeter accepts up to 27 bytes of switch data from the serial interface and must see
the switch data header (2 bytes: 0xFE and 0x44 HEX) in order to process the switches.
The head will stop accepting switch data when it sees the termination byte (0xFD HEX).
The termination byte must be present for the head to process the switches.
Una vez el sensor aceptara el codigo, se deberia poner en funcionamiento y mandarme una respuesta (este punto ya lo miraremos mas adelante porque si no se enciende de poco me sirve).
El caso es que yo he conectado la Placa Mega junto con una placa RS485, he usado el puerto 0 para la comunicacion con el sensor (primero usé el puerto 1 para la comunicacion y el 0 para ver lo que enviaba mediante el ordenador, pero cambié al 0 para ver si el led RX se iluminaba, cosa que no ha pasado) y el PIN2 como interruptor para cambiar el estado de comunicacion de la placa RS485.
Os pego el código que he creado:
const int ledPin = 13; // Led integrado en la placa
const int ReDePin = 2; // HIGH = Emisor / LOW = Receptor
Aqui no tengo muy claro que tipo de variables usar, he probado con los dos tipos pero sigue sin funcionar.
//byte interruptor[27]= {0xFE, 0x44, 0x1D, 5, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFD};
//static const unsigned char interruptor[27]= {0xFE, 0x44, 0x1D, 5, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFD};
void setup()
{
Serial.begin(115200); //Aqui inicio las caracteristicas de la comunicación
pinMode(ledPin, OUTPUT);
pinMode(ReDePin, OUTPUT);
}
void loop()
{
//RS485 en modo transmisor para enviar la el activador del sensor
digitalWrite(ReDePin, HIGH);
digitalWrite(ledPin, HIGH);
Aqui tengo muchas dudas, uso serial.writte o serial.print para enviar los datos. Lo he probado de ambas maneras pero nunca obtengo respuesta.
//Serial.write (interruptor,26);
for (int i=0; i<=26;i++)
{
//Serial.write(interruptor[i]); ////
//Serial.write(interruptor[i],HEX); ////
}
Serial.flush();
delay(1000);
La segunda parte ya la trataremos si solucionamos el envío de información.
Muchas gracias