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


import machine
import ssd1306
import time

# 1. Настройка I2C для OLED дисплея (контакты D21 и D22)
sda_pin = machine.Pin(21)
scl_pin = machine.Pin(22)
i2c = machine.I2C(0, sda=sda_pin, scl=scl_pin, freq=400000)

# Инициализация дисплея 128x64
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

# 2. Настройка контактов кнопок с внутренней подтяжкой к питанию
btn1 = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_UP)
btn2 = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_UP)
btn3 = machine.Pin(25, machine.Pin.IN, machine.Pin.PULL_UP)
btn4 = machine.Pin(26, machine.Pin.IN, machine.Pin.PULL_UP)

# 3. Кадры анимации кота (размер 24x24 пикселя)
# Кадр 1: Кот поднял левые лапки
cat_frame1 = [
    0x00, 0x18, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x42, 0x00,
    0x01, 0x81, 0x80, 0x02, 0x42, 0x40, 0x04, 0x3C, 0x20, 0x04, 0x00, 0x20,
    0x08, 0x18, 0x10, 0x08, 0x24, 0x10, 0x08, 0x24, 0x10, 0x04, 0x18, 0x20,
    0x04, 0x00, 0x20, 0x02, 0x00, 0x40, 0x01, 0x81, 0x80, 0x00, 0x7E, 0x00,
    0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x42, 0x00,
    0x00, 0x42, 0x00, 0x00, 0x81, 0x00, 0x01, 0x81, 0x80, 0x00, 0x00, 0x00
]

# Кадр 2: Кот поднял правые лапки
cat_frame2 = [
    0x00, 0x18, 0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x42, 0x00,
    0x01, 0x81, 0x80, 0x02, 0x42, 0x40, 0x04, 0x3C, 0x20, 0x04, 0x00, 0x20,
    0x08, 0x18, 0x10, 0x08, 0x24, 0x10, 0x08, 0x24, 0x10, 0x04, 0x18, 0x20,
    0x04, 0x00, 0x20, 0x02, 0x00, 0x40, 0x01, 0x81, 0x80, 0x00, 0x7E, 0x00,
    0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x24, 0x00,
    0x00, 0x24, 0x00, 0x00, 0x81, 0x00, 0x01, 0x81, 0x80, 0x00, 0x00, 0x00
]

# Функция для отрисовки кадра из массива байт
def draw_frame(frame, x_offset, y_offset):
    for row in range(24):
        # Каждый ряд состоит из 3 байт (24 пикселя)
        b1 = frame[row * 3]
        b2 = frame[row * 3 + 1]
        b3 = frame[row * 3 + 2]
        
        # Объединяем в одно 24-битное число
        line = (b1 << 16) | (b2 << 8) | b3
        
        for col in range(24):
            # Проверяем каждый бит
            if line & (1 << (23 - col)):
                oled.pixel(x_offset + col, y_offset + row, 1)

# Начальная скорость анимации (в секундах)
speed = 0.2 
toggle = True

print("Анимация запущена!")

while True:
    # Меняем скорость в зависимости от нажатой кнопки
    if btn1.value() == 0:
        speed = 0.1  # Быстро
    elif btn2.value() == 0:
        speed = 0.2  # Нормально
    elif btn3.value() == 0:
        speed = 0.4  # Медленно
    elif btn4.value() == 0:
        speed = 0.6  # Очень медленно

    oled.fill(0) # Очищаем экран
    
    # Выводим статус кнопок вверху экрана
    oled.text("B1:{} B2:{} B3:{}".format(not btn1.value(), not btn2.value(), not btn3.value()), 0, 0)
    
    # Рисуем кота по центру (X=52, Y=24)
    if toggle:
        draw_frame(cat_frame1, 52, 24)
    else:
        draw_frame(cat_frame2, 52, 24)
        
    oled.show() # Обновляем дисплей
    
    toggle = not toggle # Переключаем кадр
    time.sleep(speed)   # Задержка между кадрами