Stocker unsigned long variable dans l'eeprom pour horametre?

bonjour

Je voudrais faire un programme qui compte le temps d'allumage de la carte (un horametre)

la carte a une entrée qui permet de savoir s'il y a une demande de coupure de l'alimentation
la carte a une sortie qui coupe l'alimentation de la carte (et du système). Cela me permet de retarder la coupure de l'alimentation et etre sur d'avoir bien ecrit dans l'eeprom

je n'ai besoin que de stocker les minutes d'allumage, pas besoin des secondes!

le soucis est que la je stocke que sur un byte donc je suis bloqué a 255... donc inutilisable

j'aurai voulu utiliser un variable sur 4 bytes comme ca je suis "large" sur le temps d'utilisation

#include <EEPROM.h>

int adresse_horametre = 1500; // adresses Horametre
byte valeur_horametre=0; // variable pour octets à stocker/lire en Eeprom

unsigned long old_horametre = 0;
unsigned long horametre = 0;

#define contact 2 // presence du 12v contact
#define pwr 11 // Gestion de l'alimentation de carte
#define action 10

void setup()
{
Serial.begin(115200);

pinMode(pwr, OUTPUT);
pinMode(action, OUTPUT);
pinMode(contact, INPUT);

old_horametre = EEPROM.read(adresse_horametre);
}

void loop()
{
int et_contact = digitalRead(contact);

if (et_contact == HIGH)
{
horametre = millis();
digitalWrite(pwr, HIGH);
digitalWrite(action, HIGH);

Serial.print("Horametre = ");
Serial.println(old_horametre);
}
else
{
valeur_horametre = horametre+old_horametre;
EEPROM.write(adresse_horametre, valeur_horametre);

digitalWrite(action, LOW);
delay(1000);
digitalWrite(pwr, LOW);
}
}

Merci de votre aide

Pour la lecture, un truc du style

old_horametre = 0;
for (i=0;i<4;i++)
{
  old_horametre = (old_horametre << 8) | EEPROM.read(adresse_horametre + i);
}

et inversement pour l'écriture

for (i=0;i<4;i++)
{
    valeur_horametre = (horametre+old_horametre) >> ((3-i)<<3);
    EEPROM.write(adresse_horametre + i, valeur_horametre);
}

Va donc faire un tour sur le site de l'avrlibc:
http://www.nongnu.org/avr-libc/
et plus particulièrement sur la page :
http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html

et tu verras qu'Arduino a

  • simplement habillé dans une classe une des fonctions disponibles pour écrire dans l'Eeprom du micro
  • censuré toutes les autres fonctions disponibles

Bonjour,

Pour compléter la réponse de 68tjs sache qu'il existe une solution "Arduino" toute prête pour stocker des paramètres en EEPROM.
Cherche "EEPROMLoadAndSaveSettings" sur google :wink:

merci a tous, je vais lire tout cela