#include #include #include #include #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels const float voltageDividerRatio = 2.0; // ratio de diviseur de tension const float batteryVoltageMax = 4.2; // tension maximale de la batterie en pleine charge const float batteryVoltageMin = 3.2; // tension minimale de la batterie en fin de décharge const float batteryVoltageRange = batteryVoltageMax - batteryVoltageMin; // plage de tension de la batterie int counter = 0; int battery_level_pc = 100; Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire); void setup() { Serial.begin(9600); Serial.println(F("Started")); //========================================================================= // I2C Address is 0x3D for those screens if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } //========================================================================= pinMode(A0, INPUT);// ADC //Say Hello! display.clearDisplay(); display.setTextColor(WHITE); display.setCursor(0,10); display.setTextSize(1); display.println("Hello Telecom Paris"); display.display(); delay(2000); } void loop() { display.clearDisplay(); //Display raw value on left display.setCursor(60,0); display.setTextSize(2); display.println(counter); battery_level_pc = getBatteryLevel(); displayProgressBar(battery_level_pc); //update screen display.display(); delay(500); counter++; } int getBatteryLevel(){ float Vbatt = 0; //In addition, during communication in particular, spike-like errors occurred, which had to be averaged out 16 times to remove them. for(int i = 0; i < 16; i++) { Vbatt = Vbatt + analogReadMilliVolts(A0); // ADC with correction } float Vbattf = 2 * Vbatt / 16 / 1000.0; // attenuation ratio 1/2, mV --> V int batteryPercentage = 100* (Vbattf - batteryVoltageMin) / batteryVoltageRange; return(batteryPercentage); } void displayProgressBar(int progress_value){ Serial.println(progress_value*display.width()/100.); display.fillRect(0, SCREEN_HEIGHT/2, progress_value*display.width()/100., 5, SSD1306_INVERSE); }