// Incluimos las bibliotecas necesarias para el proyecto.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Definimos el tamaño de la pantalla OLED.
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// Definimos el pin de reinicio de la pantalla OLED.
#define OLED_RESET -1
// Creamos un objeto para controlar la pantalla OLED.
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Definimos la cantidad de círculos y el radio de los círculos.
#define NUMCIRCLES 10
#define CIRCLE_RADIUS 10
void setup() {
// Inicializamos la comunicación serial para depurar.
Serial.begin(9600);
// Inicializamos la pantalla OLED.
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
}
// Llamamos a la función para hacer la animación de los círculos.
testanimateCircles(CIRCLE_RADIUS);
}
void loop() {
// La función loop() está vacía en este caso.
// Aquí podríamos agregar más cosas si necesitamos, pero no es necesario en este proyecto.
}
// Función para hacer la animación de los círculos.
void testanimateCircles(uint8_t radius) {
int8_t f, circles[NUMCIRCLES][3];
// Inicializamos la posición y velocidad de los círculos.
for (f = 0; f < NUMCIRCLES; f++) {
circles[f][0] = random(SCREEN_WIDTH); // Posición en el eje X
circles[f][1] = -2 * radius; // Empezamos arriba de la pantalla
circles[f][2] = random(1, 6); // Velocidad en el eje Y
}
// Bucle principal de animación.
for (;;) {
display.clearDisplay(); // Borramos la pantalla.
// Dibujamos cada círculo en su posición actual.
for (f = 0; f < NUMCIRCLES; f++) {
display.drawCircle(circles[f][0], circles[f][1], radius, SSD1306_WHITE);
}
display.display(); // Mostramos los círculos en la pantalla.
delay(200); // Esperamos un poquito para hacer que los círculos parezcan que caen.
// Actualizamos las posiciones de los círculos y los reiniciamos si se salen de la pantalla.
for (f = 0; f < NUMCIRCLES; f++) {
circles[f][1] += circles[f][2];
if (circles[f][1] - radius >= SCREEN_HEIGHT) {
circles[f][0] = random(SCREEN_WIDTH);
circles[f][1] = -2 * radius;
circles[f][2] = random(1, 6);
}
}
}
}