color_sensor
Classe color_sensor
Section titled “Classe 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.
Assinatura
Section titled “Assinatura”template <size_t n_color_points = 1> class color_sensor;Tipos auxiliares
Section titled “Tipos auxiliares”Além da classe, o header define:
struct color_pointcom os camposred,green,blueenatural.- acesso por índice (
point[0]atépoint[3]). - funções utilitárias
print_color()eprintln_color()para serial.
Construtor
Section titled “Construtor”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.
Métodos principais
Section titled “Métodos principais”read(color_point &point)
Section titled “read(color_point &point)”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).
int closest_color(color_point &point)
Section titled “int closest_color(color_point &point)”Compara a leitura atual com os pontos calibrados e retorna o índice mais próximo.
Exemplo 1 — Leitura básica
Section titled “Exemplo 1 — Leitura básica”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"); }}