Fonction 2 bytes en un?

Bonjour,

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;
  }
 }
}
   
   
   
   
   
   

0191 +65 = 256

0 - 65 = 0191 as octet byte

Bonjour,

Le caractère 'A' est transmis sur un octet qui est son code ascii (0x41 ou 65 en décimal)

si car est le caractère reçu, pour obtenir 0 (et non "0" ni '0') il suffit de faire car-'A'

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).

Mais il dit:

Je doute qu'il ne travaille qu'avec des A. Quoique les bons élèves n'ont que des A!

De toute façon, j'ai compris ce qui n'allait pas dans mon programme mais merci d'avoir prit le temps de me répondre !

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).

Cordialement
jpbbricole

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.