const int NOMINAL = 2048, ULIMIT1 = NOMINAL * 1.15, ULIMIT2 = NOMINAL * 1.30;
bool u1 = false, u2 = false;
bool checkLimit(int val, int limit, byte pin, bool &flag) {
bool triggered = val >= limit;
if (triggered != flag) {
digitalWrite(pin, flag = triggered);
return true;
}
return false;
}
void setup() {
pinMode(23, OUTPUT); pinMode(22, OUTPUT);
Serial.begin(115200);
Serial.printf("Nominal: %d\nUL1: %.1fV (%d)\nUL2: %.1fV (%d)\n",
NOMINAL, 3.3/2*1.15, ULIMIT1, 3.3/2*1.30, ULIMIT2);
}
void loop() {
int val = analogRead(36);
float v = 3.3 * val / 4095;
if (checkLimit(val, ULIMIT1, 23, u1))
Serial.printf("%.1fV U1 %s\n", v, u1?"App":"Dis");
if (checkLimit(val, ULIMIT2, 22, u2))
Serial.printf("%.1fV U2 %s\n", v, u2?"App":"Dis");
delay(1000);
}