Imprimir datos en hex

Hola a todos! Queria compartir con ustedes esta duda que me genero un proyecto, la cual pude solucionar de otra manera, pero me gustaria saber si es posible hacer lo que deseo...

El punto es que tenia dos placas utilizando un ATMega48 conectadas a una computadora y sirviendo como controlador de algunos actuadores (motores, etc) para un programa en la pc que servia como control de domotica basico. A una de estas, por que se quemo, la sustitui por un Arduino Uno.

El punto es que el anterior controlador mandaba unas variables en hex que lei con un monitor serial en la pc (Serial Port Monitor de Eltima), esto porque pude leer el que funcionaba.

Este programa me muestra los datos enviados al puerto, como caracteres y en valor hex. Pero continuando con el proyecto, me encontre que para un evento ocurrido en el programa en la pc, mandaba un dato al ATMega48 y este tenia que responder con un dato de valor 90 en hex. El problema es que 90 en hex no representa ningun caracter en ASCII. Al final, tuve que re-diseñar el programa que utilizaban en la PC y asi logre solucionar el problema.

Mi pregunta es, ¿se puede imprimir datos en valores hex?, porque he intentado con Serial.print(x.HEX) y como ejemplo puedo decir que le pedi que imprima el numero 15 en hex, lo que hara el Arduino con esa funcion es imprimir "F", pero en realidad, para el programa antes mencionado, me mostrara que imprimi una "F" no como hex sino como caracter.

int numero = 15;

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

void loop()
{
  Serial.println(numero,HEX);
  delay(1000);
}

Una imagen para que se entienda mejor

Desde ya muchas gracias!!

Seguro que estás confundido con los conceptos.

Hexadecimal es la representación de un número entero en base 16, se suele utilizar para mostrar el valor "binario" (porque no todos están asociados a un caracter visible o imprimible). Tal vez de ahí radique la confusión.

Cuando haces print(), estás enviando una representación textual (con caracteres ASCII) del valor; cuando lo que se requiere es enviar el valor en su forma binaria (directamente como un byte), se utiliza write().

Por lo tanto:

Oliver18:
me encontre que para un evento ocurrido en el programa en la pc, mandaba un dato al ATMega48 y este tenia que responder con un dato de valor 90 en hex. El problema es que 90 en hex no representa ningun caracter en ASCII.

Al no ser una respuesta con los dos caracteres '9' y '0', entonces necesitas enviar el valor binario. La solución sería:

Serial.write(0x90);

PD: recuerda que en código se pueden escribir constantes en hexadecimal, siempre iniciando con el prefijo "0x".

Muchas gracias por tu ayuda! No me acordaba la verdad de que existia el write(). De vuelta muchisimas gracias!!