Hola comunidad , 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?
Agradecería quien me pueda ayudar con este problema