Загрузка данных


#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

// Твои пины (проверь, они точно такие?)
#define OLED_MOSI   6 
#define OLED_CLK    5 
#define OLED_DC     8
#define OLED_RESET  7
#define OLED_CS     4

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

const char* coinFrames[8][8] = {
  { "       .-@@@-.       ", "     .:#@@@@@#:.     ", "    .:@@@@@@@@@:.    ", "    :@@@#@@@#@@@:    ", "    :@@@#@@@#@@@:    ", "    .:@@@@@@@@@:.    ", "     .:#@@@@@#:.     ", "       .-@@@-.       " },
  { "        .-@@-.       ", "      .:##@@##:.     ", "     .:@@@@@@@@:.    ", "     :@@@#@@#@@@:    ", "     :@@@#@@#@@@:    ", "     .:@@@@@@@@:.    ", "      .:##@@##:.     ", "        .-@@-.       " },
  { "         .-@-.       ", "       .:#@@@#:.     ", "      .:@@@@@@@:.    ", "      :@@@#@@@#:     ", "      :@@@#@@@#:     ", "      .:@@@@@@@:.    ", "       .:#@@@#:.     ", "         .-@-.       " },
  { "          .-.        ", "        .:@@@@:.     ", "        :@@@@@:      ", "        :@@#@@:      ", "        :@@#@@:      ", "        :@@@@@:      ", "        .:@@@@:.     ", "          .-.        " },
  { "           .         ", "          :@:        ", "          :#:        ", "          :#:        ", "          :#:        ", "          :#:        ", "          :@:        ", "           .         " },
  { "          .-.        ", "        .:@@@@:.     ", "        :@@@@@:      ", "        :@@#@@:      ", "        :@@#@@:      ", "        :@@@@@:      ", "        .:@@@@:.     ", "          .-.        " },
  { "         .-@-.       ", "       .:#@@@#:.     ", "      .:@@@@@@@:.    ", "      :@@@#@@@#:     ", "      :@@@#@@@#:     ", "      .:@@@@@@@:.    ", "       .:#@@@#:.     ", "         .-@-.       " },
  { "        .-@@-.       ", "      .:##@@##:.     ", "     .:@@@@@@@@:.    ", "     :@@@#@@#@@@:    ", "     :@@@#@@#@@@:    ", "     .:@@@@@@@@:.    ", "      .:##@@##:.     ", "        .-@@-.       " }
};

const int numFrames = 8;
int currentFrame = 0;
unsigned long lastUpdate = 0;
const int frameDelay = 100; // Скорость (100 мс)

void setup() {
  Serial.begin(115200);
  
  if(!display.begin(SSD1306_SWITCHCAPVCC)) {
    Serial.println(F("Ошибка SSD1306"));
    for(;;);
  }
  
  // Принудительно включаем максимальную яркость (на всякий случай)
  display.ssd1306_command(SSD1306_SETCONTRAST);
  display.ssd1306_command(0xFF);
  display.dim(false);

  display.clearDisplay();
  display.setTextSize(1);      
  display.setTextColor(SSD1306_WHITE);
  display.setTextWrap(false); 
  
  // Тест при запуске (ОН ДОЛЖЕН ПОЯВИТЬСЯ!)
  display.setCursor(10, 30);
  display.print("Screen OK!");
  display.display();
  delay(2000); // Ждем 2 секунды
}

void loop() {
  if (millis() - lastUpdate > frameDelay) {
    lastUpdate = millis();
    
    display.clearDisplay();
    
    // ПОШАГОВАЯ ОТРИСОВКА КАЖДОГО СИМВОЛА (самый надежный метод)
    for (int row = 0; row < 8; row++) {
      const char* line = coinFrames[currentFrame][row];
      
      for (int col = 0; col < 21; col++) {
        // Рисуем каждый символ на своей позиции
        display.drawChar(col * 6, row * 8, line[col], SSD1306_WHITE, SSD1306_BLACK, 1);
      }
    }
    
    display.display();
    
    // Проверка для порта
    Serial.print("Frame: ");
    Serial.println(currentFrame);
    
    currentFrame++;
    if (currentFrame >= numFrames) {
      currentFrame = 0;
    }
  }
  delay(20); // Даем плате "продохнуть"
}