Update
This commit is contained in:
parent
928a2208df
commit
74aec42e44
@ -22,45 +22,64 @@ Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
|
|||||||
|
|
||||||
int batteryPct = 0;
|
int batteryPct = 0;
|
||||||
double battVoltage = 0.0;
|
double battVoltage = 0.0;
|
||||||
int rawBattVal = 0;
|
|
||||||
|
|
||||||
bool powerState = false;
|
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 logo_bmp[] =
|
static const unsigned char PROGMEM charge_logo[] = {
|
||||||
{ B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000,
|
B00011111, B11000000,
|
||||||
B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000,
|
B00010000, B01000000,
|
||||||
B00000000, B01111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B10000000, B00000000,
|
B00100000, B01000000,
|
||||||
B00000001, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000, B00000000,
|
B00100000, B10000000,
|
||||||
B00000011, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000, B00000000,
|
B01000001, B00000000,
|
||||||
B00000011, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11100000, B00000000,
|
B01000011, B11000000,
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11100000, B00000000,
|
B10000000, B01000000,
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11100000, B00000000,
|
B11110000, B10000000,
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11100000, B00000000,
|
B00010001, B00000000,
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000,
|
B00100010, B00000000,
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000,
|
B00100100, B00000000,
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111110, B00000000,
|
B01001000, B00000000,
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000,
|
B01010000, B00000000,
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000,
|
B01100000, B00000000,
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B10000000,
|
};
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000,
|
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000,
|
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000,
|
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B10000000,
|
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B10000000,
|
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B00000000,
|
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111110, B00000000,
|
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000,
|
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000,
|
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000,
|
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11110000, B00000000,
|
|
||||||
B00000111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11100000, B00000000,
|
|
||||||
B00000011, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11100000, B00000000,
|
|
||||||
B00000001, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11100000, B00000000,
|
|
||||||
B00000000, B01111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11000000, B00000000,
|
|
||||||
B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000,
|
|
||||||
B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000};
|
|
||||||
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
delay(100);
|
delay(100);
|
||||||
@ -69,38 +88,55 @@ void setup() {
|
|||||||
display.setTextColor(WHITE);
|
display.setTextColor(WHITE);
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
pinMode(VBAT, INPUT);
|
pinMode(VBAT, INPUT);
|
||||||
pinMode(CSTAT1, INPUT_PULLUP);
|
pinMode(CSTAT1, INPUT);
|
||||||
pinMode(CSTAT2, INPUT_PULLUP);
|
pinMode(CSTAT2, INPUT);
|
||||||
pinMode(FETCTRL, OUTPUT);
|
pinMode(FETCTRL, OUTPUT);
|
||||||
pinMode(PWRLED, OUTPUT);
|
pinMode(PWRLED, OUTPUT);
|
||||||
pinMode(CHGLED, OUTPUT);
|
pinMode(CHGLED, OUTPUT);
|
||||||
pinMode(PWRBTN, INPUT_PULLUP);
|
pinMode(PWRBTN, INPUT_PULLUP);
|
||||||
pinMode(CHGBTN, INPUT_PULLUP);
|
pinMode(CHGBTN, INPUT_PULLUP);
|
||||||
digitalWrite(FETCTRL, LOW);
|
digitalWrite(FETCTRL, LOW);
|
||||||
|
battVoltage = GetVoltage();
|
||||||
initScreen();
|
initScreen();
|
||||||
delay(200);
|
delay(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
delay(100);
|
delay(100);
|
||||||
getBatteryState();
|
checkPresses();
|
||||||
updateDisplay();
|
checkCharging();
|
||||||
checkEvents();
|
if (screenState != 0) {updateScreen();}
|
||||||
}
|
}
|
||||||
|
|
||||||
void getBatteryState(){
|
void getBatteryCharge(){
|
||||||
rawBattVal = analogRead(VBAT);
|
double voltage = GetVoltage();
|
||||||
battVoltage = rawBattVal * (5.0 / 1023.0);
|
|
||||||
|
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 checkEvents(){
|
|
||||||
|
void checkPresses(){
|
||||||
if (digitalRead(PWRBTN) == 0) {
|
if (digitalRead(PWRBTN) == 0) {
|
||||||
delay(100);
|
delay(100);
|
||||||
if (digitalRead(PWRBTN) == 0) {
|
if (digitalRead(PWRBTN) == 0) {
|
||||||
blinkLed(PWRLED);
|
blinkLed(PWRLED);
|
||||||
if(powerState == true){
|
if(powerState == true){
|
||||||
turnOff();
|
turnOff();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
turnOn();
|
turnOn();
|
||||||
@ -111,39 +147,110 @@ void checkEvents(){
|
|||||||
delay(100);
|
delay(100);
|
||||||
if (digitalRead(CHGBTN) == 0) {
|
if (digitalRead(CHGBTN) == 0) {
|
||||||
blinkLed(CHGLED);
|
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() {
|
void turnOn() {
|
||||||
digitalWrite(FETCTRL, HIGH);
|
digitalWrite(FETCTRL, HIGH);
|
||||||
powerState = true;
|
powerState = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void turnOff() {
|
void turnOff() {
|
||||||
digitalWrite(FETCTRL, LOW);
|
digitalWrite(FETCTRL, LOW);
|
||||||
powerState = false;
|
powerState = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void initScreen() {
|
void initScreen() {
|
||||||
display.clearDisplay();
|
display.clearDisplay();
|
||||||
display.display();
|
display.display();
|
||||||
|
screenOn = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateDisplay(){
|
void updateScreen() {
|
||||||
// display.drawBitmap(0, 0, logo_bmp, 128, 32, WHITE);
|
getBatteryCharge();
|
||||||
|
if (screenState == 1) {
|
||||||
|
updateDisplayPct();
|
||||||
|
}
|
||||||
|
else if (screenState == 2) {
|
||||||
|
updateDisplayVoltage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateDisplayPct(){
|
||||||
display.clearDisplay();
|
display.clearDisplay();
|
||||||
|
display.drawBitmap(0, 0, battery_logo, 120, 32, 1);
|
||||||
display.drawBitmap(0, 0, logo_bmp, 128, 32, 1);
|
if (charging_1 == true) {display.drawBitmap(118, 0, charge_logo, 16, 14, 1);}
|
||||||
display.setTextSize(2);
|
if (charging_2 == true) {display.drawBitmap(118, 16, charge_logo, 16, 14, 1);}
|
||||||
display.setCursor(40, 11);
|
display.setTextSize(2);
|
||||||
|
display.setCursor(35, 10);
|
||||||
display.setTextColor(0);
|
display.setTextColor(0);
|
||||||
display.print(battVoltage);
|
display.print(batteryPct);
|
||||||
display.println(" V");
|
display.println("%");
|
||||||
display.display();
|
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) {
|
void blinkLed(int ctrlLed) {
|
||||||
analogWrite(ctrlLed, 0.00); delay(12);
|
analogWrite(ctrlLed, 0.00); delay(12);
|
||||||
analogWrite(ctrlLed, 0.00); delay(12);
|
analogWrite(ctrlLed, 0.00); delay(12);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user