const int setPoint = 13.5 * 20 / (20+82) * 1024 / 5; // http://www.ohmslawcalculator.com/voltage-divider-calculator int measurement = 0; int pulseWidth = 0; int difference = 0; int stepSize = 0; int calculation = 0; int led = 13; float batteryVoltage = 0; int redPin = 7; // RGB LED red pin int greenPin = 6; // RGB LED green pin int bluePin = 5; // RGB LED blue pin void setup() { TCCR2A = TCCR2A | 0x30; TCCR2B = TCCR2B & 0xF8 | 0x01; analogWrite(11, 117); analogWrite(3, 137); // Serial.begin(9600); pinMode(led, OUTPUT); pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } void loop() { measurement = analogRead(A1); calculation = setPoint - measurement; difference = abs(calculation); stepSize = difference; /* Measuring DC Voltage using Arduino https://startingelectronics.org/articles/arduino/measuring-voltage-with-arduino/ */ batteryVoltage = (analogRead(A1) * 4.99 / 1024) * 5.161; /* Serial.print("analogRead: "); Serial.println(analogRead(A1)); Serial.print("batteryVoltage: "); Serial.println(batteryVoltage); Serial.print(" "); */ if (measurement < setPoint) { pulseWidth += stepSize; if (pulseWidth > 255) pulseWidth = 255; analogWrite(led, 0); // pwm to LED setColor(0, 0, 0); // turn off RGB } if (measurement > setPoint) { pulseWidth -= stepSize; if (pulseWidth < 0) pulseWidth = 0; analogWrite(led, 255); // pwm to LED } analogWrite(9, pulseWidth); if (batteryVoltage < 12.00) { setColor(0, 0, 0); // turn off RGB } else if ((batteryVoltage > 12.00) && (batteryVoltage < 12.50)) { setColor(255, 0, 0); // red } else if ((batteryVoltage > 12.50) && (batteryVoltage < 13.00)) { setColor(155, 155, 0);// yellow } else if ((batteryVoltage > 13.00) && (batteryVoltage < 13.40)) { setColor(255, 255, 0);// yellow } else if ((batteryVoltage > 13.40) && (batteryVoltage < 13.80)) { setColor(0, 255, 0); // green } else if (batteryVoltage > 14.40) { setColor(255, 0, 255); // red } delay(10); } void setColor(int red, int green, int blue) { red = 255 - red; green = 255 - green; blue = 255 - blue; analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); }