Farol de LED's - Arduino
Tags: arduino
Published: 2020-12-20 20:53:29

Uma das coisas mais legais de mexer com Arduino é ver seu código “ganhando vida”. A primeira LED que acende é uma vitória.

![LED Vermelho](https://dev-to-uploads.s3.amazonaws.com/i/k2eq7vgp39rcfl7r32q1.gif)

Um bom exemplo pra começar a brincar com luzes no Arduino é justamente fazer um semáforo. A ideia é simples, três cores: vermelho, amarelo e verde sendo acesas em sequência. Ainda é possível adicionar um modo de atenção com um amarelo piscante.

O projeto abaixo é um pouco maior, em termos de componentes e linhas de código, mas o princípio é o mesmo. Eu fiz um cruzamento onde o farol de uma das ruas só acende se o farol da outra estiver fechado

**Lista de Componentes:**
1 – Arduino Uno R3 (ou similar)
4 – LED’s na cor vermelha
4 – LED’s na cor amarela
4 – LEd’s na cor Verde
12 – Resistors de 220 Ω

Pra ficar mais fácil, eu defini um nome para cada LED e sua respectiva porta:

```java
#define red1    13
#define yel1    12
#define green1  11
#define red2    10
#define yel2    9
#define green2  8
#define red3    7
#define yel3    6
#define green3  5
#define red4    4
#define yel4    3
#define green4  2
```

Assim, na hora de fazer a instalação, ou seja, informar ao Arduino qual porta será usada e com qual finalidade, ficará mais fácil:

```java
void instalaLed()
{   
  pinMode(red1, OUTPUT);
  pinMode(yel1, OUTPUT);
  pinMode(green1, OUTPUT);
   
  pinMode(red2, OUTPUT);
  pinMode(yel2, OUTPUT);
  pinMode(green2, OUTPUT);
   
  pinMode(red3, OUTPUT);
  pinMode(yel3, OUTPUT);
  pinMode(green3, OUTPUT);
   
  pinMode(red4, OUTPUT);
  pinMode(yel4, OUTPUT);
  pinMode(green4, OUTPUT);
     
}
```

Eu preferi criar um método para instalação e informar este método dentro do void setup(). Acredito que fica mais organizado.


O esquema do projeto ficou assim:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/lh8akf6zda0evjv8aj90.png)


Eu criei 6 métodos:

```java
void rua1e3Aberta()
```
Neste método o tráfego entre as ruas 1 e 3 está livres, com suas respectivas LED’s verdes ligadas. Nas ruas 2 e 4, o farol está fechado.

```java
void rua1e3Fechando()
```
Neste método, começa a transição de sinalização. O vermelho das ruas 2 e 4 permanece ligado, entretanto, neste momento os faróis verdes são desligados e os faróis amarelos das ruas 1 e 3 são acesos, indicando que o ciclo está próximo de fechar.

```java
void tudoFechado()
```
Eu poderia simplesmente migrar do vermelho para o verde, e liberar o tráfego na outra rua, mas achei que ficaria abrupto. Fiz esse método para manter os quatro faróis vermelhos ligados por alguns segundos, antes de chamar a próxima sequência.

```java
rua2e4Aberta e rua2e4Fechando
```
São basicamente os mesmos métodos das ruas 1 e 3, com o mesmo comportamento, só que agora referenciando o outro lado do cruzamento.

```java
void tudoDesligado()
```
Achei que seria interessante um método que eu poderia desligar todas as luzes, antes de chamar o Amarelo Piscante. Este método serve pra isso.

```java
void amareloPiscante()
```

Este é o sinal de alerta para tirar o pé do acelerador e passar com calma e atenção no cruzamento. Neste método, as luzes amarelas se alternam entre ligado e ligado em um looping que será executado 10 vezes.

Para ver o projeto funcionando, acesse o link no meu [Tinkercad](https://www.tinkercad.com/embed/ccKShtKuRjy)


O código fonte completo está no meu [GitHub:] (https://github.com/johnnymeneses/iot-projetos/tree/main/Cruzamento_Semaforo)