#include <stdio.h>
#include "pico/stdlib.h"
// Include the libraries.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSans9pt7b.h>
// important perameters
bool ischarging=false;
bool dschg=true;
int count=0;
int outvoltage=0;
int setvoltage=50;
int settemperature=0;
int currenttemperature=0;
int current=0;
int outpower=outvoltage*current;
int setpower=0;
int btn_status=3;
int batteryPercent = count;
// Define the display
Adafruit_SSD1306 display(128,64,&Wire,-1);
// Initial setup
void setup()
{
// 'Logo with volta+', 128x64px
static const uint8_t image_data[1024]= {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x89, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
0xff, 0xff, 0xff, 0xff, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xd8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfc, 0x00, 0x07, 0x81, 0x99, 0xf0, 0xfc, 0x38, 0xfe, 0x1e, 0x3f, 0x80, 0x7c, 0x7f, 0x0f, 0xff,
0xfc, 0x00, 0x07, 0x81, 0xff, 0xf0, 0xf8, 0x78, 0x7e, 0x1e, 0x3f, 0x00, 0x3c, 0x7e, 0x1f, 0xff,
0xfc, 0x00, 0x07, 0x80, 0xff, 0xf0, 0xf0, 0xf8, 0x3e, 0x1e, 0x3e, 0x04, 0x1c, 0x7c, 0x3f, 0xff,
0xfe, 0x00, 0x0f, 0x00, 0xff, 0xf0, 0xe1, 0xf8, 0x3e, 0x1e, 0x3c, 0x3f, 0x3c, 0x78, 0x7f, 0xff,
0xff, 0xe0, 0xff, 0x00, 0x7f, 0xf0, 0xc3, 0xf8, 0x1e, 0x1e, 0x38, 0x7f, 0xfc, 0x70, 0xff, 0xff,
0xff, 0xe0, 0xfe, 0x00, 0x7f, 0xf0, 0x87, 0xf8, 0x0e, 0x1e, 0x38, 0x7f, 0xfc, 0x61, 0xff, 0xff,
0xff, 0xe0, 0xfe, 0x08, 0x3f, 0xf0, 0x07, 0xf8, 0x06, 0x1e, 0x38, 0xff, 0xfc, 0x03, 0xff, 0xff,
0xff, 0xe0, 0xfc, 0x18, 0x3f, 0xf0, 0x07, 0xf8, 0x82, 0x1e, 0x38, 0xff, 0xfc, 0x03, 0xff, 0xff,
0xff, 0xe0, 0xfc, 0x1c, 0x3f, 0xf0, 0x03, 0xf8, 0xc0, 0x1e, 0x38, 0xff, 0xfc, 0x01, 0xff, 0xff,
0xff, 0xe0, 0xf8, 0x00, 0x1f, 0xf0, 0x03, 0xf8, 0xe0, 0x1e, 0x38, 0x7f, 0xfc, 0x00, 0xff, 0xff,
0xff, 0xe0, 0xf8, 0x00, 0x1f, 0xf0, 0x61, 0xf8, 0xf0, 0x1e, 0x38, 0x7f, 0xfc, 0x30, 0x7f, 0xff,
0xff, 0xe0, 0xf0, 0x00, 0x0f, 0xf0, 0xf0, 0xf8, 0xf8, 0x1e, 0x3c, 0x3f, 0x3c, 0x38, 0x7f, 0xff,
0xff, 0xe0, 0xf0, 0x00, 0x0f, 0xf0, 0xf0, 0x78, 0xf8, 0x1e, 0x3c, 0x0e, 0x1c, 0x7c, 0x3f, 0xff,
0xff, 0xe0, 0xf0, 0x7e, 0x07, 0xf0, 0xf8, 0x78, 0xfc, 0x1e, 0x3e, 0x00, 0x1c, 0x7e, 0x1f, 0xff,
0xff, 0xe0, 0xe0, 0xff, 0x07, 0xf0, 0xfc, 0x38, 0xfe, 0x1e, 0x3f, 0x80, 0x7c, 0x7f, 0x0f, 0xff,
0xff, 0xe1, 0xf1, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// (internal charge ckt ON,I2C address)
display.begin(SSD1306_SWITCHCAPVCC,0X3C);
delay(2000);
display.clearDisplay();
delay(500);
// Draw bitmap on the screen
display.drawBitmap(5, 10, image_data, 128, 64,1);
display.setTextSize(2);
display.setCursor(55,50);
display.setTextColor(WHITE);
display.print("VOLTA+");
display.display();
delay(4000);
display.clearDisplay();
}
// Main loop
void loop(){
//ischarging=!ischarging;
//display.clearDisplay();
count+=1;
double MaxBatteryBar=20;
double battery_bars_pixels,bottom_rect_y = 6;
int batteryPercent = count;
// for (batteryPercent;batteryPercent<100;batteryPercent++ )
// {battery_bars_pixels =batteryPercent*MaxBatteryBar/100 ;
display.setCursor(99,5);
display.setTextSize(1);
display.setTextColor(BLACK);
switch (btn_status) {
case 1:
settings();
break;
case 2:
exit();
break;
case 3:
battery_info();
break;
case 4:
poweroff();
break;
case 5:
voltage_setup();
break;
default:
attributes();
charge_status();
break;
}
display.display();
delay(600);
}
// Define functions to call back
void attributes()
{
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(90,30);
display.println("24V");
// display.setTextColor(WHITE);
// display.setTextSize(2);
// display.setCursor(90,50);
// display.println("24V");
//OUT VOLTAGE
display.fillRoundRect(0,48, 22, 15, 3, WHITE);
display.setTextSize(1);
display.setCursor(3,52);
display.setTextColor(BLACK);
display.print("OUT");
//OUT POWER
display.setTextSize(2);
display.setCursor(30,50);
display.setTextColor(WHITE);
display.print("90 W");
//IN VOLTAGE
display.fillRoundRect(0,31, 22, 15, 3, WHITE);
display.setTextSize(1);
display.setCursor(5,35);
display.setTextColor(BLACK);
display.print("IN");
//IN POWER
display.setTextSize(2);
display.setCursor(30,30);
display.setTextColor(WHITE);
display.print("15 W");
//USB
display.drawRoundRect(0,0,20,20,4,WHITE);
display.setTextSize(2);
display.setCursor(5,3);
display.setTextColor(WHITE);
display.print("U");
//LAPTOP
display.drawRoundRect(28,0,20,20,4,WHITE);
display.setTextSize(2);
display.setCursor(33,3);
display.setTextColor(WHITE);
display.print("L");
//USB-C
display.drawRoundRect(56,0,20,20,4,WHITE);
display.setTextSize(2);
display.setCursor(61,3);
display.setTextColor(WHITE);
display.print("C");
display.fillRoundRect(110,48,17,15,2,WHITE);
display.setTextSize(1);
display.setCursor(113,52);
display.setTextColor(BLACK);
display.print("OV");
if(outvoltage>setvoltage){
display.fillRoundRect(90,48,17,15,2,WHITE);
display.setTextSize(1);
display.setCursor(93,52);
display.setTextColor(BLACK);
display.print("OV");
}
else if(outvoltage<setvoltage){
display.fillRoundRect(90,48,17,15,2,WHITE);
display.setTextSize(1);
display.setCursor(93,52);
display.setTextColor(BLACK);
display.print("UV");
}
else if(currenttemperature>settemperature){
display.fillRoundRect(90,48,17,15,2,WHITE);
display.setTextSize(1);
display.setCursor(93,52);
display.setTextColor(BLACK);
display.print("OT");
}
else if(outpower>setpower){
display.fillRoundRect(90,48,17,15,2,WHITE);
display.setTextSize(1);
display.setCursor(93,52);
display.setTextColor(BLACK);
display.print("OC");
}
else{
display.print("");
}
display.display();
}
void charge_status(){
if(ischarging == true){
display.fillRoundRect(91, 5.5, 3, 7, 1, WHITE);//x,y,width,height top rect
display.drawRoundRect(95, 0, 30, 17, 4, WHITE);//x,y,width,height, radius bottom rect BATTERY
display.fillRoundRect(97, 2, 26, 13, 3, WHITE);//inside rectangle
display.print(batteryPercent);
display.setTextSize(1);
display.print("%");
}
else if(dschg == true){
display.fillRoundRect(91, 5.5, 3, 7, 1, WHITE);//x,y,width,height top rect
display.drawRoundRect(95, 0, 30, 17, 4, WHITE);//x,y,width,height, radius bottom rect BATTERY
display.fillRoundRect(97, 2, 26, 13, 3, WHITE);//inside rectangle
display.print(batteryPercent);
display.setTextSize(1);
display.print("%");
}
}
void settings(){
display.fillRoundRect(0,0,51,12,4,WHITE);
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(2,3);
display.println("SETTINGS");
display.display();
display.drawRoundRect(0,15,51,49,4,WHITE);
display.display();
display.drawRoundRect(54,0,74,64,4,WHITE);
display.display();
display.fillRoundRect(4,18,20,20,4,WHITE);
display.setTextSize(2);
display.setTextColor(BLACK);
display.setCursor(9,21);
display.println("V");
display.fillRoundRect(27,18,20,20,4,WHITE);
display.setTextSize(2);
display.setTextColor(BLACK);
display.setCursor(32,21);
display.println("B");
display.fillRoundRect(4,40,20,20,4,WHITE);
display.setTextSize(2);
display.setTextColor(BLACK);
display.setCursor(9,43);
display.println("O");
display.fillRoundRect(27,40,20,20,4,WHITE);
display.setTextSize(2);
display.setTextColor(BLACK);
display.setCursor(32,43);
display.println("X");
display.display();
}
void battery_info(){
//setting
display.fillRoundRect(0,0,51,12,4,WHITE);
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(2,3);
display.println("SETTINGS");
display.display();
//options block
display.drawRoundRect(0,15,51,49,4,WHITE);
display.display();
//data block
display.drawRoundRect(54,0,74,64,4,WHITE);
display.display();
//options
display.fillRoundRect(4,18,20,20,4,WHITE);
display.setTextSize(2);
display.setTextColor(BLACK);
display.setCursor(9,21);
display.println("V");
display.fillRoundRect(4,40,20,20,4,WHITE);
display.setTextSize(2);
display.setTextColor(BLACK);
display.setCursor(9,43);
display.println("O");
display.fillRoundRect(27,40,20,20,4,WHITE);
display.setTextSize(2);
display.setTextColor(BLACK);
display.setCursor(32,43);
display.println("X");
display.drawRoundRect(27,18,20,20,4,WHITE);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(32,21);
display.println("B");
//Data
display.drawRoundRect(54,0,74,12,4,WHITE);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(70,2);
display.println("BATTERY");
display.drawRoundRect(73,11,35,12,4,WHITE);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(79,13);
display.println("INFO");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(57,27);
display.println("PERCENTAGE");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(100,36);
display.println("100%");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(57,50);
display.println("VOLTAGE");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(105,50);
display.println("24V");
display.display();
}
void poweroff(){
display.drawRoundRect(54,0,74,64,4,WHITE);
display.drawRoundRect(54,0,74,12,4,WHITE);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(65,2);
display.println("POWER OFF");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(65,40);
display.println("NO");
display.fillRoundRect(100,36,21,15,4,WHITE);
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(102,40);
display.println("YES");
display.drawRoundRect(4,40,20,20,4,WHITE);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(9,43);
display.println("O");
display.display();
}
void voltage_setup(){
display.drawRoundRect(54,0,74,64,4,WHITE);
display.drawRoundRect(54,0,74,12,4,WHITE);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(70,2);
display.println("VOLTAGE");
display.drawRoundRect(72,11,39,12,4,WHITE);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(77,13);
display.println("SETUP");
display.fillRoundRect(59,50,39,11,4,WHITE);
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(61,52);
display.println("CHANGE");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(73,29);
display.println("24V");
display.drawRoundRect(4,18,20,20,4,WHITE);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(9,21);
display.println("V");
display.display();
}
void exit(){
display.drawRoundRect(54,0,74,64,4,WHITE);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(69,4);
display.println("EXIT");
display.drawLine(55,21,126,21, WHITE);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(65,40);
display.println("NO");
display.fillRoundRect(100,36,21,15,4,WHITE);
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(102,40);
display.println("YES");
display.drawRoundRect(27,40,20,20,4,WHITE);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(32,43);
display.println("X");
display.display();
}
int main() {
stdio_init_all();
while (true) {
printf("Hello, Wokwi!\n");
sleep_ms(250);
}
}