j'ai réalisé un montage simple sur arduino uno avec 2 boutons poussoirs et 1 Lcd 2x16, l'un des BP incrémente un compteur décimal entre 0 et 999 et l'autre BP remet le compteur à 0, j'affiche la valeur du compteur sur le LCD. Tout ça fonctionne trés bien mais lorsque je coupe l'alimentation du Uno évidemment je perds la valeur de mon compteur.
J'ai donc opté pour le rajout d'un module RTC DS1307 (horloge temps réel) qui possède 56 octets de RAM sauvegardés par pile bouton, l'avantage c'est qu'avec la Ram on est pas limité en cycles d'écriture/lecture.
Et c'est là que ça se corse pour moi, j'ai trouvé un exemple d'utilisation de la RAM du 1307 ici :
et ça donne ceci avec l'exemple qui permet de stocker un message dans la ram et de le relire :
je souhaiterai utiliser cet exemple en remplaçant le message texte par ma variable compteur d'une valeur comprise entre 0 et 999, d'après les docs il faut travailler en BCD donc convertir ma variable puis lors de la lecture la convertir à nouveau en décimal, ma variable se codera donc entre 4 bits (0) et 12 bits (999), donc j'en déduis que 2 octets de la ram sont suffisants pour stocker ma valeur.
Comment mettre en forme ceci dans l'exemple donné?
merci pour votre aide.
ATTENTION: sizeof détermine à la compilation la taille de la variable donc ce système ne fonctionnera qu'avec des variables de type connue au moment de la compilation. Ne fonctionne pas avec des pointeurs sur des variables.
J'avais déjà étudié ce problème mais jamais vraiment réussi à trouver une solution. En fait quand je démarre la première sauvegarde, ça fonctionne parfaitement. Mais à la 2e écriture, le chiffre est complétement à l'ouest.
void setup() {
lcd.begin(16, 2);
lcd.clear();
delay(10);
EEPROM_readAnything (0,compteur);
//Serial.begin(115200);
}
void loop() {
// code pour incrémenter le compteur en fonction d'une action, je vous épargne le code
EEPROM_writeAnything (0,compteur);
}
Je vous ai mis juste une petite partie du code histoire d'etayer mes propos.
En fait le compteur est du type : compteur++ il s'incrémente lors de chaque action. Le but est ensuite de stocké la valeur du compteur afin qu'elle soit enregistré lors d'une coupure de courant.
Peut-être que je devrais plutôt stocker la valeur du compteur dans la ram de l'horloge du DS1307...
ATTENTION: sizeof détermine à la compilation la taille de la variable donc ce système ne fonctionnera qu'avec des variables de type connue au moment de la compilation. Ne fonctionne pas avec des pointeurs sur des variables.
C'est exactement ce qu'il faut que je fasse !!!!
Je teste début de semaine et je reviens avec le résultat.
EDIT :
A propos de l'adresse, la dessus j'ai vraiment une grosse lacune. J'ai une adresse de départ : 0x08, je ne m'occupe que de celle là ou il faut que je fasse autre chose ?