Всем хелло) Вообще дело такое: как я понял на адреску нельзя вывести серый цвет (r = 40 g = 40 b = 40). Пробывал вывести - то розовый выдаёт то ещё какой. Я написал код на питоне, для определения цвета и вывода его в com порт. Ардуинка в своё же время парсит все данные и выводит на ленту. Сейчас возможности скинуть код нет, так как пишу с телефона. Мне нужно чтобы ардуинка сверяла есть ли серы цвет, Если есть то на ленте был черный. Если r g b равны друг другу и их значения меньше 255 (то есть если 34 34 34 то серый а если 255 255 255 то уже не серый а белый). Как мне это реализовать? Помогите пожалуйста.
Вообще-то для этого Ардуинки и ленты мало - нужен цветной фотодатчик.
Начни с формулировки задачи.
if(r == g && g == b && b < 255)
{
то серый
}
else if(r == b && b == g && b == 255)
{
то белый
}
А так?
Осталось написать третью ветку с b > 255.
Такого в поставленной задаче не нашёл
Если речь про тип байт, то шутку понял)))
if(r == g && g == b)
{
if(b < 255)
то серый
то белый
}
Теперь забыл ветку else.
Французский математик (не помню фамилию) сформулировал общий алгоритм решения любой задачи, состоящий из четырех этапов:
- Понять задачу.
- Составить план решения.
- Выполнить план.
- Проанализировать результаты.
Так вот, меня всегда поражали люди, пытающиеся решить задачу, начиная сразу с третьего этапа.
Светодиод - это источник света. Вот про что, а про серый свет я никогда не слышал ))
это точно)
Я кок раз и не хочу что фотодатчики висели на мониторе через шлейфы. После видео Гувера на эту тему так и вообще не очень будет + если красиво то крепления к датчикам ( у меня не 3D принтера)
Попробую
К этому постараюсь сам else добавить)
#define TFT_GREY 0x5AEB // New colour
Тут еще какое дело - смотреть на цвет прямо на светодиоде бессмысленно, цвета должны смешаться. А для этого их нужно спроецировать на белый матовый рассеиватель. И сам рассеиватель при этом желательно держать на некотором удалении от светодиода. Иначе глаз по любому будет видеть три источника света, а уж какой из них он будет воспринимать сильнее - вопрос скорее к устройству глаза и обрабатывающего центра в мозгу, чем к светодиоду
Какой рассеиватель посоветуете? А то я не шарю
Самый простой вариант - лист белой бумаго
Вот, когда будет, тогда и приходите - поговорим. Куда торопитесь?
А мы-то чем провинились? Пишите с пылесоса, если с телефона не можете, но код вставляйте нормально.
Не чем, просто предупредил)
Спасибо
Ну и как вы думаете: Новая проблема. Первый светодиод начало колбасить. Выдаёт ерунду какуюта. Вот код:
import pyautogui as pg
from time import sleep
import serial
port = "COM7"
baudrate = 9600
ser = serial.Serial(port, baudrate=baudrate)
def serialSend(data):
txs = ""
for val in data:
txs += str(val)
txs += ','
txs = txs[:-1]
txs += ';'
txs.replace('(', '')
txs.replace(')', '')
txs.replace(' ', '')
ser.write(txs.encode())
while 1:
shot = pg.screenshot()
sleep(0.2)
val = shot.getpixel((2520, 939))
serialSend([0, val])
val1 = shot.getpixel((2445, 939))
serialSend([1, val1])
val2 = shot.getpixel((2370, 939))
serialSend([2, val2])
Вот на питоне (пока что только 2 светодиода)
//----------------------НАСТРОЙКИ-----------------------
#define LED_PIN 13 // пин, к которому подключена лента
#define LED_NUM 118 // число светодиодов в ленте
//----------------------НАСТРОЙКИ-----------------------
#include <GParser.h>
#include "FastLED.h"
CRGB leds[LED_NUM];
void setup() {
Serial.begin(9600);
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, LED_NUM);
FastLED.setBrightness(50);
}
void loop() {
if (Serial.available()) {
char buf[20];
Serial.readBytesUntil(';', buf, 20);
GParser data(buf, ',');
int ints[5];
data.parseInts(ints);
if(ints[1] == ints[2] && ints[2] == ints[3] && ints[3] < 255)
{
leds[ints[0]].setRGB(0, 0, 0);
}
else if(ints[1] == ints[3] && ints[3] == ints[2] && ints[3] == 255)
{
leds[ints[0]].setRGB(ints[1], ints[2], ints[3]);
}else{
leds[ints[0]].setRGB(ints[1], ints[2], ints[3]);
}
}
FastLED.show();
}
на ардуинке