c++ - new - ¿Cómo `Serial.print()` bytes hexadecimales "completos"?
serial.println arduino español (4)
lo siento, no hay suficiente reputación para comentar, pero la respuesta anterior no es del todo correcta. En realidad, la buena y ligera forma de codificarlo debería ser:
void p ( byte X) {if (X <1 0 ) {Serial.print ("0");} ...
dando el código:
void p(byte X) {
if (X < 10) {Serial.print("0");}
Serial.println(X, HEX);
}
Y en el código principal:
p(byte1); // etc.
espero que esto ayude
Estoy programando Arduino y estoy tratando de Serial.print()
bytes en formato hexadecimal "the my way" (sigue leyendo para más información).
Es decir, al usar el siguiente código
byte byte1 = 0xA2;
byte byte2 = 0x05;
byte byte3 = 0x00;
Serial.println(byte1, HEX);
Serial.println(byte2, HEX);
Serial.println(byte3, HEX);
Obtengo la siguiente salida en el Monitor Serial:
A2
5
0
Sin embargo, me gustaría publicar lo siguiente:
A2
05
00
En palabras, me gustaría imprimir el valor hexadecimal "completo" incluyendo 0
s ( 05
lugar de 0
y 00
lugar de 0
).
¿Cómo puedo hacer eso?
Método simple de fuerza bruta, es escribir una rutina como:
void p(char X) {
if (X < 16) {Serial.print("0");}
Serial.println(X, HEX);
}
Y en el código principal:
p(byte1); // etc.
Prueba esto:
//Converts the upper nibble of a binary value to a hexadecimal ASCII byte.
//For example, btohexa_high(0xAE) will return ''A''.
unsigned char btohexa_high(unsigned char b)
{
b >>= 4;
return (b>0x9u) ? b+''A''-10:b+''0'';
}
//Converts the lower nibble of a binary value to a hexadecimal ASCII byte.
// For example, btohexa_low(0xAE) will return ''E''.
unsigned char btohexa_low(unsigned char b)
{
b &= 0x0F;
return (b>9u) ? b+''A''-10:b+''0'';
}
Y en el código principal:
comand_mod=0xA1; //example variable
Serial.print(btohexa_high(comand_mod));
Serial.print(btohexa_low(comand_mod));
Utilice sprintf para imprimir en un búfer (dos caracteres por byte + terminador nulo):
byte byte1 = 0xA2;
byte byte2 = 0x05;
byte byte3 = 0x00;
char s[7];
sprintf(s, "%02x/n%02x/n%02x", byte1, byte2, byte3);
Serial.println(s);
Se agregaron nuevas líneas intermedias para obtener cada una en una nueva línea. Acerca de ''% 02x'', el% significa que aquí viene la información de formato, 0 significa rellenar con 0, 2 significa introducir un parche hasta 2 caracteres de ancho y x significa darme esto como hexadecimal.
Para otras opciones de formato, vea http://linux.die.net/man/3/sprintf