Proyecto, Comunicación serial con un dispositivo.

Buenas noches a todos! espero se encuentren muy bien! les cuento, estoy intentando tener comunicación con un dispositivo que utiliza comunicación serial, anexaré una imagen en donde viene la información de transmisión y recepción. Sin embargo estoy recién ingresando al mundo de la programación y sobre todo Arduino.

Estoy ocupando un Arduino mega 2560, la idea es que desde el monitor serie pueda enviar un valor en hexadecimal y de respuesta reciba ya sea en ASCII o en hexadecimal ejeje lo importante es tener comunicación.

void setup() {
  // initialize both serial ports:
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() {
  // read from port 1, send to port 0:
  if (Serial1.available()) {
    int inByte = Serial1.read();
    Serial.write(inByte);
  }

  // read from port 0, send to port 1:
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial1.write(inByte);
  }
}

Intente con este código pero no tuve respuesta :o :o :o
si alguien conoce más del tema le estaré eternamente agradecido!

En el manual del dispositivo dice: UART TTL, Transmisión de datos a 9600 baudios, sin control de flujo, 8 bits de datos, sin paridad y 1 bit de parada. Los niveles lógicos vienen definidos por el rango de tensión coimprendida entre 0.0v y 0.8v para el estado L (bajo) y los 2.2v y Vcc del inegradopara el estado H (alto).

UART TTL, Recepción de datos a 9600 baudis, sin control de flujo, 8 bits de datos, sin paridad y 1 bit de parada.

es es la información que tengo mediante el manual jeje, cabe decir que estoy usando un Level Shifter para la comunicación entre Arduino Mega 2560 y el dispositivo jeje, esta conectado a puerto 0 y 1 osea RX y TX

Gracias de antemano!

El dispositivo lo tienes que conectar a Tx1 y Rx1 (pines 18 y 19) sino ¿cómo lees/escribes en el Serial1?
Recuerda que Tx1 del Mega va al Rx del "dispositivo" (de hecho ¿por qué tanto misterio?) y Rx1 a Tx respectivamente.

Saludos

Pd: Elimina "Ayuda" del título porque no está permitido

Listo, elimine "Ayuda" del título;
Los conecte como dices, inserte un código en Hexadeciamal, sin embargo no tuve respuesta jejeje

Moderador:
Por favor no repitas lo que otra persona te dice. Ya se lee en el post correspondiente.
Menciona a la persona por su nick y nada mas.
Usa quote o cita para resaltar un párrafo, no todos y cada uno de los textos respondidos que corresponden a ese post.
Item 14 de las normas del foro, último párrafo, si quieres leer al respecto.
Gracias.

Colega si entiendo bien lo que quiere hacer (escribir código hexadecimal en el monitor serial y que se envíe al otro puerto serial y visualizarlo como hexadecimal) como esta estructurado el código es imposible de hacer. Esto debido a que el monitor serial trabaja bajo ASCII. Por lo tanto, si usted escribe por ejemplo 0x16 (un tipo de codificación hexadecimal), el monitor serial no lo va tomar como hexadecimal sino como un 0, una x, un 1 y un 6, todo bajo código ASCII. El resultado que obtendría en el otro puerto serial sería 48 120 49 54 que son el equivalente decimal ASCII a cada uno de esos 4 caracteres. También aplica para hexadecimal simple: Si escribe 30 (que es 0 en decimal para ASCII), el monitor va tomar eso como un 3 y un 0 ASCII y no como un 30 hexadecimal (ver Tabla ASCII).

Una opción es realizar un conversor de Hexadecimal (lo que se escriba en el monitor serial) a decimal para enviarlo por los puertos seriales

Puede ojear este post donde tratan precisamente esa conversión:
https://forum.arduino.cc/index.php?topic=437015.0

Finalmente, para visualizar lo que recibe en el puerto serial en hexadecimal si es mas sencillo porque Arduino tiene funciones implementadas para ello. Simplemente es agregar la siguiente linea al código

Serial.print(inByte, HEX);

Eso le permitirá visualizar en hexadecimal lo que esta recibiendo por el puerto serial. Recalco por última vez que hay que tener presente siempre ASCII. Matemáticamente 1 en decimal es igual a 1 en hexadecimal. Pero a nivel de programación eso no es tan así. Por ejemplo si el puerto serial esta recibiendo "1 2 3", en el monitor serial se vera 31 32 33 que son los equivalentes en hexadecimal al código ASCII correspondientes a 1,2 y 3.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.