Après avoir fait le tour, je ne vois toujours pas comment faire pour enregistrer et lire un "char" négatif dans la ROM.
J'ai choisi un char pour sa longueur, 1 octet et donc entre -128 et 127. La sauvegarde se passe bien mais la lecture, j'ai n'importe quoi. J'ai l'impression qu'on ne peut enregistrer que des valeurs positives comprises entre 0 et 255 dans la mesure où quand je lis -1 il me donne 255.
Il y aurait-il une solution ?
Je vous remercie.
C'est le type de la variable dans laquelle tu vas placer l'octet après lecture dans l'EEPROM qui va modifier la façon d'interpréter la valeur.
Si l'octet est mis dans un char et que tu fais un print de la variable le résultat sera présenté entre -128 et +127
Si l'octet est mis dans un unsigned char ou un byte et que tu fais un print de la variable le résultat sera présenté entre 0 et 255
Il en va de même des opérations que tu pourrais effectuer sur ces variables.
fdufnews:
C'est le type de la variable dans laquelle tu vas placer l'octet après lecture dans l'EEPROM qui va modifier la façon d'interpréter la valeur.
Si l'octet est mis dans un char et que tu fais un print de la variable le résultat sera présenté entre -128 et +127
Si l'octet est mis dans un unsigned char ou un byte et que tu fais un print de la variable le résultat sera présenté entre 0 et 255
Il en va de même des opérations que tu pourrais effectuer sur ces variables.
Merci pour cette précision.
J'ai essayé de changer le type de ma variable contenant la valeur lue, en prenant par exemple un int mais j'ai toujours le même résultat.
Jusque là, on parlait de variables sur 8 bits.
Un int est sur 16 bits si tu lui affectes un byte tel que retourné par EEPROM.read() tu places une variable non signée dans un int et donc il n'y a pas d'extension du signe.
boolean cnt = 0;
char ETAT=-1;
void loop()
{
if(!cnt){
EEPROM.write(7,ETAT);
Serial.print("valeur sauvee");
Serial.println(ETAT);
cnt=1;
}
char lu = EEPROM.read(7);
Serial.print("valeur lue et mise dans un char");
Serial.println(lu);
int lu2 = (char)EEPROM.read(7);
Serial.print("valeur lue et mise dans un int");
Serial.println(lu2);
}
Merci ça a l'air de correspondre à ce que je souhaite.
Par contre je trouve dommage de devoir passer par un "int" pour stocker juste "-1" alors que je voulais à la base passer par un simple char pour justement utiliser qu'un octet.
Ou c'est peut-être l'affichage qui me trompe et qui me fait croire que ce n'est pas "-1" alors que ça l'est dans la mesure où "Serial.print( type char)" affiche un caractère.
Merci en tout cas, je vais me contenter de ça ^^
Pas la peine de passer par un int, un char suffit.
Il ne faut pas mélanger la valeur numérique placée dans la variable et sa représentation
Lorsque tu demandes l'affichage d'une variable char, par défaut print affiche le caractère correspondant.
Si tu veux afficher la valeur numérique d'un char, il faut préciser DEC
char toto=65;
Serial.print(toto); // Affiche A, le caratère correspondant au code ASCII 65
Serial.print(toto,DEC); //Affiche 65, la repéresentation décimale
Serial.print(TOTO,HEX); // Affiche 41, la repéresentation hexadécimale
fdufnews:
Pas la peine de passer par un int, un char suffit.
Il ne faut pas mélanger la valeur numérique placée dans la variable et sa représentation
Lorsque tu demandes l'affichage d'une variable char, par défaut print affiche le caractère correspondant.
Si tu veux afficher la valeur numérique d'un char, il faut préciser DEC
char toto=65;
Serial.print(toto); // Affiche A, le caratère correspondant au code ASCII 65
Serial.print(toto,DEC); //Affiche 65, la repéresentation décimale
Serial.print(TOTO,HEX); // Affiche 41, la repéresentation hexadécimale