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("Программа остановлена")