Skip to content

color_sensor

A classe template color_sensor<n_color_points> faz a leitura de um sensor analógico de cor com iluminação RGB, permite calibrar pontos de referência e classificar a leitura atual pela cor mais próxima.

template <size_t n_color_points = 1> class color_sensor;

Além da classe, o header define:

  • struct color_point com os campos red, green, blue e natural.
  • acesso por índice (point[0] até point[3]).
  • funções utilitárias print_color() e println_color() para serial.
color_sensor(unsigned int sensor_pin,
unsigned int led_red_pin,
unsigned int led_green_pin,
unsigned int led_blue_pin);
  • sensor_pin: pino analógico do sensor de luz.
  • led_red_pin, led_green_pin, led_blue_pin: pinos dos LEDs de iluminação.

Lê o valor natural (point[3]) e depois os canais com cada LED ligado (point[0..2]).

size_t add_color_point(color_point &point)

Section titled “size_t add_color_point(color_point &point)”

Adiciona um ponto calibrado à memória interna (até n_color_points) e retorna o índice cadastrado.

void get_color_point(size_t index, color_point &point)

Section titled “void get_color_point(size_t index, color_point &point)”

Recupera um ponto calibrado pelo índice.

int32_t color_difference(color_point &point1, color_point &point2)

Section titled “int32_t color_difference(color_point &point1, color_point &point2)”

Calcula diferença absoluta (soma nos canais RGB).

Compara a leitura atual com os pontos calibrados e retorna o índice mais próximo.

Baseado em compkit/examples/calibration_print/calibration_print.ino.

#include <compkit.h>
color_sensor<0> sensorCor(A0, 2, 3, 4);
void setup() {
Serial.begin(9600);
}
void loop() {
color_point leituraCor;
sensorCor.read(leituraCor);
println_color(leituraCor);
delay(100);
}

Exemplo 2 — Calibração e identificação

Section titled “Exemplo 2 — Calibração e identificação”

Baseado em compkit/examples/basic_read/basic_read.ino.

#include <compkit.h>
color_point verdeCali = {120, 600, 120, 100};
color_point brancoCali = {600, 600, 600, 100};
color_sensor<2> sensorCor(A0, 2, 3, 4);
int verde;
int branco;
void setup() {
Serial.begin(9600);
verde = sensorCor.add_color_point(verdeCali);
branco = sensorCor.add_color_point(brancoCali);
}
void loop() {
color_point leituraCor;
sensorCor.read(leituraCor);
int corAtual = sensorCor.closest_color(leituraCor);
if (corAtual == verde) {
Serial.println("sensorCor: Verde");
} else if (corAtual == branco) {
Serial.println("sensorCor: Branco");
}
}