Помогите доделать код к датчику цвета

Я если честно вообще удивлен) в интернете есть код готовый но при поднесении к датчику красного или синего он пишет цвет на дисплее , но нигде нет просто в места синего срабатывания реле

а потом цвет изменится на единицу и ничего не сработает?

Замени Serial.print на digitalWrite…

чтобы одно поменять на другое, достаточно позалипать полчаса в методичке “Ардуино для чайников”
Яб вам советовал так и поступить… даже если вы закажете кому-то код за денежку - очень полезно хотя бы вчерне понимать, что там написано

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "Adafruit_TCS34725.h"

#define RED 0
#define GREEN 1
#define BLUE 2

// погрешность при определении цвета
#define TOLERANCE 16

// контакт кнопки
const byte selectPin = 12;

int colors[3][3]; // массив для запоминания цветов
char *color_names[3] = {"RED","GREEN","BLUE"}; // имена цветов для вывода на дисплей

Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);
Adafruit_SSD1306 display(128, 64, &Wire, 4);

void saveColor( byte color ){
    float red, green, blue;

    delay(60); // пауза 60мс, чтобы дать время датчику подготовить данные

    tcs.getRGB(&red, &green, &blue); // получаем RGB компоненты из датчика

    // сохраняем три цветовых компонента в массив
    colors[color][RED] = int(red);
    colors[color][GREEN] = int(green);
    colors[color][BLUE] = int(blue);
}

byte detectColor(){
    float red, green, blue;

    delay(60); // пауза 60мс, чтобы дать время датчику подготовить данные

    tcs.getRGB(&red, &green, &blue); // получаем RGB компоненты из датчика

    byte color = 255;
    // перебираем все три запомненных цвета
    // и проверяем на совпадение с учетом погрешности
    for(byte i=0; i<3; i++){
        if(abs(red-colors[i][RED])<TOLERANCE &&
           abs(green-colors[i][GREEN])<TOLERANCE &&
           abs(blue-colors[i][BLUE])<TOLERANCE){
            color = i;
            break;
           }
    }

    return color;
}

void setup() {
    tcs.begin(); // активируем датчик
    display.begin(SSD1306_SWITCHCAPVCC, 0x3D); // активируем дисплей

    pinMode(selectPin, INPUT_PULLUP);

    display.setTextSize(1);
    display.setTextColor(SSD1306_WHITE);

    // по очереди просим пользователя
    // поднести объекты разных цветов для запоминания
    for(byte i=0; i<3; i++){
        display.clearDisplay();
        display.setCursor(35, 31);
        display.print(F("Show "));
        display.println(color_names[i]);
        display.display();

        while( digitalRead(selectPin) ){
            // ждём нажатия кнопки
        }
        saveColor(i);

        display.clearDisplay();
        display.setCursor(35, 31);
        display.println(F("OK!"));
        display.display();

        delay(1000);
    }
}

void loop() {
    display.clearDisplay();
    display.setCursor(25, 31);
    display.println(F("Show any color"));
    display.display();

    while( digitalRead(selectPin) ){
        // ждём нажатия кнопки
    }

    byte color = detectColor();

    display.clearDisplay();
    display.setCursor(35, 31);
    
    if( color == 255 ){
        display.print(F("Bad color")); // если цвет не определился
    } else {
        display.print(F("Color is "));
        display.println(color_names[color]);
    }
    display.display();

    delay(5000);
}

вот есть код просто нужно задать переменные как я понял и в место дисплея сделать реле на 13 пин к примеру

там делей 5000, у тебя коробок за это время на 5 метров просунется

Мне нужно изменить этот код чтобы я мог сам в будущем корректировать переменные цвета допустим переменные (синий 10 -15; красный 100-115 ; зеленый 15-30) цвет к примеру получается красный . Как появляется цвет подходящий под переменные то есть синий от 10 до 15 и тд. реле щелкает с промежутком 1 секунду 2 раза и все. Коробки движение и все прочее это другой вопрос. от вас требуется переделать код и указать где переменные можно менять и все
1 код определяет цвет

