#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const int NUM_PARTICLES = 20;
float particle_x[NUM_PARTICLES];
float particle_y[NUM_PARTICLES];
int particle_speed_x[NUM_PARTICLES];
int particle_speed_y[NUM_PARTICLES];
float particle_size[NUM_PARTICLES];
int init_spread = 15;
int time_value = 0;
void setup(void) {
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;)
;
}
display.display(); // Display the splash screen
delay(2000);
display.clearDisplay(); // Clear the buffer
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
for (int i = 0; i < NUM_PARTICLES; i++) {
particle_x[i] = random(64 - init_spread, 64 + init_spread);
particle_y[i] = random(32 - init_spread, 32 + init_spread);
particle_speed_x[i] = random(-5, 6) * 3;
particle_speed_y[i] = random(-5, 6) * 3;
particle_size[i] = 8;
}
}
void loop(void) {
display.clearDisplay();
// draw particles --------------
for (int i = 0; i < NUM_PARTICLES; i++) {
particle_x[i] = particle_x[i] + particle_speed_x[i] / 10.0;
particle_y[i] = particle_y[i] + particle_speed_y[i] / 10.0;
particle_size[i] = particle_size[i] * 0.95;
display.drawCircle(particle_x[i], particle_y[i], particle_size[i], SSD1306_WHITE);
if ((particle_x[i] > SCREEN_WIDTH) || (particle_x[i] < 0) || (particle_y[i] > SCREEN_HEIGHT) || (particle_y[i] < 0) || (particle_size[i] < 0.5)) {
particle_x[i] = random(64 - init_spread, 64 + init_spread);
particle_y[i] = random(32 - init_spread, 32 + init_spread);
particle_speed_x[i] = random(-5, 6) * 3;
particle_speed_y[i] = random(-5, 6) * 3;
particle_size[i] = 8;
}
}
// draw big circle in the middle --------------
byte radius = round(25.0 + sin(time_value / 10.0) * 2.0);
display.fillCircle(64, 32, radius, SSD1306_WHITE);
// draw big value in the center --------------
display.setTextColor(SSD1306_BLACK);
display.setTextSize(2);
display.setCursor(56, 27);
display.print("Hi"); // Replace with your charge value
display.display();
delay(100);
}