Mon petit compteur fonctionne desormais parfaitement, mais j'aimerais stocker ce compteur en mémoire eeprom lorsque j'actionne un interrupteur (interrupteur qui arrête le processus) afin de récuperer le compteur au redemarrage du processus même en cas de coupure de l'alimentation.
Une fois le redemarrage aprés coupure de l'alimentation lorsque l'arduino redémarre il irait lire la dernière valeur sauvegardé.
Je bute surtout sur l'adresse où stocker ce compteur...
Petit rappel une adresse de l'eeprom est constituer de 8 bits d'information ce qui constitue un nombre ne dépassent pas 255 donc si tu veut un compteur qui va au delà il te faudra décomposer ton nombre en plusieurs fois 8 bits pour ensuite les enregistrés, et a la prochaine lecture les ré-assembler pour obtenir le nombre que tu avais enregistré,
voici un lien qui ma beaucoup aider lors d'un projet similaire au tien << - Arduino Reference.
bonne chance.
le nombre de bit doit être fixer dé le départ en fonction du type de variable que tu souhaite manipuler
long 32 bit
int 16 bit /dans le cas de l'Arduino
char 8 bit
Dans le cadre de mon projet j'ai choisi long ( +2 147 483 647)
tu aura besoin décrire deux fonction une pour (dé-assemblage enregistrée) qui recevra ta variable et une pour (assemblage lecture) qui renverra une variable,
il va te falloir utiliser les opérateurs bitshift left et right qui serve retirée des bits ou ajouter des bits
par exemple si tu a le nombre 30 qui vaut en binaire 11110 et que tu utilise les opérateur suivant
11110<< 3 = 11110000 en décimal vaut 240
11110>> 3 = 11 en décimal vaut 3
En résumer les opérateurs te servirons a couper ta variable si tu en fais bonne usage et que tu trouve les bon calcule tu devrais obtenir des tranche de 8 bit qui une fois mi lun a coter de l'autre dans le bonne ordre recréera ta variable d'origine.
Pour les deux fonction je n'ai utiliser que l'opérateur bitshift la soustraction pour le dé-assemblage et l'addiction et l'opérateur bitshift pour l'assemblage.
La librairie Wiring/Arduino ne fait rien de plus qu'appeler une seule des fonctions fournies par Atmel et te cache l’existence des autres qui peuvent te simplifier la vie.
Bon j'ai lu relu et éplucher une la plupart des liens qui m'ont été donnés et j'ai pas mal googolé cette après midi.
ça rentre, petit à petit.
Je dois lire la valeur de l'eeprom dans le setup et l'écrire dans le void loop. Je peux donc incrémenter mon compteur avec la fonction compteur ++ (qui actuellement fonctionne parfaitement) et avec la fonction :
EEPROM.write (adresse, compteur);
je suis normalement capable d'écrire la valeur du compteur en mémoire morte afin de pouvoir la relire après extinction puis rallumage de l'arduino.
Tout ce complique avec l'adresse...
Si j'écris EEprom.write (0.compteur);
Et que mon compteur affiché sur l'écran LCD est = à : 520 000, la valeur stockée dans l'Eeprom sera bien 520 000 et non "compteur" ?
Et lorsque je vais redémarré l'Arduino, il ira bien lire à l'adresse "0" la valeur 520 000 ?
Voilà une fois que j'aurais ces précisions je commencerai à coder... mais il me reste encore une ou deux questions... mais j'attends un peu, je ne veux pas vous faire peur
Une adresse ne dépasse pas 8 bits donc 255 en décimal, du moins avec les fonctions fournit par Arduino,
Pour répondre a ta question si tu enregistre 520 000 (1111110111101000000) tu obtiendra a la lecture 64 (01000000).
Si ta variable ce nomme compteur ce sera ce quelle contiendra qui sera enregistrée et non compteur
Pour ce qui est de la solution avr qui ta été proposer par "68tjs" je ne peux pas te répondre car je programme exclusivement via l'ide de l'Arduino.
Donc la solution n'est pas à regarder du coté de l'Eeprom mais plutôt du coté de la mémoire flash ?
Parce que 520 000 c'est juste un exemple. L'arduino est branché pour contrôler un appareil de production sur lequel on doit intervenir à environ 10 000 000 de cycle pour une grande révision. Faire la révision avant est inutile est couteuse et passer le cap faire encourir des risques.
D'où l'intérêt de compter electroniquement et de prévenir lorsque le compteur arrive au chiffre indiqué. Stocker en Eeprom était donc la solution facile, maintenant en flash peut-être ?
l'eeprom à l'avantage de conserver ce chiffre en mémoire ses donc très pratique pour le consulté même après une panne de courent,
Couper ta variable en 4 comme je te l'ai proposer n'est pas très compliquer pour exemple je peu te montrer mes deux fonctions sauf si tu préfère tenter de le faire par tes propre code ?
Voici les fonctions
Elle ne sont pas optimiser pour tout type d'utilisation à toi de les adapter en fonction de tes besoins
void eeprom_ecriture(long valeur)
{
long part_1 = valeur >> 8;
part_1 = part_1 << 8;
int result_1 = valeur - part_1;
long part_2 = valeur >> (8*2);
part_2 = part_2 << (8*2);
int result_2 = (valeur - part_2)>>8;
long part_3 = valeur >> (8*3);
part_3 = part_3 << (8*3);
int result_3 = (valeur - part_3)>>16;
long result_4 = valeur >>(8*3);
EEPROM.write(0,result_1);
EEPROM.write(1,result_2);
EEPROM.write(2,result_3);
EEPROM.write(3,result_4);
}
long eeprom_lecture()
{
long resultat = (EEPROM.read(0) + (EEPROM.read(1)<<8) + (EEPROM.read(2)<<16) + (EEPROM.read(3)<<24));
return resultat;
}
Pour ce qui est de l'apprentissage du c je l'ai apprise sur http://www.siteduzero.com/ ils y'a des années avant même d'avoir un Arduino, je te conseille le c++ car l'orienter objet est très utile dans la conception de librairie pour l'arduino, il existe un tutoriel sur le site exprès rédiger pour les utilisateurs d'arduino, pour ce qui est des livres le site du zero publie des versions livre des tutoriels les plus populaires.
Oui la programmation c'est le seul moyen de communiquer avec une machine,
Le jour ou tout le monde l'aura comprit des topics du genre "comment faire un jeu sans programmer" disparaitrons. XD (je dit pas sa pour toi rassure toi)