Problema escribiendo datos de reloj RTC en memoria microSD

Hola, soy nuevo en el foro así que pido disculpas desde ya si es que no sigo las reglas de manera correcta. Estoy trabajando en un proyecto con arduino UNO que busca registrar en una memoria microSD, la hora en que un usuario acerca la huella dactilar a un lector dactilar. El problema es que no puedo encontrar la manera de escribir los datos en la memoria microSD. Al momento de acercar la huella, la reconoce, imprime en el monitor serial el nombre del usuario y abre el documento .txt pero no escribe nada en la memoria. Por favor alguien que pueda revisar el código y me pueda echar una ayudita. El código se ve un poco largo pero en resumen lo que se hace es reconocer primero los tres módulos (reloj RTC DS3231, lector microSD v1.0 de catalex y fingerprint), luego se corre el codigo fingerprint de adafruit para reconocer las huellas y dentro de éste, le agregué un if para al momento de reconocer una huella se escriba la hora dada por el reloj en la memoria microSD. La función printDate es para el reloj RTC y cumple la función de crear un dato DateTime que entrega la fecha y hora en el momento.

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#include "RTClib.h"
#include <SD.h>

RTC_DS3231 rtc;
File archivo2;

int getFingerprintIDez();
String daysOfTheWeek[7] = { "Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado" };
String monthsNames[12] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo",  "Junio", "Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre" };

SoftwareSerial Huellas(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Huellas);

void setup()  
{
  Serial.begin(9600);
  pinMode(7, OUTPUT);
    if (!rtc.begin()) {
      Serial.println(F("Couldn't find RTC"));
      while (1);
   }
   Serial.println("RELOJ RTC iniciado correctamente");
Serial.println(F("Iniciando SD ..."));
  if (!SD.begin(9))
  {
    Serial.println(F("Error al iniciar"));
    return;
  }
  Serial.println("SD iniciada correctamente");
  //archivo2 = SD.open("datos3.txt",FILE_WRITE);
   
  Serial.println("Buscando sensor...");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  
  if (finger.verifyPassword()) {
    Serial.println("Sensor de huellas dactilares encontrado!");
  } else {
    Serial.println("Sensor no encontrado");
    while (1);
  }
  Serial.println("Esperando por un dedo valido...");
}

void loop()                    
{ 
  getFingerprintIDez();
  delay(50);            //no se necesita a toda velocidad
}

void printDate(DateTime date)
{
   archivo2.print(date.year(), DEC);
   archivo2.print('/');
   archivo2.print(date.month(), DEC);
   archivo2.print('/');
   archivo2.print(date.day(), DEC);
   archivo2.print(" (");
   archivo2.print(daysOfTheWeek[date.dayOfTheWeek()]);
   archivo2.print(") ");
   archivo2.print(date.hour(), DEC);
   archivo2.print(':');
   archivo2.print(date.minute(), DEC);
   archivo2.print(':');
   archivo2.print(date.second(), DEC);
   archivo2.println();
}

uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Imagen tomada");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("No se detecta dedo");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Error de comunicacion");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Error en generacion de imagen");
      return p;
    default:
      Serial.println("Error desconocido");
      return p;
  }

  // OK logrado!

  p = finger.image2Tz();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Imagen convertida");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Imagen demasiado borrosa");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Error de comunicacion");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("No se pudieron encontrar las caracteristicas de huella");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("No se pudieron encontrar las caracteristicas de huella");
      return p;
    default:
      Serial.println("Error desconocido");
      return p;
  }
  
  // OK convertido!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Coincidencia encontrada");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Error de comunicacion");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("No se encuentra coincidencia");
    return p;
  } else {
    Serial.println("Error desconocido");
    return p;
  }     
  // coincidencia encontrada!
  Serial.print("Encontrado! ID #"); Serial.println(finger.fingerID); 
  //Serial.print(" with confidence of "); Serial.println(finger.confidence); 

}

// devuelve -1 si falla, de lo contrario devuelve ID #
int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -1;
  
  // coincidencia encontrada!
  Serial.print("Econtrado! ID #"); Serial.println(finger.fingerID); 
  //Serial.print(" with confidence of "); Serial.println(finger.confidence);
  if (finger.fingerID == 2){
  //Serial.println("Bienvenido Felipe!");
//  digitalWrite(7,HIGH);
//  delay(3000);
//  digitalWrite(7,LOW);  
   archivo2 = SD.open("datos.txt", FILE_WRITE);
      if(archivo2){ 
          DateTime now = rtc.now();
          printDate(now);
          archivo2.print("Nombre de usuario");
          archivo2.close();
          }
 }
//else{
//  Serial.println("archivo no disponible");
//}
  
  return finger.fingerID; 
}

¿Tarjeta inicia? ¿Realmente se abre el archivo? ¿Cómo están las conexiones?

Respondiendo esas tres preguntas quizás resuelvas el problema.

Muchas gracias por responder. Sí, los tres sensores inician correctamente. La verdad creo que se abre el archivo porque la memoria está en blanco y cuando hago pruebas, la veo en el pc y el archivo .txt está creado pero en blanco. Las conexiones están correctas porque tengo el siguiente código que si me escribe los datos del reloj en la memoria.

#include <SD.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#include "RTClib.h"

File archivo;
RTC_DS3231 rtc;

String daysOfTheWeek[7] = { "Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado" };
String monthsNames[12] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo",  "Junio", "Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre" };


void setup(){
  Serial.begin(9600);
  Serial.println("Comenzando la comunicacion");
  delay(2000);
  //pinMode(10,OUTPUT);
  if (!SD.begin(9)){
    Serial.println(" Se produjo un error en el inicio");
    return;
  }
  Serial.println("Lector microSD iniciado correctamente");

  if (!rtc.begin()) {
      Serial.println(F("Couldn't find RTC"));
      while (1);
   }

 

  
}
void printDate(DateTime date)
{
   archivo.print(date.year(), DEC);
   archivo.print('/');
   archivo.print(date.month(), DEC);
   archivo.print('/');
   archivo.print(date.day(), DEC);
   archivo.print(" (");
   archivo.print(daysOfTheWeek[date.dayOfTheWeek()]);
   archivo.print(") ");
   archivo.print(date.hour(), DEC);
   archivo.print(':');
   archivo.print(date.minute(), DEC);
   archivo.print(':');
   archivo.print(date.second(), DEC);
   archivo.println();
}

void loop()
{ archivo = SD.open("datos4.txt", FILE_WRITE);

  if (archivo){
    //archivo.println("info de prueba");
   DateTime now = rtc.now();
    printDate(now);
    archivo.close();
    
  }
  

  else{
    Serial.println("el archivo no se pudo abrir");
  }  

  archivo=SD.open("datos4.txt");

  if(archivo){
    Serial.println("Info contenida en datos.txt:");

    while(archivo.available()){
      Serial.write(archivo.read());
    }
    archivo.close();
  }
  //else{
    //Serial.println("el archivo no se pudo abrir");
  //}
  delay(5000);
}

El problema está en el momento de reconocer la huella, dentro del "if (finger.fingerID == 2){", ya que luego de eso si me escribe en el monitor serial el mensaje y prende y apaga luego de tres segundos un led ( lo que está comentado) pero luego de eso no hace nada.