Bonjour a tous,
Je me questionne est ce qu'il est possible d'avoir une solution en cas de la coupure du courant?
selon ce que j'ai vu , lors du coupure le systéme fait un auto reset
est ce qu'il est possible de continuer d'ou s'est arreter la boucle aprés la coupure du courant
Merci
Pour repartir d'un point donné, il faut avoir mémorisé ce point avant la coupure de courant. Cela veut dire qu'il faut enregistrer en permanence (EEPROM ou SD) le point où l'on en est. Le point de démarrage ou redémarrage se faisant sur la lecture de la dernière valeur enregistrée.
Cordialement.
Pierre
+1
Il n'y a pas de solution miracle "qui marche toute seule"
Cela veut dire que le programme doit être organisé en blocs d'instructions continues, avec gestion d'un point de reprise entre les blocs.
Pour le stockage à haute fréquence de l'information du point de reprise, la RAM non volatile d'un DS1307 peut aussi être une solution pertinente, car non limitée en nombre de réécritures.
Bonjour,
Une piste à creuser aussi: la solution matérielle avec un backup sur batterie, en utilisant un produit de ce genre (et une batterie LiPo 3.7V):
salut ,
Tout d'abord merci a toute les personnes qui m'ont répondu ,
j'ai encore une petite question , dans mon code la conservation des états des led fonctionne avec aucun soucis
j'ai une autre variable qui contient le nombre des appuies sur un bouton, est ce qu'il est donc possible d'enregistrer le dernier nombre d'appuie
#include <EEPROM.h>
const int buttonPin = 2;
const int led_1 = 13;
const int led_2 = 12;
int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;
byte ee_valeur0;
byte ee_valeur1;
byte ee_valeur2;
void setup() {
ee_valeur0 = EEPROM.read(0);
ee_valeur1 = EEPROM.read(1);
ee_valeur2 = EEPROM.read(2);
pinMode(buttonPin, INPUT);
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
Serial.begin(9600);
if (ee_valeur0 == 1) {
digitalWrite(led_1, HIGH);
}
if (ee_valeur0 == 0) {
digitalWrite(led_1, LOW);
}
if (ee_valeur1 == 1) {
digitalWrite(led_2, HIGH);
}
if (ee_valeur1 == 0) {
digitalWrite(led_2, LOW);
}
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
buttonPushCounter++;
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
}
}
lastButtonState = buttonState;
if (buttonPushCounter == 1) {
digitalWrite(led_1, HIGH);
EEPROM.write(0, 1);
} else if (buttonPushCounter == 2) {
digitalWrite(led_1, LOW);
EEPROM.write(0, 0);
}
else if (buttonPushCounter == 3) {
digitalWrite(led_2, HIGH);
EEPROM.write(1, 1);
}
else if (buttonPushCounter == 4) {
digitalWrite(led_2, LOW);
EEPROM.write(1, 0);
}
if (buttonPushCounter > 3)
buttonPushCounter = 0;
}
Merci a vous
Merci pour votre réponse pepe ,
ca était vraiment suffisant , généralement il y'a une solution pour l'anti rebond comme j'ai vu dans des cours sur internet
par contre
Par conséquent, par sécurité il faudrait d'une part prévoir d'arrêter le programme juste avant de commencer une opération d'écriture dans l'EEPROM dans le cas où l'on détecterait une chute de la tension d'alimentation, et d'autre part faire en sorte que cette chute de tension soit suffisamment lente pour ne pas interrompre une opération d'écriture déjà en cours.
si le programme est en train d'exécuter une opération et avant que l'operation est fini on aura une coupure , l'écriture dans l'eeprom va etre réaliser selon la derniére opération qui etait déja écrit?
lors de l'appel de l'opération suivante ,l'opération va etre realiser correctement?
Je rejoins le point de vue de pepe, mais je trouve que le problème est mal posé.
Il faut le régler a la racine, il me semble plus judicieux d’éviter une coupure de courant que d'essayer de la corriger avec une acrobatie logiciel.
Par exemple tu peut utiliser un chargeur de batterie comme le MCP73831 en parallèle du régulateur de tension.
De sorte qu'en cas de coupure, la batterie prend le relai pour une durée X, dés lors que la tension est rétabli la batterie se recharge puis se coupe quand elle est pleine.
Merci a vous standby, j'essaierai
merci a vous tous finalement
ok pepe , bien entendu
merci autre fois