/* Includes */
#include <SPI.h>
#include <SD.h>
/* Taille du buffer */
const byte BUFFER_SIZE = 32;
/* Variables d'exemple qui seront chargé depuis le fichier de configuration */
int lundi_matin_debut = 0;
int lundi_matin_fin = 0;
int lundi_midi_debut = 0;
int lundi_midi_fin = 0;
int lundi_apres_midi_debut = 0;
int lundi_apres_midi_fin = 0;
int mardi_matin_debut = 0;
int mardi_matin_fin = 0;
etc
int relais = 3;
int heure = 1;
int jour = 5;
/* setup() */
void setup() {
/* déclaration du relais comme une sortie*/
pinMode(relais, OUTPUT);
/* Déclare le buffer qui stockera une ligne du fichier, ainsi que les deux pointeurs key et value */
char buffer[BUFFER_SIZE], *key, *value;
/* Déclare l'itérateur et le compteur de lignes */
byte i, buffer_lenght, line_counter = 0;
/* Initialise le port série */
Serial.begin(9600);
Serial.println("Exemple de chargement d'un fichier horaire de box");
/* Initialise la carte SD */
pinMode(10, OUTPUT);
if (!SD.begin(4)) { // Gère les erreurs
Serial.println("Erreur de carte SD !");
for(;;);
}
/* Ouvre le fichier de configuration */
File config_file = SD.open("nouveau.txt", FILE_READ);
if(!config_file) { // Gère les erreurs
Serial.println("Erreur d'ouverture du fichier !");
for(;;);
}
/* Tant que non fin de fichier */
while(config_file.available() > 0 ){
/* Récupère une ligne entière dans le buffer */
i = 0;
while((buffer[i++] = config_file.read()) != '\n') {
/* Si la ligne dépasse la taille du buffer */
if(i == BUFFER_SIZE) {
/* On finit de lire la ligne mais sans stocker les données */
while(config_file.read() != '\n');
break; // Et on arrête la lecture de cette ligne
}
}
/* On garde de côté le nombre de char stocké dans le buffer */
buffer_lenght = i;
/* Gestion des lignes trop grande */
if(i == BUFFER_SIZE) {
Serial.print("Ligne trop longue à la ligne ");
Serial.println(line_counter, DEC);
}
/* Finalise la chaine de caractéres ASCIIZ en supprimant le \n au passage */
buffer[--i] = '\0';
/* Incrémente le compteur de lignes */
++line_counter;
/* Ignore les lignes vides ou les lignes de commentaires */
if(buffer[0] == '\0' || buffer[0] == '#') continue;
/* Cherche l'emplacement de la clef en ignorant les espaces et les tabulations en début de ligne */
i = 0;
while(buffer[i] == ' ' || buffer[i] == '\t') {
if(++i == buffer_lenght) break;
}
if(i == buffer_lenght) continue;
key = &buffer[i];
/* Cherche l'emplacement du séparateur = en ignorant les espaces et les tabulations âpres la clef */
while(buffer[i] != '=') {
/* Ignore les espaces et les tabulations */
if(buffer[i] == ' ' || buffer[i] == '\t') buffer[i] = '\0';
if(++i == buffer_lenght) {
Serial.print("Ligne mal forme a la ligne ");
Serial.println(line_counter, DEC);
break; // Ignore les lignes mal formé
}
}
if(i == buffer_lenght) continue; // Gère les lignes mal formé
/* Transforme le séparateur = en \0 et continue */
buffer[i++] = '\0';
/* Cherche l'emplacement de la valeur en ignorant les espaces et les tabulations âpres le séparateur */
while(buffer[i] == ' ' || buffer[i] == '\t') {
if(++i == buffer_lenght) {
Serial.print("Ligne mal forme a la ligne ");
Serial.println(line_counter, DEC);
break; // Ignore les lignes mal formé
}
}
if(i == buffer_lenght) continue; // Gère les lignes mal formé
value = &buffer[i];
/* Transforme les données texte en valeur utilisable */
/* C'est ce morceaux de code qu'il vous faudra adapter pour votre application <span class="wp-smiley emoji emoji-wink" title=";)">;)</span> */
if(strcmp(key, "lundi matin_debut") == 0) {
lundi matin_debut = atoi(value);
}
if(strcmp(key, "lundi matin_fin") == 0) {
lundi matin_fin = atoi(value);
}
if(strcmp(key, "lundi midi_debut") == 0) {
lundi midi_debut = atoi(value);
}
if(strcmp(key, "lundi midi_fin") == 0) {
lundi midi_fin = atoi(value);
}
if(strcmp(key, "lundi apres midi_debut") == 0) {
lundi apres midi_debut = atoi(value);
}
if(strcmp(key, "lundi apres midi_fin") == 0) {
lundi apres midi_fin = atoi(value);
}
else if(strcmp(key, "mardi_debut") == 0) {
mardi_debut = atoi(value);
}
if(strcmp(key, "mardi_fin") == 0) {
mardi_fin = atoi(value);
}
else if(strcmp(key, "mercredi_debut") == 0) {
mercredi_debut = atoi(value);
}
if(strcmp(key, "mercredi_fin") == 0) {
mercredi_fin = atoi(value);
}
else if(strcmp(key, "jeudi_debut") == 0) {
jeudi_debut = atoi(value);
}
if(strcmp(key, "jeudi_fin") == 0) {
jeudi_fin = atoi(value);
}
else if(strcmp(key, "vendredi_debut") == 0) {
vendredi_debut = atoi(value);
}
if(strcmp(key, "vendredi_fin") == 0) {
vendredi_fin = atoi(value);
}
else if(strcmp(key, "samedi_debut") == 0) {
samedi_debut = atoi(value);
}
if(strcmp(key, "samedi_fin") == 0) {
samedi_fin = atoi(value);
}
else if(strcmp(key, "dimanche_debut") == 0) {
dimanche_debut = atoi(value);
}
if(strcmp(key, "dimanche_fin") == 0) {
dimanche_fin = atoi(value);
}
else { // Default
Serial.print("Clef inconnu ");
Serial.println(key);
}
}
config_file.close();
Serial.println("Plages horaires memorisees sur la carte SD dans le fichier nouveau.txt");
Serial.print("Lundi : "); Serial.print(lundi_debut); Serial.print(" heure - "); Serial.println(lundi_fin); Serial.println(" heure.");
Serial.print("Mardi : "); Serial.print(mardi_debut); Serial.print(" heure - "); Serial.println(mardi_fin); Serial.println(" heure.");
Serial.print("Mercredi : "); Serial.print(mercredi_debut); Serial.print(" heure - "); Serial.println(mercredi_fin); Serial.println(" heure.");
Serial.print("Jeudi : "); Serial.print(jeudi_debut); Serial.print(" heure - "); Serial.println(jeudi_fin); Serial.println(" heure.");
Serial.print("Vendredi : "); Serial.print(vendredi_debut); Serial.print(" heure - "); Serial.println(vendredi_fin); Serial.println(" heure.");
Serial.print("Samedi : "); Serial.print(samedi_debut); Serial.print(" heure - "); Serial.println(samedi_fin); Serial.println(" heure.");
Serial.print("Dimanche : "); Serial.print(dimanche_debut); Serial.print(" heure - "); Serial.println(dimanche_fin); Serial.println(" heure.");
switch (jour) {
case 2: //nous sommes lundi
Serial.print("Bonjour nous sommes Lundi.");Serial.print(" Il est "); Serial.print(heure); Serial.print(" heure. ");
if(heure>lundi_debut && heure<lundi_fin) {
digitalWrite(relais,HIGH);
Serial.println("La box est sous tension");
}
else {
Serial.println("La box est hors tension");
digitalWrite(relais,LOW);
}
break;
case 3: //nous sommes mardi
Serial.print("Bonjour nous sommes Mardi. "); Serial.print(" Il est "); Serial.print(heure); Serial.print(" heure. ");
if(heure>mardi_debut && heure<mardi_fin) {
digitalWrite(relais,HIGH);
Serial.println("La box est sous tension");
}
else {
Serial.println("La box est hors tension");
digitalWrite(relais,LOW);
}
break;
etc
}
}
/* loop() */
void loop() {
}
Voila ce que j'ai pu faire pour le moment mais je ne suis pas sur que cela répondre vraiment à mon problème.
Merci de ta réponse 68tjs, je sais déjà faire une grande partie, là je finis de mettre les else if, etc, mais mon problème est d'intégrer la batterie, switcher avec l'alim pour que la batterie prenne la relève et que la batterie se recharge un certain temps quand l'alim' s'active.
J'ai déjà tout le matériel, le tout est de comprendre comment le programmer dans les détails. 