Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.04 KB | None | 0 0
  1. #include <Wire.h> // Include Wire library
  2. #include <LiquidCrystal_I2C.h> // Include I2C library
  3. #include "RTClib.h"
  4. #include <SPI.h> // Include SPI library
  5. #include <SD.h> // Include SD library
  6. RTC_DS1307 rtc;
  7. File dataFile;
  8. uint16_t line = 1;
  9. #define KeyOk 8
  10. #define r 6 // Colore Rosso LED RGB
  11. #define g 5 // Colore Verde LED RGB
  12. #define b 3 // Colore Blu LED RGB
  13.  
  14. char stringa1[8]; // per memorizzare la stringa che include la data (dimensione massima data: 8 caratteri)
  15. char stringa2[6]; // per memorizzare la stringa che include l'ora (dimensione massima ora: 6 caratteri)
  16. char stringa3[2]; // per memorizzare la stringa che calcola l'orario fine giornata lavorativa: 2 caratteri
  17. int str3; // variabile convertira dal char stringa3
  18. int chiaveCancella = 0; // Variabile per la verifica della cancellazione del display
  19. int Key; // Stato della chiave se inserita oppure no
  20.  
  21. // Array multidimensionale costituito
  22. // da 7 righe (giorni della settimana)
  23. // 4 colonne (le lettere che compongono il giorno più il carattere null con cui deve terminare una stringa)
  24. char giornoDellaSettimana[7][4] = {"Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"};
  25. String giorno;
  26. // Inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin dell'LCD,
  27. // impostazione dell'indirizzo dell'LCD 0x27 di 16 colonne e 2 linee
  28. LiquidCrystal_I2C lcd(0x27, 16, 2);
  29.  
  30. void setup () {
  31. Serial.begin(9600);
  32.  
  33. pinMode(KeyOk, INPUT);
  34. pinMode(r, OUTPUT);
  35. pinMode(g, OUTPUT);
  36. pinMode(b, OUTPUT);
  37. analogWrite(r,255);
  38. analogWrite(g,0);
  39. analogWrite(b,0);
  40.  
  41. while (!Serial); // attendere la connessione della porta seriale. Necessario solo per la porta USB nativa
  42. Serial.println("Inizializza la SD card...");
  43. if (!SD.begin()) {
  44. Serial.println("inizializzazione fallita!");
  45. while (1);
  46. }
  47. Serial.println("inizializzazione ok.");
  48. delay(2000);
  49.  
  50. lcd.init(); // inizializzazione dell'LCD
  51. lcd.backlight(); // attivazione della retroilluminazione
  52.  
  53. if (!rtc.isrunning()) {
  54. lcd.setCursor(0, 0);
  55. lcd.print("RTC non funzionante!");
  56. // la riga che segue permette di impostare data e ora prendendo l'informazione
  57. // dal computer a cui è collegato Arduino
  58. rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  59. }
  60. }
  61. void loop () {
  62.  
  63. DateTime now = rtc.now();
  64. sprintf(stringa3, "%02d", now.second());
  65. str3 = atoi(stringa3); // converte char in int
  66. if (str3 > 25 ) { // dopo le ore otto riperta il controllo tesserino alla nuova timbratura
  67. analogWrite(r, 255); // impostando il LED RGB su rosso e in attesa di timbratura la giorno
  68. analogWrite(g, 0); // lavorativo nuovo
  69. analogWrite(b, 0);
  70. }
  71.  
  72. dataFile = SD.open("Presenze.txt", FILE_WRITE); // pronto per scrivere i dati timbratura sul file Presenze.
  73. if (!rtc.isrunning()) {
  74. lcd.setCursor(0, 0);
  75. lcd.print("RTC non risponde");
  76. lcd.setCursor(0, 1);
  77. lcd.print(" ");
  78. chiaveCancella = 1;
  79. }
  80. else
  81. {
  82. if (chiaveCancella == 1 ) {
  83. lcd.clear();
  84. chiaveCancella = 0;
  85. }
  86. DateTime now = rtc.now();
  87. lcd.setCursor(0, 0);
  88.  
  89. // estrae dall'array giornoDellaSettimana il nome del giorno
  90. lcd.print(giornoDellaSettimana[now.dayOfTheWeek()]);
  91. lcd.setCursor(5, 0);
  92.  
  93. if (now.dayOfTheWeek() == 0) {
  94. giorno = "Domenica";
  95. } else if (now.dayOfTheWeek() == 1) {
  96. giorno = "Lunedi";
  97. } else if (now.dayOfTheWeek() == 2) {
  98. giorno = "Martedi";
  99. } else if (now.dayOfTheWeek() == 3) {
  100. giorno = "Mercoledi";
  101. } else if (now.dayOfTheWeek() == 4) {
  102. giorno = "Giovedi";
  103. } else if (now.dayOfTheWeek() == 5) {
  104. giorno = "Venerdi";
  105. } else if (now.dayOfTheWeek() == 6) {
  106. giorno = "Sabato";
  107. }
  108. Serial.print("Giorno :"); Serial.println(giorno);
  109.  
  110. sprintf(stringa1, "%2d/%02d/%d", now.day(), now.month(), now.year());
  111. lcd.print(stringa1);
  112. Serial.print("Data :"); Serial.println(stringa1);
  113. lcd.setCursor(0, 1);
  114. sprintf(stringa2, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
  115. lcd.print(stringa2);
  116. Serial.print("Ore :"); Serial.println(stringa2);
  117. delay(1000);
  118. }
  119. sprintf(stringa3, "%02d", now.second());
  120. str3 = atoi(stringa3); // converte char in int
  121. Key = digitalRead(KeyOk);
  122. if ( Key == HIGH && str3 < 25) {
  123. KeyData();
  124. }
  125. }
  126.  
  127. void KeyData() {
  128. Serial.println("SEI IN KEYDATA");
  129. if (chiaveCancella == 1 ) {
  130. lcd.clear();
  131. chiaveCancella = 0;
  132. }
  133. DateTime now = rtc.now();
  134. lcd.setCursor(0, 0);
  135.  
  136. // estrae dall'array giornoDellaSettimana il nome del giorno
  137. lcd.print(giornoDellaSettimana[now.dayOfTheWeek()]);
  138. lcd.setCursor(5, 0);
  139.  
  140.  
  141. if (now.dayOfTheWeek() == 0) {
  142. giorno = "Domenica";
  143. } else if (now.dayOfTheWeek() == 1) {
  144. giorno = "Lunedi";
  145. } else if (now.dayOfTheWeek() == 2) {
  146. giorno = "Martedi";
  147. } else if (now.dayOfTheWeek() == 3) {
  148. giorno = "Mercoledi";
  149. } else if (now.dayOfTheWeek() == 4) {
  150. giorno = "Giovedi";
  151. } else if (now.dayOfTheWeek() == 5) {
  152. giorno = "Venerdi";
  153. } else if (now.dayOfTheWeek() == 6) {
  154. giorno = "Sabato";
  155. }
  156.  
  157. dataFile.print("Giorno : ");
  158. dataFile.print(giorno);
  159. Serial.print("Giorno :"); Serial.println(giorno);
  160. sprintf(stringa1, "%2d/%02d/%d", now.day(), now.month(), now.year());
  161. lcd.print(stringa1);
  162. dataFile.print(" Data = ");
  163. dataFile.print(stringa1);
  164. Serial.print("Data :"); Serial.println(stringa1);
  165. lcd.setCursor(0, 1);
  166. sprintf(stringa2, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
  167. lcd.print(stringa2);
  168. dataFile.print(" Ora = ");
  169. dataFile.println(stringa2);
  170. dataFile.println("timbratura OK");
  171. dataFile.close();
  172. Serial.print("Ore :"); Serial.println(stringa2);
  173. analogWrite(r, 0);
  174. analogWrite(g, 255);
  175. analogWrite(b, 0);
  176. delay(1000);
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement