getting the ascii code instead of the letter

Hello, I am trying to print the initial of an element (say the 3rd) of ARG_NAMES. It does what I want except when I try to print the upper case of the initial in which case I get 73 instead of 'I'

#define sp Serial.print
#define spln Serial.println
#define sp_ sp(F(" "))
byte VALVES_ARG=26;
const char* ARG_NAMES[]={"wdog", "enet", "inet", "email", 
                           "sms", "cloud", "log", "alarm",
                           "night", "armed", "away", "die",
                           "autorun", "irrigate", "spare14", "spare15",
                           "siren", "test", "tank", "infra",
                           "stOpen", "stClose", "poOpen", "poClose",
                           "baOpen", "baClose", "hedge", "orchard",
                           "kitchen", "flamboyant", "tube", "lawn",
                          };

void setup() {
  Serial.begin(38400);
  spln("starting");
  sp(toupper(ARG_NAMES[2][0]));
  

}

void loop() {;}

Can someone please explain why?

Thanks for you help

73 is the ASCII code for I
Use Serial.write

Thanks. It does show the character with Serial.write It's not clear why the difference between the char vs its toupper but never mind

use sp(char(toupper(ARG_NAMES[2][0])));

This will force sp to consider the byte as a char

guy_c:
when I try to print the upper case of the initial in which case I get 73 instead of 'I'

Where do you get this? what is receiving your output? How is it decoding it?

Perehama:
Where do you get this? what is receiving your output? How is it decoding it?

Prints are to the serial monitor; for example that if the ide. I guess ithe monitor takes the transmitted byte and print the corresponding ascii coded char

femmeverbeek:
use sp(char(toupper(ARG_NAMES[2][0])));

This will force sp to consider the byte as a char

Neat! Thanks

btw.
I like the

#define sp Serial.print
#define spln Serial.println
#define sp_ sp(F(" "))