Загрузка данных
#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); // Даем плате "продохнуть"
}