#include #include #include #include "LowPower.h" #include #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 32 #define OLED_RESET -1 #define PWRBTN 3 #define CHGBTN 4 #define PWRLED 5 #define CHGLED 6 #define VBAT A0 #define FETCTRL 2 #define CSTAT1 A1 #define CSTAT2 A2 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); int batteryPct = 0; double battVoltage = 0.0; bool powerState = false; bool screenOn = false; bool charging_1 = false; bool charging_2 = false; int screenState = 0; static const unsigned char PROGMEM battery_logo[] = { B00000011, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000, B00000000, B00001111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000, B00011111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111000, B00000000, B00111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111100, B00000000, B01111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111110, B00000000, B01111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111110, B00000000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01100000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01110000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01111000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01111000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01111000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01111000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01111000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01111000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01110000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B01100000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000, B01111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111110, B00000000, B01111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111110, B00000000, B00111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111100, B00000000, B00011111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111000, B00000000, B00001111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000, B00000011, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000, B00000000 }; static const unsigned char PROGMEM charge_logo[] = { B00011111, B11000000, B00010000, B01000000, B00100000, B01000000, B00100000, B10000000, B01000001, B00000000, B01000011, B11000000, B10000000, B01000000, B11110000, B10000000, B00010001, B00000000, B00100010, B00000000, B00100100, B00000000, B01001000, B00000000, B01010000, B00000000, B01100000, B00000000, }; void setup() { delay(100); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextColor(WHITE); Serial.begin(9600); pinMode(VBAT, INPUT); pinMode(CSTAT1, INPUT); pinMode(CSTAT2, INPUT); pinMode(FETCTRL, OUTPUT); pinMode(PWRLED, OUTPUT); pinMode(CHGLED, OUTPUT); pinMode(PWRBTN, INPUT_PULLUP); pinMode(CHGBTN, INPUT_PULLUP); digitalWrite(FETCTRL, LOW); battVoltage = GetVoltage(); initScreen(); delay(200); } void loop() { delay(100); checkPresses(); checkCharging(); if (screenState != 0) {updateScreen();} } void getBatteryCharge(){ double voltage = GetVoltage(); if (voltage > 4.13){batteryPct = 100;} else if (voltage > 4.06){batteryPct = 90;} else if (voltage > 3.99){batteryPct = 80;} else if (voltage > 3.92){batteryPct = 70;} else if (voltage > 3.85){batteryPct = 60;} else if (voltage > 3.78){batteryPct = 50;} else if (voltage > 3.71){batteryPct = 40;} else if (voltage > 3.64){batteryPct = 30;} else if (voltage > 3.57){batteryPct = 20;} else if (voltage > 3.50){batteryPct = 10;} else if (voltage > 3.40){ Serial.println("We are fucked"); batteryPct = 0; } else if (voltage < 2){batteryPct = -1;} } void checkPresses(){ if (digitalRead(PWRBTN) == 0) { delay(100); if (digitalRead(PWRBTN) == 0) { blinkLed(PWRLED); if(powerState == true){ turnOff(); } else { turnOn(); } } } if (digitalRead(CHGBTN) == 0) { delay(100); if (digitalRead(CHGBTN) == 0) { blinkLed(CHGLED); if (screenState == 1 || screenState == 0) { screenState++; } else { initScreen(); screenState = 0; } } } } void checkCharging(){ if (digitalRead(CSTAT1) == 1){ delay(100); if (digitalRead(CSTAT1) == 1){ charging_1 = true; } } else { charging_1 = false; } if (digitalRead(CSTAT2) == 1){ delay(100); if (digitalRead(CSTAT2) == 1){ charging_2 = true; } } else { charging_2 = false; } } void turnOn() { digitalWrite(FETCTRL, HIGH); powerState = true; } void turnOff() { digitalWrite(FETCTRL, LOW); powerState = false; } void initScreen() { display.clearDisplay(); display.display(); screenOn = false; } void updateScreen() { getBatteryCharge(); if (screenState == 1) { updateDisplayPct(); } else if (screenState == 2) { updateDisplayVoltage(); } } void updateDisplayPct(){ display.clearDisplay(); display.drawBitmap(0, 0, battery_logo, 120, 32, 1); if (charging_1 == true) {display.drawBitmap(118, 0, charge_logo, 16, 14, 1);} if (charging_2 == true) {display.drawBitmap(118, 16, charge_logo, 16, 14, 1);} display.setTextSize(2); display.setCursor(35, 10); display.setTextColor(0); display.print(batteryPct); display.println("%"); display.display(); screenOn = true; } void updateDisplayVoltage(){ display.clearDisplay(); display.drawBitmap(0, 0, battery_logo, 120, 32, 1); if (charging_1 == true) {display.drawBitmap(118, 0, charge_logo, 16, 14, 1);} if (charging_2 == true) {display.drawBitmap(118, 16, charge_logo, 16, 14, 1);} display.setTextSize(2); display.setCursor(30, 10); display.setTextColor(0); display.print(GetVoltage()); display.println(" V"); display.display(); screenOn = true; } double GetVoltage(){ int totalSamples = 0; double voltage = 0; for (int q = 0; q < 10; q++) { totalSamples = totalSamples + analogRead(VBAT); delay(5); } voltage = (totalSamples / 10) * (5.00 / 1023.0); if (voltage > (battVoltage-0.03) && voltage < (battVoltage+0.03)) { return battVoltage; } else { battVoltage = voltage; return voltage; } } void blinkLed(int ctrlLed) { analogWrite(ctrlLed, 0.00); delay(12); analogWrite(ctrlLed, 0.00); delay(12); analogWrite(ctrlLed, 0.02); delay(12); analogWrite(ctrlLed, 0.05); delay(12); analogWrite(ctrlLed, 0.09); delay(12); analogWrite(ctrlLed, 0.15); delay(12); analogWrite(ctrlLed, 0.23); delay(12); analogWrite(ctrlLed, 0.32); delay(12); analogWrite(ctrlLed, 0.43); delay(12); analogWrite(ctrlLed, 0.55); delay(12); analogWrite(ctrlLed, 0.70); delay(12); analogWrite(ctrlLed, 0.85); delay(12); analogWrite(ctrlLed, 1.01); delay(12); analogWrite(ctrlLed, 1.20); delay(12); analogWrite(ctrlLed, 1.42); delay(12); analogWrite(ctrlLed, 1.63); delay(12); analogWrite(ctrlLed, 1.85); delay(12); analogWrite(ctrlLed, 2.12); delay(12); analogWrite(ctrlLed, 2.40); delay(12); analogWrite(ctrlLed, 2.67); delay(12); analogWrite(ctrlLed, 2.99); delay(12); analogWrite(ctrlLed, 3.30); delay(12); analogWrite(ctrlLed, 3.65); delay(12); analogWrite(ctrlLed, 4.00); delay(12); analogWrite(ctrlLed, 4.39); delay(12); analogWrite(ctrlLed, 4.77); delay(12); analogWrite(ctrlLed, 5.16); delay(12); analogWrite(ctrlLed, 5.65); delay(12); analogWrite(ctrlLed, 6.08); delay(12); analogWrite(ctrlLed, 6.54); delay(12); analogWrite(ctrlLed, 7.01); delay(12); analogWrite(ctrlLed, 7.54); delay(12); analogWrite(ctrlLed, 8.10); delay(12); analogWrite(ctrlLed, 8.63); delay(12); analogWrite(ctrlLed, 9.23); delay(12); analogWrite(ctrlLed, 9.80); delay(12); analogWrite(ctrlLed, 10.45); delay(12); analogWrite(ctrlLed, 11.23); delay(12); analogWrite(ctrlLed, 11.98); delay(12); analogWrite(ctrlLed, 12.76); delay(12); analogWrite(ctrlLed, 13.70); delay(12); analogWrite(ctrlLed, 14.55); delay(12); analogWrite(ctrlLed, 15.43); delay(12); analogWrite(ctrlLed, 16.41); delay(12); analogWrite(ctrlLed, 17.43); delay(12); analogWrite(ctrlLed, 18.42); delay(12); analogWrite(ctrlLed, 19.52); delay(12); analogWrite(ctrlLed, 20.58); delay(12); analogWrite(ctrlLed, 21.75); delay(12); analogWrite(ctrlLed, 22.97); delay(12); analogWrite(ctrlLed, 24.15); delay(12); analogWrite(ctrlLed, 25.36); delay(12); analogWrite(ctrlLed, 26.80); delay(12); analogWrite(ctrlLed, 28.10); delay(12); analogWrite(ctrlLed, 29.44); delay(12); analogWrite(ctrlLed, 30.92); delay(12); analogWrite(ctrlLed, 32.45); delay(12); analogWrite(ctrlLed, 33.93); delay(12); analogWrite(ctrlLed, 35.56); delay(12); analogWrite(ctrlLed, 37.12); delay(12); analogWrite(ctrlLed, 38.85); delay(12); analogWrite(ctrlLed, 40.63); delay(12); analogWrite(ctrlLed, 42.35); delay(12); analogWrite(ctrlLed, 44.11); delay(12); analogWrite(ctrlLed, 46.18); delay(12); analogWrite(ctrlLed, 48.04); delay(12); analogWrite(ctrlLed, 49.95); delay(12); analogWrite(ctrlLed, 52.06); delay(12); analogWrite(ctrlLed, 54.22); delay(12); analogWrite(ctrlLed, 56.44); delay(12); analogWrite(ctrlLed, 58.57); delay(12); analogWrite(ctrlLed, 60.75); delay(12); analogWrite(ctrlLed, 63.30); delay(12); analogWrite(ctrlLed, 65.59); delay(12); analogWrite(ctrlLed, 67.93); delay(12); analogWrite(ctrlLed, 70.50); delay(12); analogWrite(ctrlLed, 73.12); delay(12); analogWrite(ctrlLed, 75.63); delay(12); analogWrite(ctrlLed, 78.37); delay(12); analogWrite(ctrlLed, 80.98); delay(12); analogWrite(ctrlLed, 83.84); delay(12); analogWrite(ctrlLed, 86.75); delay(12); analogWrite(ctrlLed, 89.52); delay(12); analogWrite(ctrlLed, 92.35); delay(12); analogWrite(ctrlLed, 95.63); delay(12); analogWrite(ctrlLed, 98.55); delay(12); analogWrite(ctrlLed, 101.52); delay(12); analogWrite(ctrlLed, 105.41); delay(12); analogWrite(ctrlLed, 108.92); delay(12); analogWrite(ctrlLed, 112.71); delay(12); analogWrite(ctrlLed, 116.33); delay(12); analogWrite(ctrlLed, 120.23); delay(12); analogWrite(ctrlLed, 124.19); delay(12); analogWrite(ctrlLed, 127.95); delay(12); analogWrite(ctrlLed, 131.99); delay(12); analogWrite(ctrlLed, 136.08); delay(12); analogWrite(ctrlLed, 139.95); delay(12); analogWrite(ctrlLed, 144.09); delay(12); analogWrite(ctrlLed, 148.26); delay(12); analogWrite(ctrlLed, 152.20); delay(12); analogWrite(ctrlLed, 156.40); delay(12); analogWrite(ctrlLed, 160.60); delay(12); analogWrite(ctrlLed, 164.81); delay(12); analogWrite(ctrlLed, 168.76); delay(12); analogWrite(ctrlLed, 172.70); delay(12); analogWrite(ctrlLed, 177.11); delay(12); analogWrite(ctrlLed, 181.01); delay(12); analogWrite(ctrlLed, 185.11); delay(12); analogWrite(ctrlLed, 189.17); delay(12); analogWrite(ctrlLed, 192.94); delay(12); analogWrite(ctrlLed, 196.89); delay(12); analogWrite(ctrlLed, 200.55); delay(12); analogWrite(ctrlLed, 204.59); delay(12); analogWrite(ctrlLed, 208.10); delay(12); analogWrite(ctrlLed, 211.52); delay(12); analogWrite(ctrlLed, 215.27); delay(12); analogWrite(ctrlLed, 218.50); delay(12); analogWrite(ctrlLed, 221.63); delay(12); analogWrite(ctrlLed, 224.83); delay(12); analogWrite(ctrlLed, 227.90); delay(12); analogWrite(ctrlLed, 230.83); delay(12); analogWrite(ctrlLed, 233.46); delay(12); analogWrite(ctrlLed, 236.10); delay(12); analogWrite(ctrlLed, 238.58); delay(12); analogWrite(ctrlLed, 240.76); delay(12); analogWrite(ctrlLed, 242.90); delay(12); analogWrite(ctrlLed, 244.87); delay(12); analogWrite(ctrlLed, 246.56); delay(12); analogWrite(ctrlLed, 248.17); delay(12); analogWrite(ctrlLed, 249.58); delay(12); analogWrite(ctrlLed, 250.80); delay(12); analogWrite(ctrlLed, 251.76); delay(12); analogWrite(ctrlLed, 252.59); delay(12); analogWrite(ctrlLed, 253.21); delay(12); analogWrite(ctrlLed, 253.60); delay(12); analogWrite(ctrlLed, 253.81); delay(12); analogWrite(ctrlLed, 253.80); delay(12); analogWrite(ctrlLed, 253.08); delay(12); analogWrite(ctrlLed, 253.54); delay(12); analogWrite(ctrlLed, 253.79); delay(12); analogWrite(ctrlLed, 253.84); delay(12); analogWrite(ctrlLed, 253.68); delay(12); analogWrite(ctrlLed, 253.32); delay(12); analogWrite(ctrlLed, 252.79); delay(12); analogWrite(ctrlLed, 252.03); delay(12); analogWrite(ctrlLed, 251.06); delay(12); analogWrite(ctrlLed, 249.96); delay(12); analogWrite(ctrlLed, 248.60); delay(12); analogWrite(ctrlLed, 247.05); delay(12); analogWrite(ctrlLed, 245.31); delay(12); analogWrite(ctrlLed, 243.50); delay(12); analogWrite(ctrlLed, 241.53); delay(12); analogWrite(ctrlLed, 239.14); delay(12); analogWrite(ctrlLed, 236.84); delay(12); analogWrite(ctrlLed, 234.25); delay(12); analogWrite(ctrlLed, 231.50); delay(12); analogWrite(ctrlLed, 228.78); delay(12); analogWrite(ctrlLed, 225.75); delay(12); analogWrite(ctrlLed, 222.77); delay(12); analogWrite(ctrlLed, 219.49); delay(12); analogWrite(ctrlLed, 216.09); delay(12); analogWrite(ctrlLed, 212.78); delay(12); analogWrite(ctrlLed, 208.96); delay(12); analogWrite(ctrlLed, 205.47); delay(12); analogWrite(ctrlLed, 201.91); delay(12); analogWrite(ctrlLed, 197.81); delay(12); analogWrite(ctrlLed, 194.11); delay(12); analogWrite(ctrlLed, 190.12); delay(12); analogWrite(ctrlLed, 186.31); delay(12); analogWrite(ctrlLed, 182.22); delay(12); analogWrite(ctrlLed, 178.09); delay(12); analogWrite(ctrlLed, 174.17); delay(12); analogWrite(ctrlLed, 169.75); delay(12); analogWrite(ctrlLed, 165.80); delay(12); analogWrite(ctrlLed, 161.84); delay(12); analogWrite(ctrlLed, 157.64); delay(12); analogWrite(ctrlLed, 153.43); delay(12); analogWrite(ctrlLed, 149.24); delay(12); analogWrite(ctrlLed, 145.32); delay(12); analogWrite(ctrlLed, 141.16); delay(12); analogWrite(ctrlLed, 137.04); delay(12); analogWrite(ctrlLed, 133.19); delay(12); analogWrite(ctrlLed, 129.37); delay(12); analogWrite(ctrlLed, 125.12); delay(12); analogWrite(ctrlLed, 121.39); delay(12); analogWrite(ctrlLed, 117.47); delay(12); analogWrite(ctrlLed, 113.61); delay(12); analogWrite(ctrlLed, 110.03); delay(12); analogWrite(ctrlLed, 106.28); delay(12); analogWrite(ctrlLed, 102.81); delay(12); analogWrite(ctrlLed, 98.97); delay(12); analogWrite(ctrlLed, 96.04); delay(12); analogWrite(ctrlLed, 93.16); delay(12); analogWrite(ctrlLed, 89.92); delay(12); analogWrite(ctrlLed, 87.15); delay(12); analogWrite(ctrlLed, 84.42); delay(12); analogWrite(ctrlLed, 81.55); delay(12); analogWrite(ctrlLed, 78.74); delay(12); analogWrite(ctrlLed, 76.17); delay(12); analogWrite(ctrlLed, 73.48); delay(12); analogWrite(ctrlLed, 71.02); delay(12); analogWrite(ctrlLed, 68.44); delay(12); analogWrite(ctrlLed, 65.92); delay(12); analogWrite(ctrlLed, 63.62); delay(12); analogWrite(ctrlLed, 61.38); delay(12); analogWrite(ctrlLed, 58.88); delay(12); analogWrite(ctrlLed, 56.74); delay(12); analogWrite(ctrlLed, 54.66); delay(12); analogWrite(ctrlLed, 52.49); delay(12); analogWrite(ctrlLed, 50.37); delay(12); analogWrite(ctrlLed, 48.45); delay(12); analogWrite(ctrlLed, 46.44); delay(12); analogWrite(ctrlLed, 44.62); delay(12); analogWrite(ctrlLed, 42.72); delay(12); analogWrite(ctrlLed, 40.88); delay(12); analogWrite(ctrlLed, 39.20); delay(12); analogWrite(ctrlLed, 37.58); delay(12); analogWrite(ctrlLed, 35.78); delay(12); analogWrite(ctrlLed, 34.25); delay(12); analogWrite(ctrlLed, 32.66); delay(12); analogWrite(ctrlLed, 31.22); delay(12); analogWrite(ctrlLed, 29.73); delay(12); analogWrite(ctrlLed, 28.29); delay(12); analogWrite(ctrlLed, 26.98); delay(12); analogWrite(ctrlLed, 25.71); delay(12); analogWrite(ctrlLed, 24.32); delay(12); analogWrite(ctrlLed, 23.14); delay(12); analogWrite(ctrlLed, 21.99); delay(12); analogWrite(ctrlLed, 20.81); delay(12); analogWrite(ctrlLed, 19.66); delay(12); analogWrite(ctrlLed, 18.64); delay(12); analogWrite(ctrlLed, 17.57); delay(12); analogWrite(ctrlLed, 16.61); delay(12); analogWrite(ctrlLed, 15.62); delay(12); analogWrite(ctrlLed, 14.67); delay(12); analogWrite(ctrlLed, 13.82); delay(12); analogWrite(ctrlLed, 12.99); delay(12); analogWrite(ctrlLed, 12.09); delay(12); analogWrite(ctrlLed, 11.33); delay(12); analogWrite(ctrlLed, 10.60); delay(12); analogWrite(ctrlLed, 9.85); delay(12); analogWrite(ctrlLed, 9.23); delay(12); analogWrite(ctrlLed, 8.68); delay(12); analogWrite(ctrlLed, 8.10); delay(12); analogWrite(ctrlLed, 7.58); delay(12); analogWrite(ctrlLed, 7.09); delay(12); analogWrite(ctrlLed, 6.58); delay(12); analogWrite(ctrlLed, 6.08); delay(12); analogWrite(ctrlLed, 5.65); delay(12); analogWrite(ctrlLed, 5.23); delay(12); analogWrite(ctrlLed, 4.77); delay(12); analogWrite(ctrlLed, 4.39); delay(12); analogWrite(ctrlLed, 4.03); delay(12); analogWrite(ctrlLed, 3.65); delay(12); analogWrite(ctrlLed, 3.33); delay(12); analogWrite(ctrlLed, 2.99); delay(12); analogWrite(ctrlLed, 2.70); delay(12); analogWrite(ctrlLed, 2.40); delay(12); analogWrite(ctrlLed, 2.14); delay(12); analogWrite(ctrlLed, 1.87); delay(12); analogWrite(ctrlLed, 1.63); delay(12); analogWrite(ctrlLed, 1.42); delay(12); analogWrite(ctrlLed, 1.22); delay(12); analogWrite(ctrlLed, 1.04); delay(12); analogWrite(ctrlLed, 0.85); delay(12); analogWrite(ctrlLed, 0.70); delay(12); analogWrite(ctrlLed, 0.56); delay(12); analogWrite(ctrlLed, 0.43); delay(12); analogWrite(ctrlLed, 0.33); delay(12); analogWrite(ctrlLed, 0.23); delay(12); analogWrite(ctrlLed, 0.15); delay(12); analogWrite(ctrlLed, 0.09); delay(12); analogWrite(ctrlLed, 0.05); delay(12); analogWrite(ctrlLed, 0.02); delay(12); }