Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h> // Include Wire library
- #include <LiquidCrystal_I2C.h> // Include I2C library
- #include "RTClib.h"
- #include <SPI.h> // Include SPI library
- #include <SD.h> // Include SD library
- RTC_DS1307 rtc;
- File dataFile;
- uint16_t line = 1;
- #define KeyOk 8
- #define r 6 // Colore Rosso LED RGB
- #define g 5 // Colore Verde LED RGB
- #define b 3 // Colore Blu LED RGB
- char stringa1[8]; // per memorizzare la stringa che include la data (dimensione massima data: 8 caratteri)
- char stringa2[6]; // per memorizzare la stringa che include l'ora (dimensione massima ora: 6 caratteri)
- char stringa3[2]; // per memorizzare la stringa che calcola l'orario fine giornata lavorativa: 2 caratteri
- int str3; // variabile convertira dal char stringa3
- int chiaveCancella = 0; // Variabile per la verifica della cancellazione del display
- int Key; // Stato della chiave se inserita oppure no
- // Array multidimensionale costituito
- // da 7 righe (giorni della settimana)
- // 4 colonne (le lettere che compongono il giorno più il carattere null con cui deve terminare una stringa)
- char giornoDellaSettimana[7][4] = {"Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"};
- String giorno;
- // Inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin dell'LCD,
- // impostazione dell'indirizzo dell'LCD 0x27 di 16 colonne e 2 linee
- LiquidCrystal_I2C lcd(0x27, 16, 2);
- void setup () {
- Serial.begin(9600);
- pinMode(KeyOk, INPUT);
- pinMode(r, OUTPUT);
- pinMode(g, OUTPUT);
- pinMode(b, OUTPUT);
- analogWrite(r,255);
- analogWrite(g,0);
- analogWrite(b,0);
- while (!Serial); // attendere la connessione della porta seriale. Necessario solo per la porta USB nativa
- Serial.println("Inizializza la SD card...");
- if (!SD.begin()) {
- Serial.println("inizializzazione fallita!");
- while (1);
- }
- Serial.println("inizializzazione ok.");
- delay(2000);
- lcd.init(); // inizializzazione dell'LCD
- lcd.backlight(); // attivazione della retroilluminazione
- if (!rtc.isrunning()) {
- lcd.setCursor(0, 0);
- lcd.print("RTC non funzionante!");
- // la riga che segue permette di impostare data e ora prendendo l'informazione
- // dal computer a cui è collegato Arduino
- rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
- }
- }
- void loop () {
- DateTime now = rtc.now();
- sprintf(stringa3, "%02d", now.second());
- str3 = atoi(stringa3); // converte char in int
- if (str3 > 25 ) { // dopo le ore otto riperta il controllo tesserino alla nuova timbratura
- analogWrite(r, 255); // impostando il LED RGB su rosso e in attesa di timbratura la giorno
- analogWrite(g, 0); // lavorativo nuovo
- analogWrite(b, 0);
- }
- dataFile = SD.open("Presenze.txt", FILE_WRITE); // pronto per scrivere i dati timbratura sul file Presenze.
- if (!rtc.isrunning()) {
- lcd.setCursor(0, 0);
- lcd.print("RTC non risponde");
- lcd.setCursor(0, 1);
- lcd.print(" ");
- chiaveCancella = 1;
- }
- else
- {
- if (chiaveCancella == 1 ) {
- lcd.clear();
- chiaveCancella = 0;
- }
- DateTime now = rtc.now();
- lcd.setCursor(0, 0);
- // estrae dall'array giornoDellaSettimana il nome del giorno
- lcd.print(giornoDellaSettimana[now.dayOfTheWeek()]);
- lcd.setCursor(5, 0);
- if (now.dayOfTheWeek() == 0) {
- giorno = "Domenica";
- } else if (now.dayOfTheWeek() == 1) {
- giorno = "Lunedi";
- } else if (now.dayOfTheWeek() == 2) {
- giorno = "Martedi";
- } else if (now.dayOfTheWeek() == 3) {
- giorno = "Mercoledi";
- } else if (now.dayOfTheWeek() == 4) {
- giorno = "Giovedi";
- } else if (now.dayOfTheWeek() == 5) {
- giorno = "Venerdi";
- } else if (now.dayOfTheWeek() == 6) {
- giorno = "Sabato";
- }
- Serial.print("Giorno :"); Serial.println(giorno);
- sprintf(stringa1, "%2d/%02d/%d", now.day(), now.month(), now.year());
- lcd.print(stringa1);
- Serial.print("Data :"); Serial.println(stringa1);
- lcd.setCursor(0, 1);
- sprintf(stringa2, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
- lcd.print(stringa2);
- Serial.print("Ore :"); Serial.println(stringa2);
- delay(1000);
- }
- sprintf(stringa3, "%02d", now.second());
- str3 = atoi(stringa3); // converte char in int
- Key = digitalRead(KeyOk);
- if ( Key == HIGH && str3 < 25) {
- KeyData();
- }
- }
- void KeyData() {
- Serial.println("SEI IN KEYDATA");
- if (chiaveCancella == 1 ) {
- lcd.clear();
- chiaveCancella = 0;
- }
- DateTime now = rtc.now();
- lcd.setCursor(0, 0);
- // estrae dall'array giornoDellaSettimana il nome del giorno
- lcd.print(giornoDellaSettimana[now.dayOfTheWeek()]);
- lcd.setCursor(5, 0);
- if (now.dayOfTheWeek() == 0) {
- giorno = "Domenica";
- } else if (now.dayOfTheWeek() == 1) {
- giorno = "Lunedi";
- } else if (now.dayOfTheWeek() == 2) {
- giorno = "Martedi";
- } else if (now.dayOfTheWeek() == 3) {
- giorno = "Mercoledi";
- } else if (now.dayOfTheWeek() == 4) {
- giorno = "Giovedi";
- } else if (now.dayOfTheWeek() == 5) {
- giorno = "Venerdi";
- } else if (now.dayOfTheWeek() == 6) {
- giorno = "Sabato";
- }
- dataFile.print("Giorno : ");
- dataFile.print(giorno);
- Serial.print("Giorno :"); Serial.println(giorno);
- sprintf(stringa1, "%2d/%02d/%d", now.day(), now.month(), now.year());
- lcd.print(stringa1);
- dataFile.print(" Data = ");
- dataFile.print(stringa1);
- Serial.print("Data :"); Serial.println(stringa1);
- lcd.setCursor(0, 1);
- sprintf(stringa2, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
- lcd.print(stringa2);
- dataFile.print(" Ora = ");
- dataFile.println(stringa2);
- dataFile.println("timbratura OK");
- dataFile.close();
- Serial.print("Ore :"); Serial.println(stringa2);
- analogWrite(r, 0);
- analogWrite(g, 255);
- analogWrite(b, 0);
- delay(1000);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement