My_Eeprom.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #include "My_Eeprom.h"
  2. #include <EEPROM.h>
  3. #include <Arduino.h>
  4. #include <DS3231.h>
  5. #include <Wire.h>
  6. DS3231 clock;
  7. //Ecrit le nombre de bit dans l'EEPROM a la suite de la derniere ecriture (Si l'EEPROM est plein n'ecrit pas return -1)
  8. int Write_EEPROM(uint8_t *tab, int nb) {
  9. int add = EEPROM.read(0) << 8;
  10. add = EEPROM.read(1);
  11. if ((add + nb) > MAXEEPROM)
  12. return -1;
  13. for (int i = 0; i < nb; i++) {
  14. EEPROM.update(add +2+ i, tab[i]);
  15. }
  16. add+=nb;
  17. EEPROM.update(0,add>>8);
  18. EEPROM.update(1,add);
  19. return 0;
  20. }
  21. //remet a 0 le pointeur d'ecriture
  22. int erase() {
  23. EEPROM.update(0, 0);
  24. EEPROM.update(1, 0);
  25. }
  26. bool h12Flag;
  27. bool pmFlag;
  28. //renvoit la date au format 16 bit
  29. void date(uint8_t *date) {
  30. unsigned int jour = clock.getDate();
  31. unsigned int heure = clock.getHour(h12Flag,pmFlag);
  32. unsigned int mine = clock.getMinute();
  33. unsigned int tmp = (jour << 12) + (heure * 60 + mine);
  34. date[0] = tmp >> 8;
  35. date[1] = tmp;
  36. }
  37. //decode la date
  38. void readdate(uint16_t date, uint8_t* jour, uint8_t* heure, uint8_t* mine) {
  39. *jour = (uint8_t)(date >> 12);
  40. int tmp = (date & 0x5FFF);
  41. int tm = tmp % 60;
  42. int th = (tmp-tm)/60;
  43. *heure = (uint8_t)th;
  44. *mine = (uint8_t)tm;
  45. }
  46. //Affiche le contenue de l'EEPROM de facon claire
  47. void AfficheEEprom() {
  48. int add = EEPROM.read(0) << 8;
  49. add = EEPROM.read(1);
  50. Serial.println("/***********DEBUT***********/");
  51. uint8_t jour, heure, mine;
  52. uint16_t date;
  53. uint8_t code;
  54. for ( int i = 2 ; i < add ; i+=3) {
  55. date = EEPROM.read(i) << 8;
  56. date += EEPROM.read(i + 1) ;
  57. readdate(date, &jour, &heure, &mine);
  58. Serial.print("J : ");
  59. Serial.print(jour);
  60. Serial.print(" ");
  61. Serial.print(heure);
  62. Serial.print("H");
  63. Serial.print(mine);
  64. switch (EEPROM.read(i+2)) {
  65. case (ECUON):
  66. Serial.println(" Ecumeur ON");
  67. break;
  68. case (ECUOF):
  69. Serial.println(" Ecumeur OFF");
  70. break;
  71. case (BR1ON):
  72. Serial.println(" BRASSAGE1 ON");
  73. break;
  74. case (BR1OF):
  75. Serial.println(" BRASSAGE1 OFF");
  76. break;
  77. case (BR2ON):
  78. Serial.println(" BRASSAGE2 ON");
  79. break;
  80. case (BR2OF):
  81. Serial.println(" BRASSAGE2 OFF");
  82. break;
  83. case (REMON):
  84. Serial.println(" REMONTER ON");
  85. break;
  86. case (REMOF):
  87. Serial.println(" REMONTER OFF");
  88. break;
  89. case (OSMON):
  90. Serial.println(" OSMOLATION ON");
  91. break;
  92. case (OSMOF):
  93. Serial.println(" OSMOLATION OFF");
  94. break;
  95. case (CHAON):
  96. Serial.println(" CHAUFFAGE ON");
  97. break;
  98. case (CHAOF):
  99. Serial.println(" CHAUFFAGE OFF");
  100. break;
  101. case (TEBON):
  102. Serial.println(" TECH BAS ON");
  103. break;
  104. case (TEBOF):
  105. Serial.println(" TECH BAS OFF");
  106. break;
  107. case (TEHON):
  108. Serial.println(" TECH HAUT ON");
  109. break;
  110. case (TEHOF):
  111. Serial.println(" TECH HAUT OFF");
  112. break;
  113. case (REBON):
  114. Serial.println(" RESERVE BAS ON");
  115. break;
  116. case (REBOF):
  117. Serial.println(" RESERVE BAS OFF");
  118. break;
  119. case (CUHON):
  120. Serial.println(" CUVE HAUT ON");
  121. break;
  122. case (CUHOF):
  123. Serial.println(" CUVE HAUT OFF");
  124. break;
  125. case (LUMON):
  126. Serial.println(" LUMIERE ON");
  127. break;
  128. case (LUMOF):
  129. Serial.println(" LUMIERE OFF");
  130. break;
  131. }
  132. }
  133. Serial.println("/************FIN************/");
  134. }
  135. //Affiche un instantané des sortie
  136. void instantane(){
  137. }
  138. //Enregistre dans l'Eeprom l'evenement en ecrivant la date + le numero de l'evenement
  139. void Enregistre(uint8_t even) {
  140. uint8_t data[3];
  141. date(data);
  142. data[2] = even;
  143. Write_EEPROM(data, 3);
  144. }