#include #include #include #include #define LED_PIN D0 #define LED_COUNT 30 U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); int shipX = 10; int dir = 1; int ledHead = 0; void drawShipScene() { u8g2.clearBuffer(); for (int i = 0; i < 20; i++) { int x = (i * 23 + millis() / 10) % 128; int y = (i * 13 + millis() / 20) % 64; u8g2.drawPixel(x, y); } u8g2.setFont(u8g2_font_6x12_tf); u8g2.drawStr(18, 10, "OLED + RGB TEST"); u8g2.drawTriangle(shipX, 50, shipX + 12, 50, shipX + 6, 38); u8g2.drawPixel(shipX + 4, 52); u8g2.drawPixel(shipX + 8, 52); u8g2.sendBuffer(); } void updateLEDs() { strip.clear(); for (int t = 0; t < 8; t++) { int p = ledHead - t; if (p >= 0 && p < LED_COUNT) { int b = 255 - t * 30; if (b < 0) b = 0; strip.setPixelColor(p, strip.Color(0, 0, b)); } } strip.setPixelColor((ledHead + 10) % LED_COUNT, strip.Color(0, 150, 0)); strip.setPixelColor((ledHead + 20) % LED_COUNT, strip.Color(150, 0, 0)); strip.show(); ledHead++; if (ledHead >= LED_COUNT + 8) ledHead = 0; } void setup() { u8g2.begin(); strip.begin(); strip.setBrightness(80); strip.clear(); strip.show(); } void loop() { shipX += dir; if (shipX < 5 || shipX > 110) dir = -dir; drawShipScene(); updateLEDs(); delay(60); }