#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define BUTTON_PIN 4 // Using GPIO27 for button
#define SDA_PIN 17 // Changed SDA to GPIO17
#define SCL_PIN 16 // Changed SCL to GPIO16
bool buttonPressed = false;
int starCount = 5; // Initial number of stars
int moonFrame = 0; // Track moon animation frame
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLDOWN);
Serial.begin(115200);
// Manually set I2C pins
Wire.begin(SDA_PIN, SCL_PIN);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
}
void loop() {
if (digitalRead(BUTTON_PIN) == HIGH) {
buttonPressed = true;
starCount += 2; // Add more stars
moonFrame = (moonFrame + 1) % 4; // Rotate moon animation
delay(300); // Debounce
}
drawScene();
}
void drawScene() {
display.clearDisplay();
// Draw "spinning" moon (simulate rotation)
int moonX = 50, moonY = 20, moonSize = 15;
display.drawCircle(moonX, moonY, moonSize, SSD1306_WHITE);
if (moonFrame == 1) {
display.fillCircle(moonX - 5, moonY, 5, SSD1306_BLACK);
} else if (moonFrame == 2) {
display.fillCircle(moonX + 5, moonY, 5, SSD1306_BLACK);
} else if (moonFrame == 3) {
display.fillCircle(moonX, moonY - 5, 5, SSD1306_BLACK);
}
// Draw stars randomly
for (int i = 0; i < starCount; i++) {
int starX = random(10, SCREEN_WIDTH - 10);
int starY = random(10, SCREEN_HEIGHT - 10);
display.drawPixel(starX, starY, SSD1306_WHITE);
}
display.display();
}
Loading
esp32-s2-devkitm-1
esp32-s2-devkitm-1