Update
This commit is contained in:
parent
fa098fb381
commit
88b44de1ce
@ -25,8 +25,8 @@ Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
|
|||||||
int batteryPct = 0;
|
int batteryPct = 0;
|
||||||
double battVoltage = 0.0;
|
double battVoltage = 0.0;
|
||||||
|
|
||||||
static const double chargeModifier = -0.3;
|
static const double chargeModifier = -0.04;
|
||||||
static const double dischargeModifier = 0.3;
|
static const double dischargeModifier = 0.04;
|
||||||
|
|
||||||
double voltageModifier = 0;
|
double voltageModifier = 0;
|
||||||
|
|
||||||
@ -34,6 +34,7 @@ bool powerState = false;
|
|||||||
bool screenOn = false;
|
bool screenOn = false;
|
||||||
bool charging_1 = false;
|
bool charging_1 = false;
|
||||||
bool charging_2 = false;
|
bool charging_2 = false;
|
||||||
|
bool isSafe = true;
|
||||||
int screenState = 0;
|
int screenState = 0;
|
||||||
|
|
||||||
static const unsigned char PROGMEM battery_logo[] = {
|
static const unsigned char PROGMEM battery_logo[] = {
|
||||||
@ -88,6 +89,23 @@ static const unsigned char PROGMEM charge_logo[] = {
|
|||||||
B01100000, B00000000
|
B01100000, B00000000
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const unsigned char PROGMEM charged_logo[] = {
|
||||||
|
B00011111, B11000000,
|
||||||
|
B00011111, B11000000,
|
||||||
|
B00111111, B11000000,
|
||||||
|
B00111111, B10000000,
|
||||||
|
B01111111, B00000000,
|
||||||
|
B01111111, B11000000,
|
||||||
|
B11111111, B11000000,
|
||||||
|
B11111111, B10000000,
|
||||||
|
B00011111, B00000000,
|
||||||
|
B00111110, B00000000,
|
||||||
|
B00111100, B00000000,
|
||||||
|
B01111000, B00000000,
|
||||||
|
B01110000, B00000000,
|
||||||
|
B01100000, B00000000
|
||||||
|
};
|
||||||
|
|
||||||
static const int dimmerVals[] = {
|
static const int dimmerVals[] = {
|
||||||
0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,3,3,4,4,4,5,5,6,6,7,7,8,8,9,9,10,11,11,12,13,14,15,16,17,18,19,20,21,
|
0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,3,3,4,4,4,5,5,6,6,7,7,8,8,9,9,10,11,11,12,13,14,15,16,17,18,19,20,21,
|
||||||
22,24,25,26,28,29,30,32,33,35,37,38,40,42,44,46,48,49,52,54,56,58,60,63,65,67,70,73,75,78,80,83,86,89,92,95,98,
|
22,24,25,26,28,29,30,32,33,35,37,38,40,42,44,46,48,49,52,54,56,58,60,63,65,67,70,73,75,78,80,83,86,89,92,95,98,
|
||||||
@ -101,6 +119,7 @@ static const int dimmerVals[] = {
|
|||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
delay(100);
|
delay(100);
|
||||||
|
wdt_enable(WDTO_8S);
|
||||||
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
|
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
|
||||||
display.clearDisplay();
|
display.clearDisplay();
|
||||||
display.setTextColor(WHITE);
|
display.setTextColor(WHITE);
|
||||||
@ -121,26 +140,40 @@ void setup() {
|
|||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
delay(100);
|
delay(100);
|
||||||
|
wdt_reset();
|
||||||
checkPresses();
|
checkPresses();
|
||||||
checkCharging();
|
checkCharging();
|
||||||
if (screenState != 0) {updateScreen();}
|
safetyCheck();
|
||||||
|
if (screenState != 0 && isSafe == true) {updateScreen();}
|
||||||
|
if (powerState == false && screenState == 0) {
|
||||||
|
LowPower.powerDown(SLEEP_2S, ADC_OFF, BOD_OFF);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void getBatteryCharge(){
|
void getBatteryCharge(){
|
||||||
double voltage = GetVoltage();
|
double voltage = GetVoltage();
|
||||||
|
|
||||||
if (voltage > 4.13){batteryPct = 100;}
|
if (voltage > 4.15){batteryPct = 100;}
|
||||||
else if (voltage > 4.06){batteryPct = 90;}
|
else if (voltage > 4.11){batteryPct = 95;}
|
||||||
else if (voltage > 3.99){batteryPct = 80;}
|
else if (voltage > 4.08){batteryPct = 90;}
|
||||||
else if (voltage > 3.92){batteryPct = 70;}
|
else if (voltage > 4.02){batteryPct = 85;}
|
||||||
|
else if (voltage > 3.98){batteryPct = 80;}
|
||||||
|
else if (voltage > 3.95){batteryPct = 75;}
|
||||||
|
else if (voltage > 3.91){batteryPct = 70;}
|
||||||
|
else if (voltage > 3.87){batteryPct = 65;}
|
||||||
else if (voltage > 3.85){batteryPct = 60;}
|
else if (voltage > 3.85){batteryPct = 60;}
|
||||||
else if (voltage > 3.78){batteryPct = 50;}
|
else if (voltage > 3.83){batteryPct = 55;}
|
||||||
else if (voltage > 3.71){batteryPct = 40;}
|
else if (voltage > 3.82){batteryPct = 50;}
|
||||||
else if (voltage > 3.64){batteryPct = 30;}
|
else if (voltage > 3.80){batteryPct = 45;}
|
||||||
else if (voltage > 3.57){batteryPct = 20;}
|
else if (voltage > 3.79){batteryPct = 40;}
|
||||||
else if (voltage > 3.50){batteryPct = 10;}
|
else if (voltage > 3.77){batteryPct = 35;}
|
||||||
|
else if (voltage > 3.75){batteryPct = 30;}
|
||||||
|
else if (voltage > 3.73){batteryPct = 25;}
|
||||||
|
else if (voltage > 3.71){batteryPct = 20;}
|
||||||
|
else if (voltage > 3.69){batteryPct = 15;}
|
||||||
|
else if (voltage > 3.61){batteryPct = 10;}
|
||||||
else if (voltage > 3.40){
|
else if (voltage > 3.40){
|
||||||
Serial.println("We are fucked");
|
|
||||||
batteryPct = 0;
|
batteryPct = 0;
|
||||||
}
|
}
|
||||||
else if (voltage < 2){batteryPct = -1;}
|
else if (voltage < 2){batteryPct = -1;}
|
||||||
@ -150,9 +183,10 @@ void getBatteryCharge(){
|
|||||||
|
|
||||||
void checkPresses(){
|
void checkPresses(){
|
||||||
if (digitalRead(PWRBTN) == 0) {
|
if (digitalRead(PWRBTN) == 0) {
|
||||||
delay(100);
|
if (powerState == true || screenState != 0) {
|
||||||
|
delay(700);
|
||||||
|
}
|
||||||
if (digitalRead(PWRBTN) == 0) {
|
if (digitalRead(PWRBTN) == 0) {
|
||||||
blinkLed(PWRLED);
|
|
||||||
if(powerState == true){
|
if(powerState == true){
|
||||||
turnOff();
|
turnOff();
|
||||||
}
|
}
|
||||||
@ -162,15 +196,22 @@ void checkPresses(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (digitalRead(CHGBTN) == 0) {
|
if (digitalRead(CHGBTN) == 0) {
|
||||||
delay(100);
|
if (powerState == true || screenState != 0) {
|
||||||
|
delay(700);
|
||||||
|
}
|
||||||
if (digitalRead(CHGBTN) == 0) {
|
if (digitalRead(CHGBTN) == 0) {
|
||||||
blinkLed(CHGLED);
|
if(isSafe == true){
|
||||||
if (screenState == 1 || screenState == 0) {
|
blinkLed(CHGLED);
|
||||||
screenState++;
|
if (screenState == 1 || screenState == 0) {
|
||||||
|
screenState++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
initScreen();
|
||||||
|
screenState = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
initScreen();
|
errorBlink();
|
||||||
screenState = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -198,11 +239,18 @@ void checkCharging(){
|
|||||||
|
|
||||||
|
|
||||||
void turnOn() {
|
void turnOn() {
|
||||||
digitalWrite(FETCTRL, HIGH);
|
if(isSafe == true){
|
||||||
powerState = true;
|
blinkLed(PWRLED);
|
||||||
|
digitalWrite(FETCTRL, HIGH);
|
||||||
|
powerState = true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
errorBlink();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void turnOff() {
|
void turnOff() {
|
||||||
|
blinkLed(PWRLED);
|
||||||
digitalWrite(FETCTRL, LOW);
|
digitalWrite(FETCTRL, LOW);
|
||||||
powerState = false;
|
powerState = false;
|
||||||
}
|
}
|
||||||
@ -216,13 +264,13 @@ void initScreen() {
|
|||||||
|
|
||||||
void updateScreen() {
|
void updateScreen() {
|
||||||
getBatteryCharge();
|
getBatteryCharge();
|
||||||
|
updateDispayChg();
|
||||||
if (screenState == 1) {
|
if (screenState == 1) {
|
||||||
updateDisplayPct();
|
updateDisplayPct();
|
||||||
}
|
}
|
||||||
else if (screenState == 2) {
|
else if (screenState == 2) {
|
||||||
updateDisplayVoltage();
|
updateDisplayVoltage();
|
||||||
}
|
}
|
||||||
updateDispayChg();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateDisplayPct(){
|
void updateDisplayPct(){
|
||||||
@ -250,9 +298,10 @@ void updateDisplayVoltage(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void updateDispayChg(){
|
void updateDispayChg(){
|
||||||
if (charging_1 == true) {display.drawBitmap(118, 0, charge_logo, 16, 14, 1);}
|
if (charging_1 == true && batteryPct != 100) {display.drawBitmap(118, 0, charge_logo, 16, 14, 1);}
|
||||||
if (charging_2 == true) {display.drawBitmap(118, 16, charge_logo, 16, 14, 1);}
|
if (charging_2 == true && batteryPct != 100) {display.drawBitmap(118, 16, charge_logo, 16, 14, 1);}
|
||||||
display.display();
|
if (charging_1 == true && batteryPct == 100) {display.drawBitmap(118, 0, charged_logo, 16, 14, 1);}
|
||||||
|
if (charging_2 == true && batteryPct == 100) {display.drawBitmap(118, 16, charged_logo, 16, 14, 1);}
|
||||||
}
|
}
|
||||||
|
|
||||||
double GetVoltage(){
|
double GetVoltage(){
|
||||||
@ -279,8 +328,35 @@ double GetVoltage(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void blinkLed(int ctrlLed) {
|
void safetyCheck(){
|
||||||
for(int i=0; i<DIMLEN; i++){
|
double currentVoltage = 0;
|
||||||
analogWrite(ctrlLed, dimmerVals[i]); delay(12);
|
currentVoltage = GetVoltage();
|
||||||
|
if(currentVoltage > 3.40 ){ //|| currentVoltage < 1.00
|
||||||
|
isSafe = true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
isSafe = false;
|
||||||
|
if(powerState == true){
|
||||||
|
turnOff();
|
||||||
|
screenState = 0;
|
||||||
|
initScreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void blinkLed(int ctrlLed) {
|
||||||
|
for(int i=0; i<DIMLEN; i++){
|
||||||
|
analogWrite(ctrlLed, dimmerVals[i]); delay(12);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void errorBlink() {
|
||||||
|
for(int i=0; i<5; i++){
|
||||||
|
digitalWrite(PWRLED, 1);
|
||||||
|
digitalWrite(CHGLED, 1);
|
||||||
|
delay(400);
|
||||||
|
digitalWrite(PWRLED, 0);
|
||||||
|
digitalWrite(CHGLED, 0);
|
||||||
|
delay(400);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user