// https://forum.arduino.cc/t/sketch-to-compare-voltages-for-series-parallel-capacitor-switching-circuit/1046639
const int CHARGE1pin = 2; // capacitor 1 in parallel
const int CHARGE2pin = 3; // capacitor 2 in parallel
const int DISpin = 4; // capacitors in series
const int VCCPin = A0; // Voltage sensor 'S'
const int CAPpin = A1; // Voltage sensor 'S'
int VCC = 0;
int CAPvolt = 0;
bool charging = false;
const int chargeLamp = A2; // move the slider right to simulate charging
const int dischargeLamp = A3; // move the slider left to simulate discharging
void setup () {
pinMode(CHARGE1pin, OUTPUT); // mosfet
pinMode(CHARGE2pin, OUTPUT); // mosfet
pinMode(DISpin, OUTPUT); // mosfet
pinMode(chargeLamp, OUTPUT); // lamp
pinMode(dischargeLamp, OUTPUT); // lamp
}
void loop () {
// INPUT
VCC = analogRead(VCCPin); // read input voltage
CAPvolt = analogRead(CAPpin); // read cap voltage
int difference = VCC - CAPvolt;
// PROCESS
if (charging) {
if (CAPvolt > VCC - 30)
charging = false; // stop charging!
}
else { // (not charging)
if (CAPvolt < VCC / 2)
charging = true; // start charging!
}
// OUTPUT
if (charging) {
digitalWrite(DISpin, LOW); // discharge mosfet Off
digitalWrite(CHARGE1pin, HIGH); // charge mosfet ON
digitalWrite(CHARGE2pin, HIGH); // charge mosfet ON
digitalWrite(chargeLamp, 1);
digitalWrite(dischargeLamp, 0);
}
else {
digitalWrite(CHARGE1pin, LOW); // charge mosfet Off
digitalWrite(CHARGE2pin, LOW); // charge mosfet Off
digitalWrite(DISpin, HIGH); // discharge mosfet ON
digitalWrite(chargeLamp, 0);
digitalWrite(dischargeLamp, 1);
}
}