unexpected itoa() behavior

Serial.print(x) prints the decimal value of the variable and itoa(x) converts the variable to a decimal string. Either way, you end up with the decimal representation of the integer. What you need is to print the integer as a single character and that is what Serial.write(x) does.

Pete