#include <Wire.h>
#include <SPI.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_ADS1X15.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
Adafruit_ADS1115 ads;
int
millisLCDInterval = 500,
avgCountVS = 20;
float
inVoltageDivRatio = 2.0111,
outVoltageDivRatio = 2.0111,
VSI = 0.0000,
VSO = 0.0000,
VSI1 = 0.0000,
VSO1 = 0.0000,
VSI2 = 0.0000,
VSO2 = 0.0000,
VSI3 = 0.0000,
VSO3 = 0.0000,
voltageInput = 0.0000,
voltageOutput = 0.0000,
voltageInput1 = 0.0000,
voltageOutput1 = 0.0000,
voltageInput2 = 0.0000,
voltageOutput2 = 0.0000,
voltageInput3 = 0.0000,
voltageOutput3 = 0.0000,
loopTime = 0.0000;
unsigned long
currentLCDMillis = 0,
currentLCDBackLMillis = 0,
prevLCDMillis = 0,
prevLCDBackLMillis = 0,
loopTimeStart = 0,
loopTimeEnd = 0;
const int
maxADCValue = 4096;
const float
referenceVoltage = 3.3,
gain = 1.0;
bool
enableLCD = 1;
void setup() {
// pinMode(0, INPUT_ANALOG);
// pinMode(1, INPUT_ANALOG);
// pinMode(2, INPUT_ANALOG);
// pinMode(3, INPUT_ANALOG);
pinMode(4, INPUT_ANALOG);
// pinMode(5, INPUT_ANALOG);
// pinMode(6, INPUT_ANALOG);
// pinMode(7, INPUT_ANALOG);
Serial.begin(1000000);
// ads.setGain(GAIN_TWO);
// Wire.setClock(200000); // 100000 (standard mode) ,200000 (balance mode), 400000 (fast mode), [1000000 (fast mode plus) and 3400000 (high speed mode)]might cause some error
// ads.begin(); //Initialize ADC
// ads.setDataRate(RATE_ADS1115_860SPS); //8, 16, 32, 64, 128, 250, 475, 860 is max for ADS1115
// lcd.begin();
// lcd.backlight();
delay(1000);
}
void padding100(int padVar){
if(padVar<10){lcd.print(" ");}
else if(padVar<100){lcd.print(" ");}
}
void padding10(int padVar){
if(padVar<10){lcd.print(" ");}
}
void loop() {
VSI = 0.0000;
VSO = 0.0000;
VSI1 = 0.0000;
VSO1 = 0.0000;
for(int i = 0; i<avgCountVS; i++){
// VSI = VSI + ads.computeVolts(ads.readADC_SingleEnded(0));
// VSO = VSO + ads.computeVolts(ads.readADC_SingleEnded(1));
// VSI1 = VSI1 + ads.computeVolts(ads.readADC_SingleEnded(2));
// VSO1 = VSO1 + ads.computeVolts(ads.readADC_SingleEnded(3));
VSI = VSI + (analogRead(4)/float(maxADCValue))*referenceVoltage;
// VSO = VSO + (analogRead(5)/float(maxADCValue))*referenceVoltage;
// VSI1 = VSI + (analogRead(4)/float(maxADCValue))*referenceVoltage;
// VSO1 = VSO + (analogRead(6)/float(maxADCValue))*referenceVoltage;
}
// voltageInput = (VSI/avgCountVS)*inVoltageDivRatio;
// voltageOutput = (VSO/avgCountVS)*outVoltageDivRatio;
// voltageInput1 = (VSI1/avgCountVS)*inVoltageDivRatio;
// voltageOutput1 = (VSO1/avgCountVS)*outVoltageDivRatio;
voltageInput = (VSI/avgCountVS);
// voltageOutput = (VSO/avgCountVS);
// voltageInput1 = (VSI1/avgCountVS);
// voltageOutput1 = (VSO1/avgCountVS);
loopTimeStart = micros();
loopTime = (loopTimeStart-loopTimeEnd)/1000.000;
loopTimeEnd = micros();
currentLCDMillis = millis();
if(currentLCDMillis-prevLCDMillis>=millisLCDInterval){
prevLCDMillis = currentLCDMillis;
// lcd.setCursor(0,0); lcd.print(voltageInput,3); lcd.print("V");padding100(voltageInput1);
// lcd.setCursor(8,0); lcd.print(voltageOutput,3); lcd.print("V");padding10(voltageInput);
// lcd.setCursor(0,1); lcd.print(voltageInput1,3); lcd.print("V");padding100(voltageInput1);
// lcd.setCursor(8,1); lcd.print(voltageOutput1,3); lcd.print("V");padding10(voltageInput);
Serial.print(" VI:"); Serial.print(voltageInput,4);
// Serial.print(" VO:"); Serial.print(voltageOutput,4);
// Serial.print(" VI1:"); Serial.print(voltageInput1,4);
// Serial.print(" VO1:"); Serial.print(voltageOutput1,4);
Serial.print(" LoopT:"); Serial.print(loopTime,4);Serial.print("ms");
Serial.println("");}
// delay(10);
}