I don't know .. what's wrong in this code... I have created two separate class to achieve multi processing at same time..
1st process: It has to show all the readings in the serial monitor of arduino ide in a interval of
"100"
2nd process: it should write 1 log entry in sd card in every 1 minute.. to save the space in sd card..!
but the problem is, 1st process works great.. in 2nd process, if i give 10000 millisecond - it works fine.. if i give 60000 millisec (1 min) its not at all creating even a log file.. Please help me in this regard..!
#include <stdlib.h>
#include <DS3231.h>
DS3231 rtc(SDA, SCL);
#include <SPI.h>
#include <SD.h>
#include <EasyScheduler.h>
#include <TaskScheduler.h>
const int chipSelect = 53;
const int nodeID = 0;
void t1Callback();
void t2Callback();
int sampleCount = 0;
Time t;
#define FILTERSETTLETIME 5000 // Time (ms) to allow the filters to settle before sending data
#define SERIALPRINT // include print statement for commissioning - comment this line to exclude
#define PHASE2 8 // Number of samples delay for L2
#define PHASE3 17 // Number of samples delay for L3, also size of array
// These can be adjusted if the phase correction is not adequate
//Set Voltage and current input pins
int inPinV = 0;
int inPinI1 = 1;
int inPinI2 = 2;
int inPinI3 = 3;
int inPinI4 = 4;
int inPinI5 = 5;
int inPinI6 = 1;
int inPinI7 = 2;
int inPinI8 = 3;
int inPinI9 = 4;
int inPinI10 = 5;
double Vcal = 228.289; // Calibration - constant for voltage input - for ideal power voltage adapter
double Ical1 = 134.00; // Calibration constant for current transformer 1
double Ical2 = 134.00; // Calibration constant for current transformer 2
double Ical3 = 134.00; // Calibration constant for current transformer 3
double Ical4 = 134.00; // Calibration constant for current transformer 4
double Ical5 = 134.00; // Calibration constant for current transformer 5
double Ical6 = 134.00; // Calibration constant for current transformer 1
double Ical7 = 134.00; // Calibration constant for current transformer 2
double Ical8 = 134.00; // Calibration constant for current transformer 3
double Ical9 = 134.00; // Calibration constant for current transformer 4
double Ical10 = 134.00; // Calibration constant for current transformer 5
double Phasecal1 = 1.00; // Calibration constant for phase shift L1
double Phasecal2 = 1.68; // Calibration constant for phase shift L2
double Phasecal3 = 1.00; // Calibration constant for phase shift L3
//--------------------------------------------------------------------------------------
// Variable declaration for filters, phase shift, voltages, currents & powers
//--------------------------------------------------------------------------------------
int lastSampleV,sampleV=0; //sample_ holds the raw analog read value, lastSample_ holds the last sample
int lastSampleI1,sampleI1=0;
int lastSampleI2,sampleI2=0;
int lastSampleI3,sampleI3=0;
int lastSampleI4,sampleI4=0;
int lastSampleI5,sampleI5=0;
int lastSampleI6,sampleI6=0;
int lastSampleI7,sampleI7=0;
int lastSampleI8,sampleI8=0;
int lastSampleI9,sampleI9=0;
int lastSampleI10,sampleI10=0;
double lastFilteredV,filteredV; //Filtered_ is the raw analog value minus the DC offset
double lastFilteredI1, filteredI1;
double lastFilteredI2, filteredI2;
double lastFilteredI3, filteredI3;
double lastFilteredI4, filteredI4;
double lastFilteredI5, filteredI5;
double lastFilteredI6, filteredI6;
double lastFilteredI7, filteredI7;
double lastFilteredI8, filteredI8;
double lastFilteredI9, filteredI9;
double lastFilteredI10, filteredI10;
double phaseShiftedV1; //Holds the calibrated delayed & phase shifted voltage.
double phaseShiftedV2;
double phaseShiftedV3;
double sqV,sumV,sqI1,sumI1,sqI2,sumI2,
sqI3,sumI3,sqI4,sumI4,sqI5,sumI5,
sqI6,sumI6,sqI7,sumI7,
sqI8,sumI8,sqI9,sumI9,sqI10,sumI10;
double instP1,sumP1,instP2,sumP2,instP3,sumP3,//sq = squared, sum = Sum, inst = instantaneous
instP4,sumP4,instP5,sumP5,instP6,sumP6,
instP7,sumP7,instP8,sumP8,instP9,sumP9,
instP10,sumP10;
int startV; //Instantaneous voltage at start of sample window.
double realPower1, // The final data
apparentPower1,
powerFactor1,
Irms1,
realPower2,
apparentPower2,
powerFactor2,
Irms2,
realPower3,
apparentPower3,
powerFactor3,
Irms3,
realPower4,
apparentPower4,
powerFactor4,
Irms4,
realPower5,
apparentPower5,
powerFactor5,
Irms5,
realPower6,
apparentPower6,
powerFactor6,
Irms6,
realPower7,
apparentPower7,
powerFactor7,
Irms7,
realPower8,
apparentPower8,
powerFactor8,
Irms8,
realPower9,
apparentPower9,
powerFactor9,
Irms9,
realPower10,
apparentPower10,
powerFactor10,
Irms10,
Vrms,
realPower,
Irms;
boolean settled = false;
int SupplyVoltage;
//***********************************************************************************************************
class Output
{
long OnTime; // milliseconds of on-time
long OffTime; // milliseconds of off-time
unsigned long previousMillis; // will store last time LED was updated
public:
Output(long on, long off)
{
OnTime = on;
OffTime = off;
previousMillis = 0;
}
void Update()
{
unsigned long currentMillis = millis();
if((currentMillis - previousMillis >= OnTime))
{
previousMillis = currentMillis; // Remember the time
Serial.print(rtc.getUnixTime(rtc.getTime())); Serial.print(","); Serial.print("PU1,1Ph-CT1,"); Serial.print(Vrms); Serial.print(","); Serial.print(Irms1); Serial.print(","); Serial.println(powerFactor5);
Serial.print(rtc.getUnixTime(rtc.getTime())); Serial.print(","); Serial.print("PU1,1Ph-CT2,"); Serial.print(Vrms); Serial.print(","); Serial.print(Irms2); Serial.print(","); Serial.println(powerFactor5);
Serial.print(rtc.getUnixTime(rtc.getTime())); Serial.print(","); Serial.print("PU1,1Ph-CT3,"); Serial.print(Vrms); Serial.print(","); Serial.print(Irms3); Serial.print(","); Serial.println(powerFactor5);
Serial.print(rtc.getUnixTime(rtc.getTime())); Serial.print(","); Serial.print("PU1,1Ph-CT4,"); Serial.print(Vrms); Serial.print(","); Serial.print(Irms4); Serial.print(","); Serial.println(powerFactor5);
Serial.print(rtc.getUnixTime(rtc.getTime())); Serial.print(","); Serial.print("PU1,1Ph-CT5,"); Serial.print(Vrms); Serial.print(","); Serial.print(Irms5); Serial.print(","); Serial.println(powerFactor5);
Serial.print(rtc.getUnixTime(rtc.getTime())); Serial.print(","); Serial.print("PU1,1Ph-CT6,"); Serial.print(Vrms); Serial.print(","); Serial.print(Irms6); Serial.print(","); Serial.println(powerFactor5);
Serial.print(rtc.getUnixTime(rtc.getTime())); Serial.print(","); Serial.print("PU1,1Ph-CT7,"); Serial.print(Vrms); Serial.print(","); Serial.print(Irms7); Serial.print(","); Serial.println(powerFactor5);
Serial.print(rtc.getUnixTime(rtc.getTime())); Serial.print(","); Serial.print("PU1,1Ph-CT8,"); Serial.print(Vrms); Serial.print(","); Serial.print(Irms8); Serial.print(","); Serial.println(powerFactor5);
Serial.print(rtc.getUnixTime(rtc.getTime())); Serial.print(","); Serial.print("PU1,1Ph-CT9,"); Serial.print(Vrms); Serial.print(","); Serial.print(Irms9); Serial.print(","); Serial.println(powerFactor5);
Serial.print(rtc.getUnixTime(rtc.getTime())); Serial.print(","); Serial.print("PU1,1Ph-CT10,"); Serial.print(Vrms); Serial.print(","); Serial.print(Irms10); Serial.print(","); Serial.println(powerFactor5);
}
}
};
class Sdwrite
{
int increment;
int updateInterval; // interval between updates
unsigned long lastUpdate; // last update of position
public:
Sdwrite(long int interval)
{
updateInterval = interval;
increment = 1;
}
I have break this code in posting for message exceed..