BioController/DataLogger.ino
2025-03-10 19:31:28 -05:00

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;
}