18 de março de 2023

Semáforo com RGB WS2812

Um exemplo de semáforo utilizando a barra de leds RGB WS2812.

Através do controle da intensidade do brilho dos leds controlamos a cor que estará em evidência.

A biblioteca Adafruit_NeoPixel.h é a responsável pelo controle dos leds.

Sintaxe:
setPixelColor(LED, ValorVermelho, ValorVerde, ValorAzul);
 
O valor de LED deve ser de 0 a 7, indicando qual estará controlando.
Os valores das cores (Red, Green, Blue) devem estar entre 0 e 255. Sendo 0 como desligado e 255 o brilho máximo.

O amarelo é formado aplicando a mesma quantidade de luz vermelha e luz verde.

Abaixo o código fonte:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*---------------------------------------------------------
  Programa : SEMÁFORO RGB WS2812
  Autor    : Fellipe Couto [ http://www.efeitonerd.com.br ]
  Data     : 18/03/2023
  ---------------------------------------------------------*/
#include <Adafruit_NeoPixel.h>  //https://github.com/adafruit/Adafruit_NeoPixel

#define RGB_PIN 2     //Pino de conexão da barra de leds
#define RGB_PIXELS 8  //Número de leds rgb
#define RGB_MIN 1     //Luminosidade mínima do led
#define RGB_MAX 60    //Luminosidade máxima do led

Adafruit_NeoPixel pixels(RGB_PIXELS, RGB_PIN);  //Barra leds RGB WS2812

void setup() {
  pixels.begin();  //Inicializa a barra de leds RGB WS2812
}

void loop() {
  light('g', 5);  //Verde por 5 segundos
  light('y', 4);  //Amarelo por 4 segundos
  light('r', 8);  //Vermelho por 8 segundos
}

void light(char color, int timeSec) {
  //Todos com brilho mínimo
  pixels.setPixelColor(0, 0, RGB_MIN, 0);        //Led, R, G, B (VERDE)
  pixels.setPixelColor(1, 0, RGB_MIN, 0);        //Led, R, G, B (VERDE)
  pixels.setPixelColor(2, 0, RGB_MIN, 0);        //Led, R, G, B (VERDE)
  pixels.setPixelColor(3, RGB_MIN, RGB_MIN, 0);  //Led, R, G, B (AMARELO)
  pixels.setPixelColor(4, RGB_MIN, RGB_MIN, 0);  //Led, R, G, B (AMARELO)
  pixels.setPixelColor(5, RGB_MIN, 0, 0);        //Led, R, G, B (VERMELHO)
  pixels.setPixelColor(6, RGB_MIN, 0, 0);        //Led, R, G, B (VERMELHO)
  pixels.setPixelColor(7, RGB_MIN, 0, 0);        //Led, R, G, B (VERMELHO)

  //Acende a cor selecionada em brilho mais forte
  if (color == 'g') {                              //Green
    pixels.setPixelColor(0, 0, RGB_MAX, 0);        //Led, R, G, B (VERDE)
    pixels.setPixelColor(1, 0, RGB_MAX, 0);        //Led, R, G, B (VERDE)
    pixels.setPixelColor(2, 0, RGB_MAX, 0);        //Led, R, G, B (VERDE)
  } else if (color == 'y') {                       //Yellow
    pixels.setPixelColor(3, RGB_MAX, RGB_MAX, 0);  //Led, R, G, B (AMARELO)
    pixels.setPixelColor(4, RGB_MAX, RGB_MAX, 0);  //Led, R, G, B (AMARELO)
  } else if (color == 'r') {                       //Red
    pixels.setPixelColor(5, RGB_MAX, 0, 0);        //Led, R, G, B (VERMELHO)
    pixels.setPixelColor(6, RGB_MAX, 0, 0);        //Led, R, G, B (VERMELHO)
    pixels.setPixelColor(7, RGB_MAX, 0, 0);        //Led, R, G, B (VERMELHO)
  }
  pixels.show();
  delay(timeSec * 1000);
}

Nenhum comentário:

Postar um comentário