// создаём объект для работы с модулем, указываем настройки

Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);

void setup() {
    Serial.begin(9600); // запускаем обмен по последовательному порту
    tcs.begin(); // активируем датчик
    delay(60);  // ждём 60 мс, пока датчик собирает первые данные
}
void loop() {
    float red, green, blue;

    tcs.getRGB(&red, &green, &blue); // запрашиваем у датчика цветовые компоненты

    // вывод RGB компонентов в последовательный порт
    Serial.print("R:\t"); Serial.print(int(red)); 
    Serial.print("\tG:\t"); Serial.print(int(green)); 
    Serial.print("\tB:\t"); Serial.print(int(blue));
    Serial.print("\n");

    delay(60);  // ждём 60 мс, пока датчик собирает новые данные
} ``` 

это код для того чтобы диод горел цветом который подносят к датчику , в место этого мне нужно чтобы при определенном цвете срабатывало реле двумя кликами интервалом в секунду на 9 пине или 10 или 11 без разницы .

```#include <Wire.h>
#include "Adafruit_TCS34725.h"

// контакты RGB светодиода
const byte redPin = 11;
const byte greenPin = 10;
const byte bluePin = 9;

byte gammatable[256]; // таблица гамма-коррекции
byte ltc[3] = {1, 0.95, 0.75}; // коэффициенты коррекции цветовой температуры

Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);

void setup() {
    Serial.begin(9600);

    tcs.begin(); // активируем датчик

    pinMode(redPin, OUTPUT);
    pinMode(greenPin, OUTPUT);
    pinMode(bluePin, OUTPUT);

    // заполняем таблицу гамма-коррекции
    for (int i=0; i<256; i++) {
        float x = i;
        x /= 255;
        x = pow(x, 2.5);
        x *= 255;

        gammatable[i] = x;
    }
}

void loop() {
    float red, green, blue;
  
    delay(60); // пауза 60мс, чтобы дать время датчику подготовить данные

    tcs.getRGB(&red, &green, &blue); // получаем RGB компоненты из датчика

    // выводим значения RGB компонент в порт
    Serial.print("R:\t"); Serial.print(int(red)); 
    Serial.print("\tG:\t"); Serial.print(int(green)); 
    Serial.print("\tB:\t"); Serial.print(int(blue));
    Serial.print("\n");

    // задаём ШИМ для отдельных цветов RGB светодиода
    analogWrite( redPin, gammatable[ (int)red*ltc[0] ]);
    analogWrite( greenPin, gammatable[ (int)green*ltc[1] ]);
    analogWrite( bluePin, gammatable[ (int)blue*ltc[2] ]);
} ``` 
``` ```

а сколько стоит?

я не знаю)) но думаю не дорого ))

От нас требуется? Это когда это я такой контракт подписывал? b707, ты подписывал чтоль?

ну это образно) в плане что нужно сделать ))) и сколько за эту работу нужно заплотить)

перенесли же тему в раздел ищу исполнителя)) обычно к работе выдвигаются требования ) за эти требования люди получают деньги) пожелания не обязывают двух сторон выполнять какие либо обязаттельства) :wink:

Ох, пардоньте. Не заметил, что перенесли в «ищу исполнителя»

вы как человек знающий скорее всего ) можете ответить? разве этот код сложно переделать ?) задать 3 переменных одного цвета и при их совпадении ± пару единиц или один в один включить и выключить реле 2 раза) ?

Несложно, но и неинтересно за 500р.

меня вполне устроит) напишите что и как в личку

Устроит, так устроит.

Осталось дождаться того, кому интересно за 500р в день репетиторствовать, что явно придётся делать.

1 лайк

Согласен

Предлагаю простейший алгоритм.
Рисуем массив на всю разрядность цветов.
Делаем “съем” цвета необходимой метки, вносим корректировку ±10единиц. заносим в массив все цвета в ближайшей области. Типа эталонные цвета
Потом сравниваем эти значения с полученными в результате работы.
Бонусом получаем “обучающую” систему.

1 лайк

Спасибо )