25 de abril de 2020

Sequencial de LEDs com Fade

Com controle de brilho e estruturas de repetições vamos acionar seis leds em um sequencial.


Utilizamos a modulação por largura de pulso, o PWM (Pulse-Width Modulation), para controlar a intensidade dos leds.

O Arduino possui algumas portas (pinos) que permitem o controle PWM.

Quando controlamos os pinos como saída, definimos como LOW ou HIGH (0v ou 5v), porém nos pinos analógicos podemos controlar com mais precisão, alterando de 0v até 5v.

A sintaxe é:
analogWrite(pino, valor);

O valor que devemos usar está entre 0 e 255.
Dessa forma é possível controlar a intensidade do led.

Para ver mais projetos e melhorar o entendimento, use a busca com o marcador PWM.

Percebemos também o quanto as estruturas de repetições são muito utilizadas, reduzindo muito o tamanho do código fonte.

Referências:
https://pt.wikipedia.org/wiki/Modula%C3%A7%C3%A3o_por_largura_de_pulso
https://www.arduino.cc/en/Tutorial/PWM
https://www.arduino.cc/reference/pt/language/functions/analog-io/analogwrite/

Segue o esquema elétrico e 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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*---------------------------------------------------------
  Programa : SEQUENCIAL DE LEDS COM FADE
  Autor    : Fellipe Couto [ http://www.efeitonerd.com.br ]
  Data     : 25/04/2020
  ---------------------------------------------------------*/
const int led[6] = {3, 5, 6, 9, 10, 11};

void setup() {
  //Configura os pinos de conexão dos leds
  for (int i = 0; i < 6; i++) {
    pinMode(led[i], OUTPUT);
  }
}

void loop() {
  //Led por led
  for (int i = 0; i < 6; i++) {

    //Loop para fade do led - Acende
    for (int y = 10; y <= 255; y += 5) {
      analogWrite(led[i], y);
      delay(5);
    }
  }

  //Led por led
  for (int i = 0; i < 6; i++) {

    //Loop para fade do led - Apaga
    for (int y = 245; y >= 0; y -= 5) {
      analogWrite(led[i], y);
      delay(5);
    }
  }

  //Led por led - Invertido
  for (int i = 5; i >= 0; i--) {

    //Loop para fade do led - Acende
    for (int y = 10; y <= 255; y += 5) {
      analogWrite(led[i], y);
      delay(15);
    }
  }

  //Loop para fade do led - Apaga
  for (int y = 245; y > 0; y -= 5) {
    //Led por led
    for (int i = 0; i < 6; i++) {
      analogWrite(led[i], y);
    }
    delay(40);
  }
  delay(500);
  
  //Loop para fade do led - Acende
  for (int y = 1; y <= 255; y += 2) {
    //Led por led
    for (int i = 0; i < 6; i++) {
      analogWrite(led[i], y);
    }
    delay(30);
  }

  //Led por led - De 2 em 2
  for (int i = 0; i < 3; i++) {

    //Loop para fade do led - Apaga
    for (int y = 245; y >= 0; y -= 5) {
      analogWrite(led[i], y);
      analogWrite(led[5 - i], y);
      delay(40);
    }
  }

  delay(1000);
}

Nenhum comentário:

Postar um comentário