Tienes que contarnos, con lujo de detalle, cuál es el propósito de estos algoritmos. El uso intensivo del objeto String no se recomienda por cuestiones de fiabilidad.
Aquí te dejo una versión más confiable y menos "hambrienta de memoria" del método reconocerMediciones:
void reconocerMediciones(boolean asignarNombre) { // El parámetro requerido no se usa
contador_mediciones = 0;
File root = SD.open("/");
if (!root) return;
File archivo;
while ((archivo = root.openNextFile())) {
const char* nombre = archivo.name();
Serial.println(nombre);
if (!archivo.isDirectory() && strstr(nombre, ".TXT")) {
//medicionesSD[contador_mediciones] = nombre; // Sin el objeto String, esto habría que hacerlo diferente
contador_mediciones++;
}
archivo.close();
}
root.close();
}
PD: si la intención de este último es para almacenar una lista de nombres de archivo, puede que prefieras almacenarla en uno; la memoria RAM es muy escasa como para almacenar una lista grande...