2

I have, one program with only using printing array and other with serial write and print function for the array, while using serial write and print function I get these extra characters between the data as shown below, can anyone help me with this

Printing the array with print function

uint8_t a[13] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0X77, 0x88,
 0x01, 0x02, 0x03, 0x04, 0x05};
int i;
void Print_Hexa(uint8_t num) {
 char Hex_Array[2];
 sprintf(Hex_Array, "%02X", num);
 Serial.print(Hex_Array);
}
void setup() {
 Serial.begin(9600);
}
void loop() {
 for (i = 0; i <= 12; i++) {
 //Serial.write(a[i]);
 Print_Hexa(a[i]);
 }
 Serial.println();
 delay(100);
}

Using Print Function

Using with serial write and print function for array

uint8_t a[13] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0X77, 0x88,
 0x01, 0x02, 0x03, 0x04, 0x05};
int i;
void Print_Hexa(uint8_t num) {
 char Hex_Array[2];
 sprintf(Hex_Array, "%02X", num);
 Serial.print(Hex_Array);
}
void setup() {
 Serial.begin(9600);
}
void loop() {
 for (i = 0; i <= 12; i++) {
 Serial.write(a[i]);
 Print_Hexa(a[i]);
 }
 Serial.println();
 delay(100);
}

Using Serial write and Print function for array

Edgar Bonet
45.1k4 gold badges42 silver badges81 bronze badges
asked Jul 29, 2021 at 13:35
2
  • 3
    Serial.write(a[i]); sends a character but not all values are readable characters Commented Jul 29, 2021 at 13:55
  • To prevent buffer overruns, use snprintf(Hex_Array, sizeof(Hex_Array), "%02X", num);. More info here and here. Also be aware that the Arduino versions don't support the %f format specifier. Commented Jul 29, 2021 at 15:10

2 Answers 2

6

Serial.write(some_byte) writes a byte on the serial output. The Arduino serial monitor tries to interpret the bytes it receives as text:

  • 0x11 is a control character, displayed as "しろいしかく"
  • 0x22 is the ASCII code for the double quote (")
  • 0x33 is the ASCII code for the digit 3.
  • 0x44 is the ASCII code for the uppercase letter "D"
  • etc.
answered Jul 29, 2021 at 13:58
2
  • Is it possible to remove them or mask them if possible Commented Jul 29, 2021 at 14:16
  • 3
    @voticoy: Sure! Remove the Serial.write() statement. Commented Jul 29, 2021 at 14:21
1

To store a 2 character string you need a 3 byte array, not a 2 byte array. This is because in C a string consists of the actual string data and a zero ("NULL") byte at the end to indicate where the end of the string is.

So you would need:

char Hex_Array[3];

so it can store, for the number 0x69: 690円. Otherwise you overrun the array and corrupt other data that follows in the stack, and changing that other data corrupts your string by changing the "end of string" marker to some other random ASCII character.

answered Jul 29, 2021 at 13:39
1
  • Thank you for the response, I changed the array size to 3 as mentioned, still in the serial monitor output remains the same. Commented Jul 29, 2021 at 13:48

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.