// ← back to all

flag_wave

// flag_wave · by 0x1306 · 6 frames · 100ms · festival
// views · runs
// preview
frame_00 / 06// 100ms per frame
// space: play/pause · ←→: step frames
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> // 0x1306.dev · animation: flag_wave · 6 frames · 100ms #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 #define SCREEN_ADDRESS 0x3C Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); #define FRAME_COUNT 6 #define FRAME_DELAY 100 void drawFrame(int frame) { display.clearDisplay(); int wave[] = {0, 1, 2, 3, 2, 1}; int w = wave[frame % 6]; int pole_x = 20; display.drawFastVLine(pole_x, 4, 56, WHITE); int flag_x = 21; int flag_w = 60 + w; int flag_y_top = 8; display.fillRect(flag_x, flag_y_top, flag_w, 10, WHITE); display.fillRect(flag_x, flag_y_top + 10, flag_w, 10, BLACK); display.drawFastHLine(flag_x, flag_y_top + 10, flag_w, WHITE); display.drawFastHLine(flag_x, flag_y_top + 19, flag_w, WHITE); display.fillRect(flag_x, flag_y_top + 20, flag_w, 10, WHITE); display.drawCircle(flag_x + flag_w / 2, flag_y_top + 15, 4, WHITE); display.display(); } void setup() { Wire.begin(21, 22); // SDA=21, SCL=22 for ESP32 DevKit // change to 0x3D if display not found display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS); display.clearDisplay(); display.display(); } void loop() { for (int i = 0; i < FRAME_COUNT; i++) { drawFrame(i); delay(FRAME_DELAY); } }
// share
// embed
// paste into any html · 320×200 · transparent click opens detail page