Hoje vamos montar um circuito que simula a seta de um carro.
O código pode ser baixado no GitHub. Ao abrir, basta clicar no ícone para copiar (fica no canto superior direito do código).
Discutindo o código
Iniciamos o código com um comentário, no qual apresentamos como deve ser o circuito (conectando um LED na porta digital 2 e outro na digital 3; conectando os botões para acionar as setas nas portas digitais 4 e 5).
/* LED esquerdo -> digital 2 LED direito -> digital 3 botão led esquerdo -> 4 botão led direito -> 5 */
A seguir vemos as variáveis que correspondem às conexões elétricas.
int LEDesquerdo = 2, LEDdireito = 3, botaoEsquerdo = 4, botaoDireito = 5;
int seta = 0; //se 1 liga a esquerda, se 2 liga a direita
Note que criamos uma variável chamada seta. Ela servirá para identificar qual das setas deve ser acionada.
No setup´ iniciamos a comunicação serial para verificarmos se os botões estão funcionando. Note que a entrada dos botões estão definidas como INPUT_PULLUP, que significa que a porta digital ficará em HIGH quando não pressionamos o botão e em LOW quando pressionamos. Isso implica que devemos conectar o GND aos botões.
void setup() { Serial.begin(9600); pinMode(LEDesquerdo, OUTPUT); pinMode(LEDdireito, OUTPUT); pinMode(botaoEsquerdo, INPUT_PULLUP); pinMode(botaoDireito, INPUT_PULLUP); }
No loop iniciamos com um Serial.println para vemos se os botões estão funcionando. Para isso, abra o monitor serial para ver se está alternando entre 0 e 1 ao pressionar os botões. Se estiver sempre mostrando somente zero, você ligou incorretamente o fio GND no(os) botão(ões). Tente mudar isso para ver se resolve.
void loop() { Serial.println(digitalRead(botaoEsquerdo)); Serial.println(digitalRead(botaoDireito));
Agora vamos usar a variável seta: se pressionarmos o botão esquerdo, a variável guarda o número 1 e se pressionarmos o botão da direita esta variável muda para 2.
Note que ao colocar if (!digitalRead(botaoEsquerdo)), o que está dentro do if será verdadeiro (True) (ou 1 ou ainda HIGH) quando pressionarmos o botão, uma vez que quando pressionamos o botaoEsquerdo terá valor 0 (falso ou False ou LOW) e o símbolo “!” nega isso (ou seja, se botaoEsquerdo for 0, o argumento do if será 1). Por outro lado, se não pressionamos, botaoEsquerdo valerá 1 (ou True ou LOW) e
!digitalRead(botaoEsquerdo) valerá 0 (ou False ou LOW).
Lembre-se que o que está abaixo do if (entre as chaves {}) só será executado se o argumento do if for True.
if (!digitalRead(botaoEsquerdo)) { seta = 1; } if (!digitalRead(botaoDireito)) { seta = 2; }
O final do código começa com um delay de 300 milisegundos (ou 0,3 segundo) que servirá para manter o LED escolhido apagado por este tempo. Este delay foi colocado de forma estratégica para que o pressionar do botão seja reconhecido antes da espera (lembre-se que o código fica sendo executado em loop, ou seja, após executar todo o código, esta parte será executada novamente.
delay(300); if (seta == 1) { digitalWrite(LEDesquerdo, HIGH); delay(400); digitalWrite(LEDesquerdo, LOW); } if (seta == 2) { digitalWrite(LEDdireito, HIGH); delay(400); digitalWrite(LEDdireito, LOW); } }
Os ifs servem para ligar a seta correspondente, esperar por 400 milissegundos (0,4 segundo) e desligar a seta.
O circuito
Para montar o circuito, você deverá ligar um o GND no pino menor de cada LED usado, sendo possível usar quantos LEDs você quiser em cada uma das setas. Aqui, no entanto, é importante colocar um resistor, fornecido por seu professor, para não queimar o LED ou sobrecarregar o Arduino.
No botão, sugiro que faça uma conexão cruzada, como na figura a seguir. Assim você nunca vai errar no uso dos botões do tipo pushbutton.

A perninha maior de cada LED deve ser conectada na porta digital correspondente.
Veja simulação a seguir:
Gostou deste novo formato de documento para as aulas? Temos algumas vantagens quanto à isso:
- Menor quantidade de papel impresso usado;
- Conteúdo mais responsivo: pode ver no notebook ou celular que a visualização fica amigável;
- Maior interatividade, pois você pode postar uma dúvida abaixo que o professor irá te responder;
- Mais fácil de encontrar este circuito no futuro, pois todas as nossas aulas estarão marcadas na categoria “Robótica” e, se for com Arduino, também terá a categoria “Arduino”.