Comunicación serie entre arduino y visual studio

Hola a todos.

Llevo unos días intentando enviar datos desde arduino a visual studio por el puerto serie pero no hay manera.

Resumiendo un poco lo que quiero hacer:

Tengo que enviar una trama de 20 bytes desde arduino a visual estudio por el puerto serie. Esta trama de bytes contiene diferente información (bytes [0..3] valores de un contador, bytes [4,5] valores de fuerza...).

Todos estos bytes los agrupo en una matriz, la cual pretendo enviar (los valores puestos son aleatorios, solamente es para probar su envío):

byte trama[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED, 0x00, 0x00, 0x00, 0x64, 0x00, 0x32, 0x00, 0x14, 0x03, 0xE8, 0x00, 0x00, 0x00, 0x2B};

Para enviar esta trama utilizo la función Serial.write(buf, len)

void setup()
{
  Serial.begin(9600);
}


void loop() 
{
  Serial.write(trama, 20);
}

Está bastante simplificado, pero para el envío es lo único que estoy utilizando.

A la hora de visualizar estos datos tanto por el monitor serie como en el propio visual studio obtengo los valores ASCII de estos bytes.

No entiendo mucho de esto, por lo que no se si es la forma correcta de enviar estos datos.

A ver si alguien me puede ayudar.

Saludos.

El monitor serie, que viene con el ide de Arduino, no esta adecuado para leer bytes, debes utilizar un monitor serie capaz de ello. En linux yo utilizo el cutecom pero puedes utilizar el Realterm en windows, configurado para leer bytes. Sobre Visual studio no puedo ayudarte, porque no soy usuario.
Saludos

Gracias por responder.

¿Eso quiere decir que estoy enviando la información de forma correcta y lo que falla es cuando intento leer esa información?

Así es.

Gracias :slight_smile:

Bueno para la próxima, coloca un código completo porque por un lado pones la trama y por otro un código que tampoco es de Visual Studio ya que cualquier código de Arduino requiere

#include<Arduino.h>

He probado tu código y funciona perfectamente.
Te dejo una variante usando sprintf y Serial.print para poder visualizarlo en formato Hexadecimal

Eres libre de comentarlo y volver a tu forma Serial.write()

#include "Arduino.h"

byte trama[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED, 0x00, 0x00, 0x00, 0x64, 0x00, 0x32, 0x00, 0x14, 0x03, 0xE8, 0x00, 0x00, 0x00, 0x2B};


void setup() {
  Serial.begin(9600);

}

void loop()
{
  byte len = sizeof(trama);

  for (int i=0; i<len; i++) {
      // Serial.write(trama[i]);
      char buffer[20];
      sprintf(buffer,"0x%02x ", trama[i]);
      Serial.print(buffer);
  }
    
  Serial.println();        // comenta si esto complica tu tarea
  delay(2000);           // comenta si esto complica tu tarea
}

Gracias por responder, me habéis ayudado con las respuestas. He estado bastante liado y no he podido responder antes.