#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);
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("ОШИБКА: Экран не найден! Проверь провода."));
for(;;); // Зависаем, если экран не подключен
}
Serial.println(F("Экран успешно запущен. Начинаем анимацию."));
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setTextWrap(false);
}
void loop() {
if (millis() - lastUpdate > frameDelay) {
lastUpdate = millis();
// Выводим в монитор порта номер кадра (для проверки)
Serial.print("Рисуем кадр: ");
Serial.println(currentFrame);
display.clearDisplay();
for (int i = 0; i < 8; i++) {
display.setCursor(0, i * 8);
display.print(coinFrames[currentFrame][i]);
}
display.display();
currentFrame++;
if (currentFrame >= numFrames) {
currentFrame = 0;
}
}
// Небольшая пауза, чтобы плата не зависала
delay(10);
}