Je souhaiterais faire des calculs avec des caractères saisis sur le moniteur serie. Le souci est que j'obtiens comme résultat "0191" en tapant "A". Je me suis donc douté que le caractère était codé sur 2 octets ou 2 bytes. Dans ce cas, comment passer de 2 bytes à un seul byte et ainsi obtenir "0" ?
Existe-t-il une fonction pour faire cela ?
Merci d'avance pour votre aide
void setup(){
Serial.begin(9600);
}
void loop() {
if( Serial.available() != 0){
String myString = String (Serial.readString());
byte buffer[myString.length()];
myString.getBytes(buffer, myString.length());
for (int i = 0; i < myString.length(); i++){
byte Test;
byte High;
Test = 65;
High = buffer[i];
High = High - Test;
Serial.print(High);
High = 0;
}
}
}
Cela fonctionne pour les chiffres et les lettres non accentués, mais certains caractères (lettres accentuées et certains symboles) sont codés en 2 octets (utf-8) et le caractère € est sur 3 octets (226 + 130 + 172)
Tout dépend des caractères dont tu as besoin.
@Rakushi parle du caractère 'A'.
Compte tenu de la teneur de la question, je pense que ce n'est pas la peine de compliquer (au moins dans un premier temps).
Non c'est bien sur un byte, tu n'étais pas loin , tu as oublié, dans ta conversion du caractère entré, (byte) , ainsi, (byte)myString[0] , Ca donne ceci, pour autant que tu n'attendes qu'un caractère à la console.
void setup(){
Serial.begin(9600);
Serial.setTimeout(50); // Pour fin des commandes depuis le moniteur
}
void loop() {
if( Serial.available() != 0){
String myString = String (Serial.readString());
byte Test = 'A';
byte High = myString[0]; // Extraire le code ASCII du caractère
High = High - Test;
Serial.println(High);
}
}
Si tu veux un petit bout de programme qui te permet d'entrer des commandes dans tes programmes, c'est volontiers.
Correction, ça fonctionne très bien sans le (byte).