93 lines
3.9 KiB
C++
93 lines
3.9 KiB
C++
|
|
|
|
// -------
|
|
// ads.setGain(GAIN_TWOTHIRDS); // 2/3x gain +/- 6.144V 1 bit = 0.1875mV (default)
|
|
// ads.setGain(GAIN_ONE); // 1x gain +/- 4.096V 1 bit = 0.125mV
|
|
// ads.setGain(GAIN_TWO); // 2x gain +/- 2.048V 1 bit = 0.0625mV
|
|
// ads.setGain(GAIN_FOUR); // 4x gain +/- 1.024V 1 bit = 0.03125mV
|
|
// ads.setGain(GAIN_EIGHT); // 8x gain +/- 0.512V 1 bit = 0.015625mV
|
|
|
|
|
|
const int size = 150;
|
|
const int voltNums = 4;
|
|
const int voltMeters[voltNums] = {0x48, 0x49, 0x4A, 0x4B}; // 0x48, 0x49, 0x4A, 0x4B
|
|
vReading adsArray[voltNums];
|
|
float multiplier = 0.0078125F; // ADS1115 @ +/- 6.144V gain = 0.0078125mV/step
|
|
unsigned long lastDataLoggerReading;
|
|
int DataLoggerReadIntervalMs = 50;
|
|
|
|
void setupDataLogger(){
|
|
lastDataLoggerReading = millis();
|
|
for(int x = 0; x < voltNums; x++){
|
|
adsArray[x].sensor.setGain(GAIN_SIXTEEN);
|
|
adsArray[x].sensor.setDataRate(RATE_ADS1115_32SPS);
|
|
adsArray[x].sensor.begin(voltMeters[x]);
|
|
for (int y = 0; y < size - 1; y++){
|
|
adsArray[x].readings1[y] = 0;
|
|
adsArray[x].readings2[y] = 0;
|
|
}
|
|
}
|
|
Serial.println("done DataLogger Init");
|
|
}
|
|
|
|
|
|
void updateDataLogger(){
|
|
// Serial.print(" ------------------------------- ");
|
|
for(int x = 0; x < (sizeof(voltMeters) / sizeof(voltMeters[0])); x++){
|
|
adsArray[x].readings1[adsArray[x].readCnt] = adsArray[x].sensor.readADC_Differential_0_1() * multiplier; // read differential AIN0 - AIN1
|
|
adsArray[x].readings2[adsArray[x].readCnt] = adsArray[x].sensor.readADC_Differential_2_3() * multiplier; // read differential AIN2 - AIN3
|
|
|
|
float diff1 = (adsArray[x].sensor.readADC_SingleEnded(1) * multiplier) - (adsArray[x].sensor.readADC_SingleEnded(0) * multiplier);
|
|
float diff2 = (adsArray[x].sensor.readADC_SingleEnded(3) * multiplier) - (adsArray[x].sensor.readADC_SingleEnded(2) * multiplier);
|
|
|
|
// Serial.print(adsArray[x].readings1[adsArray[x].readCnt]);
|
|
// Serial.print("mV Prong 1 Avr: ");
|
|
// Serial.print(adsArray[x].avrProng1);
|
|
// Serial.print(" N "); Serial.print(adsArray[x].sensor.readADC_SingleEnded(0) * multiplier);
|
|
// Serial.print(" P "); Serial.println(adsArray[x].sensor.readADC_SingleEnded(1) * multiplier);
|
|
// Serial.print(" Diff1 "); Serial.println(diff1);
|
|
// Serial.print(adsArray[x].readings2[adsArray[x].readCnt]); Serial.print("mV Prong 2 Avr: "); Serial.print(adsArray[x].avrProng2);
|
|
// Serial.print(" N "); Serial.print(adsArray[x].sensor.readADC_SingleEnded(2) * multiplier);
|
|
// Serial.print(" P "); Serial.println(adsArray[x].sensor.readADC_SingleEnded(3) * multiplier);
|
|
// Serial.print(" Diff2 "); Serial.println(diff2);
|
|
|
|
// Get the average
|
|
unsigned long totalreadings1 = 0;
|
|
unsigned long totalreadings2 = 0;
|
|
for (unsigned char cnt = 0; cnt < size; cnt++){
|
|
totalreadings1 += adsArray[x].readings1[cnt];
|
|
totalreadings2 += adsArray[x].readings2[cnt];
|
|
}
|
|
adsArray[x].avrProng1 = totalreadings1 / size;
|
|
adsArray[x].avrProng2 = totalreadings2 / size;
|
|
adsArray[x].readCnt = adsArray[x].readCnt == size - 1 ? 0 : adsArray[x].readCnt + 1;
|
|
}
|
|
Serial.println();
|
|
// Serial.print("----------------------------------------------------------------------");Serial.println((int16_t)0);
|
|
}
|
|
|
|
void DataLoggerControlLoop() {
|
|
unsigned long currentTime = millis();
|
|
if(currentTime - lastDataLoggerReading >= DataLoggerReadIntervalMs){
|
|
updateDataLogger();
|
|
|
|
lastDataLoggerReading = currentTime;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
float *getDataLoggerDump(float (& array)[8]){
|
|
|
|
array[0] = adsArray[0].avrProng1;
|
|
array[1] = adsArray[0].avrProng2;
|
|
array[2] = adsArray[1].avrProng1;
|
|
array[3] = adsArray[1].avrProng2;
|
|
array[4] = adsArray[2].avrProng1;
|
|
array[5] = adsArray[2].avrProng2;
|
|
array[6] = adsArray[3].avrProng1;
|
|
array[7] = adsArray[3].avrProng2;
|
|
}
|
|
|
|
|