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


import serial
import time
import mss
import numpy as np

# Настройки
PORT = 'COM8'  # ПОМЕНЯЙ НА СВОЙ ПОРТ! (COM3, COM4, COM5...)
BAUD = 115200
NUM_LEDS = 56

# Подключаемся к Arduino
try:
    arduino = serial.Serial(PORT, BAUD, timeout=1)
    time.sleep(2)
    print("Подключено к Arduino")
except:
    print("Ошибка подключения! Проверь порт")
    exit()

sct = mss.mss()

# Координаты области экрана (левый верхний угол монитора)
MONITOR_LEFT = 0
MONITOR_TOP = 0
MONITOR_RIGHT = 1920  # ШИРИНА ТВОЕГО ЭКРАНА
MONITOR_BOTTOM = 1080 # ВЫСОТА ТВОЕГО ЭКРАНА

def send_color(r, g, b):
    """Отправить один цвет на все светодиоды"""
    # Формируем данные: префикс "Ada", 3 служебных байта, и по 3 байта на каждый светодиод
    data = bytearray(b'Ada')
    data.append(0)   # hi
    data.append(0)   # lo
    data.append(0x55 ^ 0 ^ 0)  # chk = hi ^ lo ^ 0x55

    # Для каждого светодиода отправляем один и тот же цвет
    for _ in range(NUM_LEDS):
        data.append(r)
        data.append(g)
        data.append(b)

    arduino.write(data)

try:
    while True:
        # Делаем скриншот
        screenshot = sct.grab(sct.monitors[1])  # 1 - основной монитор
        img = np.array(screenshot)

        # Усредняем цвета по всей области
        avg_color = img.mean(axis=(0, 1))
        r = int(avg_color[2])  # RGB -> BGR в OpenCV
        g = int(avg_color[1])
        b = int(avg_color[0])

        # Отправляем на Arduino
        send_color(r, g, b)
        print(f"Отправлено: R={r} G={g} B={b}")

        time.sleep(0.1)  # Обновление 10 раз в секунду

except KeyboardInterrupt:
    arduino.close()
    print("Программа остановлена")