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


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

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

#define OLED_CS     10
#define OLED_DC     9
#define OLED_RESET  8

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &SPI, OLED_DC, OLED_RESET, OLED_CS);

// Идеально ровная монета (13 символов в ширину, 8 строк в высоту)
const char* coinFrames[8][8] = {
  { "       .-@@@-.       ", "     .:#@@@@@#:.     ", "    .:@@@@@@@@@:.    ", "    :@@@#@@@#@@@:    ", "    :@@@#@@@#@@@:    ", "    .:@@@@@@@@@:.    ", "     .:#@@@@@#:.     ", "       .-@@@-.       " },
  { "        .-@@-.       ", "      .:##@@##:.     ", "     .:@@@@@@@@:.    ", "     :@@@#@@#@@@:    ", "     :@@@#@@#@@@:    ", "     .:@@@@@@@@:.    ", "      .:##@@##:.     ", "        .-@@-.       " },
  { "         .-@-.       ", "       .:#@@@#:.     ", "      .:@@@@@@@:.    ", "      :@@@#@@@#:     ", "      :@@@#@@@#:     ", "      .:@@@@@@@:.    ", "       .:#@@@#:.     ", "         .-@-.       " },
  { "          .-.        ", "        .:@@@@:.     ", "        :@@@@@:      ", "        :@@#@@:      ", "        :@@#@@:      ", "        :@@@@@:      ", "        .:@@@@:.     ", "          .-.        " },
  { "           .         ", "          :@:        ", "          :#:        ", "          :#:        ", "          :#:        ", "          :#:        ", "          :@:        ", "           .         " },
  { "          .-.        ", "        .:@@@@:.     ", "        :@@@@@:      ", "        :@@#@@:      ", "        :@@#@@:      ", "        :@@@@@:      ", "        .:@@@@:.     ", "          .-.        " },
  { "         .-@-.       ", "       .:#@@@#:.     ", "      .:@@@@@@@:.    ", "      :@@@#@@@#:     ", "      :@@@#@@@#:     ", "      .:@@@@@@@:.    ", "       .:#@@@#:.     ", "         .-@-.       " },
  { "        .-@@-.       ", "      .:##@@##:.     ", "     .:@@@@@@@@:.    ", "     :@@@#@@#@@@:    ", "     :@@@#@@#@@@:    ", "     .:@@@@@@@@:.    ", "      .:##@@##:.     ", "        .-@@-.       " }
};

const int numFrames = 8;
int currentFrame = 0;
unsigned long lastUpdate = 0;
const int frameDelay = 80; 

void setup() {
  Serial.begin(115200);
  
  if(!display.begin(SSD1306_SWITCHCAPVCC)) {
    Serial.println(F("Ошибка SSD1306"));
    for(;;);
  }
  
  display.clearDisplay();
  display.setTextSize(1);      
  display.setTextColor(SSD1306_WHITE);
  display.setTextWrap(false); 
  
  // Выводим тестовый текст при запуске, чтобы проверить экран
  display.setCursor(10, 30);
  display.print("Screen OK!");
  display.display();
  delay(1000); // Показываем 1 секунду
}

void loop() {
  if (millis() - lastUpdate > frameDelay) {
    lastUpdate = millis();
    
    display.clearDisplay();
    
    // КОПИРУЕМ СТРОКИ В RAM, ЧТОБЫ ИЗБЕЖАТЬ ОШИБОК SPI
    for (int i = 0; i < 8; i++) {
      display.setCursor(0, i * 8);
      String line = coinFrames[currentFrame][i]; 
      display.print(line);
    }
    
    // Ставим точку в углу (индикатор того, что экран обновляется)
    display.drawPixel(127, 63, SSD1306_WHITE);
    
    display.display();
    
    // Выводим в порт для проверки
    Serial.print("Frame: ");
    Serial.println(currentFrame);
    
    currentFrame++;
    if (currentFrame >= numFrames) {
      currentFrame = 0;
    }
  }
  delay(10);
}