A ver como funciona esto, sin tantas variables auxiliares aux que no tienen sentido.
#include <SD.h>
File logFile1;
int analogPin= A0;
float Vout=0;
int raw= 0;
unsigned long myTime;
unsigned long delta=0;
unsigned long anterior =0;
int i = 0;
String a ="Boton";
String b = String(i);
String c = ".TXT";
String nombre = a+b+c;
const int LED =3;
const int BOTON = 2;
int val = 0; //val se emplea para almacenar el estado del boton
int state = 0; // 0 LED apagado, mientras que 1 encendido
int old_val = 0; // almacena el antiguo valor de val
void setup() {
Serial.begin(115200);
pinMode(LED,OUTPUT); // establecer que el pin digital es una señal de salida
pinMode(BOTON,INPUT_PULLUP); // y BOTON como señal de entrada
}
void loop() {
//abrir();
//programa();
//cerrar();
Serial.println("1");
val= digitalRead(BOTON); // lee el estado del Boton
if ((val == HIGH) && (old_val == LOW)) {
state = 1-state;
if (state) {
abrir();
tiempo_0 = micros();
}
else {
cerrar();
digitalWrite(LED,LOW); // apagar el LED
Serial.println("3");
}
}
old_val = val; // valor del antiguo estado
if (state == 1) {
programa();
digitalWrite(LED, HIGH); // enciende el LED
Serial.println("2");
}
}
String nombre1() {
if(SD.exists(nombre) == 1) {
Serial.println("Nombre ocupado");
i++;
b = String(i);
nombre=a+b+c;
}
return nombre;
}
void programa() {
myTime = micros() - tiempo_0;
delta = myTime-anterior;
// Serial.println(delta);
raw= analogRead(analogPin);
Vout= (raw * 5)/1024.0;
// Serial.println(Vout);
if (logFile1) {
logFile1.print(myTime);
logFile1.print(";");
logFile1.println(Vout);
}
else {
Serial.println("Error al abrir el archivo 2");
}
anterior=myTime;
}
void cerrar() {
logFile1.close();
Serial.println(F("Cerrando SD"));
}
void abrir() {
Serial.print(F("Iniciando SD ..."));
if (!SD.begin(9)) {
Serial.println(F("Error al iniciar"));
return;
}
while(SD.exists(nombre) == 1) {
nombre=nombre1();
}
Serial.println(F("Iniciado correctamente"));
logFile1 = SD.open(nombre, FILE_WRITE);
}
No le he prestado atención a tus impresiones "1", "2", "3"