Problema con SerialPrint

Hola comunidad :smiley: , tengo un gran problema con un código, les comento, tengo 4 módulos, un divisor de tensión para medir voltaje, un modulo para medir corriente en dc, una pinza amperimétrica para ac y un modulo ethernet w5100, dicho modulo w5100 solo lo estoy utilizando para guardar un log por medio de una microsd ya que donde está la placa de arduino, no se cuenta con internet. el código que tengo es este:

#include "EmonLib.h"
#include <Wire.h>
#include <SD.h>

File myFile;
EnergyMonitor SCT013;
int pinSCT = A2;
int tension = 110;
int potencia;
double potenciapanelfv;

float v1 = 4.98; // valor real de la alimentacion de Arduino, Vcc
float r1 = 1000000; // 1M
float r2 = 100000; // 100K
float Sensibilidad=0.066; //sensibilidad en Voltios/Amperio para sensor de 30A

void setup() {
Serial.begin(9600);
SCT013.current(pinSCT, 44.67);
Serial.print("Iniciando SD ...");
if (!SD.begin(4)) {
Serial.println("No se pudo inicializar");
return;
}
Serial.println("inicializacion exitosa");
}

void loop() {

double Irms = SCT013.calcIrms(1480);   // Calcula o valor da Corrente    
potencia = Irms * tension;          // Calcula o valor da Potencia Instantanea    
  
Serial.print("Corrente Circuito AC = ");
Serial.print(Irms);
Serial.println(" A");
Serial.print("Potencia Circuito AC = ");
Serial.print(potencia);
Serial.println(" W");
delay(1000);

float v = (analogRead(A0) * v1) / 1024.0;
float v2 = v / (r2 / (r1 + r2));

Serial.print("Voltaje Panel FV: ");
Serial.println(v2);
delay(1500);

float I=get_corriente(200);//obtenemos la corriente promedio de 500 muestras 
Serial.print("Corriente Panel FV: ");
Serial.println(I,3);
potenciapanelfv = v2* I;
Serial.print("Potencia Panel FV = ");
Serial.print(potenciapanelfv);
Serial.println(" W");
delay(2000); 

myFile = SD.open("datalog.txt", FILE_WRITE);//abrimos  el archivo
if (myFile) { 
Serial.println("Escribiendo SD: ");
int v2 = v2;
//int I=I
int potenciapanelfv = potenciapanelfv;
int Irms = Irms;
int potencia = potencia;
myFile.print("Tiempo(ms)=");
myFile.print(millis());
myFile.print(", Voltaje Panel FV=");
myFile.print(v2);
myFile.print(", Corriente Panel FV=");
//myFile.print(I);
myFile.print(", Potencia Panel FV=");
myFile.println(potenciapanelfv);
myFile.print(", Corriente Circuito AC=");
myFile.println(Irms);
myFile.print(", Potencia Circuito AC=");
myFile.println(potencia);       
myFile.close(); //cerramos el archivo               
 } else {
Serial.println("Error al abrir el archivo");
 }
delay(120000);


}
float get_corriente(int n_muestras)
{
 float voltajeSensor;
 float corriente=0;
 for(int i=0;i<n_muestras;i++)
 {
   voltajeSensor = analogRead(A1) * (5.0 / 1023.0);////lectura del sensor
   corriente=(corriente+(voltajeSensor-2.5)/Sensibilidad)+0.850; //Ecuación  para obtener la corriente
 }
 corriente=corriente/n_muestras;
 return(corriente);
}

El problema que presento es que en el monitor serial, me toca esperar los 120000milisegundos para verificar las mediciones que está tomando los módulos, ¿se podrá de alguna formar activar la función de escritura de la microsd cuando pasen los 120000milisegundos sin pausar las mediciones de los demás módulos? :disappointed_relieved:

Agradecería quien me pueda ayudar con este problema

As ever, you'll need to control your timing with millis, not delay. Take a look at the blink without delay example in the IDE to get started.

Por favor lee las normas del foro y edita tu post agregando las etiquetas para visualizar correctamente el código.
Observa que también hay restricciones con los enlaces e imágenes. Cada cosa tiene una manera de postearse.
Primer hilo de cualquier sección. Ve lee y luego edita.

Solución a tu problema, ve a Documentación => Indice de temas tutoriales => millis()

Lee como se usa millis() y aunque no es un reemplazo directo, eso te permitirá que tu código haga el loggeo en el tiempo que gustas y que mueste datos cada 1000 o 2000 mseg por ejemplo.

Cuando leas los tutoriales, coméntalo y debatimos como son los reemplazos.

Pregunta: porque el título dice Interrupciones? No tiene nada que ver el título con lo que planteas.

Muchas gracias por la información, la verdad soy nuevo y pensé que con algún tipo de interrupción podía solucionar el inconveniente que presento. leeré el contenido de su post, muchas gracias por ayudarme.

Thank you very much for the information.

Porque los delay en el loop?

Búscate un lib de timer, como el simpletimer o INTERVAL.h

Porque redeclaras
int Irms = Irms;
int potencia = potencia;
?

Interrupciones aún no vas a necesitar mucho tiempo. No es lo que piensas que sea.
El bloqueo del sketch esta debido al uso de delay.
Lo puedes solucionar cambiar la estructura de tu sketch en una máquina decestado (finite state machine), y hacer los timings con millis().

Doble post, hilo cerrado temporalmente.
Bueno esto confirma que no has leído las normas del foro y publicas acá en el foro en inglés usando español. Ten un poco mas de cuidado. Si ves que todo a tu alrededor esta en inglés como se te ocurre hacer una consulta en español? Cada idioma debe respetarse. Y no puedes abrir el mismo tema en diferentes lugares del foro.
Uno este hilo con el que sigue en Software.