const int NOMINAL = 2048, LLIMIT1 = NOMINAL * 0.95, LLIMIT2 = NOMINAL * 0.85; // New lower limits
bool l1 = false, l2 = false; // New lower limit flags
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;
}
bool checkLowerLimit(int val, int limit, byte pin, bool &flag) { // New function for lower limits
bool triggered = val <= limit;
if (triggered != flag) {
digitalWrite(pin, flag = triggered);
return true;
}
return false;
}
void setup() {
pinMode(23, OUTPUT); pinMode(22, OUTPUT);
pinMode(21, OUTPUT); pinMode(19, OUTPUT); // New pins for LL1 & LL2
Serial.begin(115200);
Serial.printf("LL1: %.1fV (%d)\nLL2: %.1fV (%d)\n",
3.3/2*0.95, LLIMIT1, 3.3/2*0.85, LLIMIT2); // Print lower limits
}
void loop() {
int val = analogRead(36);
float v = 3.3 * val / 4095;
// New lower limit checks
if (checkLowerLimit(val, LLIMIT1, 21, l1))
Serial.printf("%.1fV L1 %s\n", v, l1?"App":"Dis");
if (checkLowerLimit(val, LLIMIT2, 19, l2))
Serial.printf("%.1fV L2 %s\n", v, l2?"App":"Dis");
delay(1000);
}U1
U2
Upper Limits Violation Processing