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.