Oui j'ai bien réecris sur une feuille les différentes étapes pour que ce soit clair.
J'ai remplacé par mes fonctions surtout le branchement des leds que je fais avec une tinkerkit.
Sa marche correctement(enfin presque) sauf qu'il ne compte plus le temps, les temps t1 et t2 sont les mèmes et la "fin d'enregistrement s'affiche" alors que je n'ai même pas appuyer une seconde fois sur le bouton.
//#include "RTClib.h"
#include "EEPROMAnything.h"
#include <EEPROM.h>
#include <TinkerKit.h>
#include <Wire.h>
#include "DS1307.h"
double SEC;
const int buttonPin = A2;
int buttonState = 0;
double result1;
double result2;
int comptage=0;
unsigned int resultfinal;
byte valuefinal;
int affichfinal;
const int adresse_epromfinal= 0;
#define adr_eprom_test 200 // For the test for 1st time init of the Arduino (First power on)
#define adresse_eeprom_compteur 0
boolean buse_changee = true; // buse changée? pour le premier lancement on considerera que la buse est neuve
double current_sec = 0;
double starting_sec = 0;
double final_sec = 0;
double current_delta_sec = 0;
int test;
double final_delta_sec; // !!! ATTENTION: NE PAS INITIALISER CETTE VARIABLE A 0 SINON LE TEMPS D'UTILISATION DE LA BUSE SERA REINITIALISE A CHAQUE REDEMARRAGE DE LA CARTE !!!
// for refresh time
const unsigned long DISPLAY_INTERVAL = 5000; // in ms
static unsigned long lastTime=0; // in ms
unsigned long time=millis(); // in ms
//#define BOUTON_ENREGISTREMENT 3 // bouton poussoir pour démarrer et arreter l'enregistrement
//#define BOUTON_CHANGER_BUSE 4 // bouton poussoir pour dire qu'on a changé la buse (sinon la led reste allumée) et on n'enregistre rien
//#define LED_ENREGISTREMENT 12 // led qui s'allume dès qu'on enregistre et s'éteint quand on enregistre pas
//#define LED_CHANGER_BUSE 13 // led qui s'allume dès qu'on doit changer la buse
const int BOUTON_ENREGISTREMENT = A3;
const int BOUTON_CHANGER_BUSE = A4;
const int LED_ENREGISTREMENT = 1;
const int LED_CHANGER_BUSE = 03;
DS1307 clock;//define a object of DS1307 class
void setup()
{
Serial.begin(9600);
clock.begin();
clock.fillByYMD(2014,3,27);// 06 Fevrier,2014
clock.fillByHMS(17,50,30);//13:53 30"
clock.fillDayOfWeek(THU);//Jeudi
clock.setTime();//write time to the RTC chip
pinMode(BOUTON_ENREGISTREMENT,INPUT);
pinMode(BOUTON_CHANGER_BUSE,INPUT);
pinMode(LED_ENREGISTREMENT,OUTPUT);
pinMode(LED_CHANGER_BUSE,OUTPUT);
EEPROM_readAnything(adr_eprom_test, test);
if (test != 12345)
{
EEPROM_writeAnything(adr_eprom_test,12345); // marqueur pour dire qu'on a déjà initialisé
delay(5); // ça prends 3,3 ms d'écrire dans l'eeprom donc on attend 5ms pour etre sur d'avoir les valeurs
EEPROM_writeAnything(adresse_eeprom_compteur, 0); // met à 0 la variable d'utilisation du stylo pour la 1ere utilisation
delay(5); // ça prends 3,3 ms d'écrire dans l'eeprom donc on attend 5ms pour etre sur d'avoir les valeurs
Serial.print("Premiere init OK! test=");
Serial.println(test);
Serial.print("temps d'utilisation du stylo precedemment enregistre:");
EEPROM_readAnything(adresse_eeprom_compteur, final_delta_sec);
delay(5);
Serial.println(final_delta_sec);
}
else
{
// si on a deja init. alors
// Lit les valeurs sauvées en EEPROM
EEPROM_readAnything(adresse_eeprom_compteur, final_delta_sec);
delay(5);
Serial.print("temps d'utilisation precedemment enregistre:");
Serial.println(final_delta_sec);
delay(1000);
}
}
void loop()
{
// affiche l'heure toute les 5 sec
time=millis();
if (time-lastTime>DISPLAY_INTERVAL) // if at least DISPLAY_INTERVAL ms have passed
{
printTime();
lastTime=time; // reset timer
}
// DEBUT ENREGISTREMENT
// détecte appui sur bouton d'enregistrement et commence le décompte
if (digitalRead(BOUTON_ENREGISTREMENT)==LOW && buse_changee == true)
// Mon bouton est a l'etat bas quand j'appuie et quand j'appuie pas il est a l'etat haut
// il faudra adapter le test a l'etat du bonton en question
// ATTENTION: on ne peut pas rentrer dans cette partie si la buse n'a pas ete changee
// c'est à dire si la variable buse_changee est à l'état 'FALSE' !!
{
delay(300); // délai anti rebond pour éviter de rentrer plusieur fois dans la boucle
current_sec=((clock.hour)*36E2)+((clock.minute)*60)+ (clock.second);
Serial.print("temps courant:");
Serial.println(current_sec);
comptage++; // 1st give starting, 2nd give final
if (comptage==1) // 1st give starting
{
starting_sec = current_sec;
Serial.print("debut de l'enregistrement a t1=");
Serial.println(starting_sec);
digitalWrite(LED_ENREGISTREMENT,HIGH); // on passe en mode enregistrement
delay(1000);
}
if (comptage==2) // 2nd give final status and storage
{
// 1/4
// calcul de la fin du comptage
final_sec = current_sec;
Serial.print("fin de l'enregistrement a t2=");
Serial.println(final_sec);
current_delta_sec=(final_sec-starting_sec);
Serial.print("delta temps t2-t1=");
Serial.println(current_delta_sec);
delay(1000);
// 2/4
// stockage de la fin dans l'eeprom
backup_eeprom();
// 3/4
// réinitialisation du bouton
comptage=0; // reset comptage
Serial.print("temps total d'utilisation du stylo:");
Serial.println(final_delta_sec);
// 4/4
// On éteint la led pour dire qu'on a fini d'enregistrer
digitalWrite(LED_ENREGISTREMENT,LOW);
// et du coup on repasse en mode écoute en sortant du if
}
}// FIN ENREGISTREMENT
// DEBUT CHANGEMENT BUSE
// Détecte si appui sur le bouton de changement de buse
if (digitalRead(BOUTON_CHANGER_BUSE)==LOW && buse_changee == false)
{
delay(300); // délai anti rebond pour éviter de rentrer plusieur fois dans la boucle
// si appui sur le bouton alors
// on met l'état de changement de buse à l'état VRAI
buse_changee = true;
// on réinitialise la variable à 0
final_delta_sec = 0;
EEPROM_writeAnything(adresse_eeprom_compteur, final_delta_sec);
delay(5); //
// et on éteint la led de suivi pour dire qu'on a changé la buse
digitalWrite(LED_CHANGER_BUSE,LOW);
Serial.println("BUSE CHANGEE!");
Serial.print("temps d'utilisation réinitialisé à :");
Serial.println(final_delta_sec);
}// FIN CHANGEMENT BUSE
}
// print time DS1307
void printTime()
{
Serial.print(clock.hour, DEC);
Serial.print(':');
Serial.print(clock.minute, DEC);
Serial.print(':');
Serial.print(clock.second, DEC);
Serial.println();
}
void backup_eeprom()
{
final_delta_sec = current_delta_sec + final_delta_sec; // on calcule le delta final en ajoutant à l'ancienne valeur la valeur courante
if (final_delta_sec < 3600000) // Si delta secondes final est inférieur à la durée d'utilisation de la buse
{
// alors on enregistre en memoire la duree d'utilisation du stylo
EEPROM_writeAnything(adresse_eeprom_compteur, final_delta_sec);
delay(5); // ça prends 3,3 ms d'écrire dans l'eeprom donc on attend 5ms pour etre sur d'avoir les valeurs
}
else // sinon
{
// on allume la led de suivi pour dire qu'on doit changer la buse
digitalWrite(LED_CHANGER_BUSE,HIGH);
Serial.println("BUSE A CHANGER!");
// on met l'état de la variable de changement de buse à FALSE
// qui ne changera pas tant qu'on aura pas appuyé sur le bouton "buse changée"
buse_changee = false;
}
}
Si j'enlève mes delay tout s'affiche à la suite... c'est trop rapide.
Voila ce que ça m'affiche :