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