It not working
#include <string.h>
#include <Wire.h>
#include <virtuabotixRTC.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#include <SPI.h>
#include <SD.h>
#define SSpin 10
File archivo;
virtuabotixRTC myRTC(6, 7, 8);
char fechastr[50];
const int buttonPin = 2; // the number of the pushbutton pin (Interrupcion del reed switch)
const int ledPin = 13; // the number of the LED pin
volatile int counter=0;
//////////////////////////////// SETUP ////////////////////////////////
void setup () {
pinMode(buttonPin, INPUT); // Ajusta buttonPin (pin 2) como una entrada.
attachInterrupt(digitalPinToInterrupt(buttonPin), countersub, FALLING);
Serial.begin(9600);
myRTC.setDS1302Time(00, 45, 15, 7, 9, 2, 2019);
if (!SD.begin(SSpin)) {
Serial.println("fallo en inicializacion !");
while(1);
}
Serial.println("inicializacion correcta");
lcd.init(); // Inicio del LCD (creacion del objeto)
lcd.backlight(); // Enciende la luz de fondo del LCD.
lcd.clear(); // Limpia el LCD.
}
// Rutina de la interrupcion que se ejecuta cuando la cuchara cambia de posicion.
void countersub(){
counter++; // Variable que acumula los cambios de la cuchara.
Serial.print(counter); // Escribe en el serial el valor de conteo para verificar que solo se haga una vez. (En version final se puede eliminar esto)
Serial.print("-"); //Escribe un guion para separar los conteos.
}
////////////////////////////////////// LOOP ////////////////////////////////////
void loop (){
myRTC.updateTime();
// Se imprime el resultado en el Monitor Serial
Serial.print("Fecha y hora actual: ");
Serial.print(myRTC.dayofmonth); // Se puede cambiar entre día y mes si se utiliza el sistema Americano
Serial.print("/");
Serial.print(myRTC.month);
Serial.print("/");
Serial.print(myRTC.year);
Serial.print(" ");
Serial.print(myRTC.hours);
Serial.print(":");
Serial.print(myRTC.minutes);
Serial.print(":");
Serial.println(myRTC.seconds);
// Un pequeño delay para no repetir y leer más facil
delay(1000);
if (myRTC.seconds()%30==0){ // Verifica que cuando los segundos sean 0 o 30 se escriba a la memoria SD
archivo = SD.open("DATOS.txt", FILE_WRITE); // apertura para lectura/escritura de archivo DATOS.TXT.
if (archivo) {
sprintf(fechastr,"%d/%d/%d - %2d:%2d:%2d , %d\n",myRTC.dayofmonth(),myRTC.month(),myRTC.year(),myRTC.hours(),myRTC.minutes(),myRTC.seconds(),counter); // crea un mensaje FECHA - HORA - CONTEOS (string)
archivo.print(fechastr); // escritura de una linea de texto en archivo
Serial.println();
Serial.print(fechastr); // texto en monitor serie
archivo.close(); // cierre del archivo
//Serial.println("escritura correcta"); // texto de escritura correcta en monitor serie
counter=0; // Reinicializa el contador.
delay(1000); // Espera un segundo para no escribir mas veces en la SD.
lcd.clear(); // Borra los datos en la LCD.
} else { // En caso de no poder abrir el archivo.
Serial.println("error en apertura de prueba.txt"); // texto de falla en apertura de archivo
delay(1000);
}
}
if (fecha.second()%5==0){ // Verifica que cada 5 segundos se haga la actualizacion de datos en el LCD.
lcd.setCursor(0,0); // Escribe la fecha en la linea 0 del LCD.
lcd.print("D:");
lcd.print(fecha.year(), DEC);
lcd.print("/");
lcd.print(fecha.month(), DEC);
lcd.print("/");
lcd.print(fecha.day(), DEC);
lcd.print(" C:"); // Escribe el valor de conteo actual en el LCD.
lcd.print(counter, DEC);
lcd.setCursor(0,1); // Escribe la hora en la linea 1 del LCD.
lcd.print("T: ");
lcd.print(fecha.hour(), DEC);
lcd.print(":");
lcd.print(fecha.minute(), DEC);
lcd.print(":");
lcd.print(fecha.second(), DEC);
}
delay(0); // La informaci¢n se actualiza cada 1 seg.
}