enregistrer string en eeprom [Résolu]

bonjour tout le monde,
encore sur un projet un peu fou comme dab.
je cherche a enregistrer un String en eeprom.
eepromwriteanything ne donne rien
le type de string est : +3366666666 évidemment un numéro de téléphone :slight_smile:

je récupère bien dans un void le numéro, mais impossible de le retourner et l'écrire en eeprom.
ca fait quelques heures que je potasse la dessus et la boite d'efferalgan en prend un coup ainsi que le paquet de clopes :frowning:

le processus est le suivant
envoie d'un code sur le gprs=> pas de pb
traitement du numéro émetteur=>pas de pb
réaffichage du numero=>pas de pb
et la suite gros pb

merci d'avance

infobarquee:
le type de string est : +3366666666 évidemment un numéro de téléphone :slight_smile:

Bonjour Infobarquee
Je ne pouvais pas ne pas la faire ! meme si je sais que ce n'est pas ça qui va t'aider là ! :grin:
Mais c'est quand même l'enfer le N° du string :smiley: ---> []

:grin: un peu tiré sur la ficelle ........... du string je sais, même pas fait exprès en plus.
j'oubliais version 1.0 ide

Pourquoi ne pas simplement coder chaque caractère en ASCII ?

parce que le numéro est recu dans un String au départ.
donc encoder pour décoder après......galère

L'EEPROM est un array de bytes, donc pour y stocker une variable String, il faut transformer.

Oué mais un string c'est un array de byte, l'encodage décodage est plutôt limité ! A vrai dire je vois pas pourquoi ça te génerait

bon je viens de trouver la parade
je lis le string caractère par caractère et inscrit chaque caractère sur une position de l'eeprom :wink:
je vous le donne, mais il doit y avoir une autre méthode.

char caractere[20];

for (int ii = 0; ii < 20; ii++) {
caractere[ii] = numero[ii];
EEPROM.write(ii, caractere[ii]);
Serial.print(caractere[ii]);

après pour reformer le tout, dans le setup

String numero2 ="";
char numero[20];

//setup
Serial.println("lecture eeprom");
for (int ii = 0; ii < 13; ii++) {
numero[ii] = EEPROM.read(ii);

Serial.print(numero[ii]);
numero2 = numero2 +numero[ii];
}

PS pour Artouste : le mode démoniaque vient de frapper ]:smiley:

Oué mais un string c'est un array de byte,

Ne pas confondre String et string.

@infobarquee:
As-tu essayé d'utiliser la méthode toCharArray() pour passer la chaine à ta fonction d'écriture en eeprom.

Edit:
et encore je ne suis pas sur que ça marche car eepromwriteanything utilise un sizeof pour déterminer le nombre de données à écrire. Donc il faut que la taille du tableau soit connue au moment de la compilation.

oui testé, mais ca merdouille sur ide1.0
pour eepromwriteanything idem
mais un bête toto.lenght() renvoie la taille.

Bonjour,

À noter qu'un numéro de téléphone à une taille maximum connu.
L'utilisation d'une string est totalement inutile du coup (et dangereuse -> allocation dynamique), un simple char[11] suffit.

Faire un char[20] pour stocker temporairement 1 char avant de la mettre dans une string ... c'est moche, très moche ...
Au pire :

for (int i = 0; i < 20; ++i) {
      char c = numero[i];
      EEPROM.write(i, c);
      Serial.print(c);
}

moche oui, mais c'est la seule solution que j'ai pu trouver.
sinon, le numéro n'est pas de 11 mais 12 caractères :wink:
et via un mobile il y a un + devant
+33 6 66 66 66 66