Bon, on va essayer d'éclairer la chose :
Préambule : un littéral désigne une suite de caractères stockés dans un code source (tels qu'ils apparaissent à l'écran de ton éditeur préféré), et censés représenter une valeur.
Un des boulots du compilo est d'arriver à comprendre la valeur réelle que représente un littéral.
Pour le compilateur, le littéral 'é' représente simplement un nombre codé sur un octet, en l'occurence le nombre 169 (pourquoi 169 => on va voir plus loin).
Si tu le transfères dans un int (=entier signé), et que tu affiches la valeur du int, tu obtiens 169-256= -87
D'un point de vue informatique, le contenu de la variable est le même. C'est juste que tu lui demandes de l'afficher en tant que nombre signé, d'où le -87. Si ton numChar était de type byte ou uint8_t, cela afficherait 169.
Ce qui est important, c'est que la valeur binaire représentée par le littéral présent dans ton code source (peu importe que tu aies codé 'é' ou 169), est utilisée comme telle par le compilo lorsqu'il génère l'exécutable : elle fait directement partie des instructions machine.
"éè" est une chaîne de caractères.
Le compilateur la stocke en RAM à partir d'une certaine adresse : une suite d'octets avec un zéro terminal ajouté.
Et le code exécutable généré comporte, à l'endroit de ton instruction, un renvoi vers cette adresse mémoire.
(je ne parle pas ici de l'utilisation de PROGMEM : c'est un autre sujet).
Et il se trouve que le compilateur traduit ton texte en utilisant la norme UTF-8 pour stocker les valeurs équivalentes en RAM.
UTF-8 est différent de ASCII.
En fait, à partir du 128ème caractère, c'est le bordel et il existe plusieurs "normes universelles" : ASCII étendu, UTF-8, ANSI, ISO, ...
En UTF-8, les caractères spéciaux occupent deux octets : un marqueur C3 (en hexa, soit 195, soit encore 195-256 = -61 si affiché en tant qu'entier signé) suivi de la valeur associée au caractère accentué pour cette nomenclature : 169 pour é (=> -87) et 168 pour è (=> -88).
donc "aéè" devient en RAM : 97.195.169.195.168.0
Si tu envoies cette chaîne de caractère vers le terminal série de l'IDE Arduino, elle s'affichera mal car celui-ci ne fonctionne pas en UTF-8.
Afficher les caractères accentués sur le terminal série est possible, mais une étape de transco préalable est nécessaire.
Ou alors il faut utiliser un littéral différent (séquences d'échappement au lieu de é, è, etc => pas joyeux)
Cerise sur le gâteau : imagine que tu déclares tous tes libellés dans un seul fichier source, qui ne contient que ça.
Et que derrière, tu utilises le même fichier source par include pour compiler différents programmes pour différentes plateformes.
Par exemple un programme pour ton arduino, et un programme pour ton PC (windows ou linux).
Et ben selon les plateformes et/ou les compilos, tu ne retrouveras pas exactement les mêmes octets en mémoire, représentant ta chaîne de caractères. Cela dépend de la norme de représentation des caractères, utilisée par le compilo pour ta plateforme cible.
Pour peu que tes programmes dialoguent entre eux, tu te retrouves vite devant un problème de vocabulaire commun.
C'est clair ou je recommence ?