Você está na página 1de 3

002-Programando um botão que aciona 2 LEDs que ligam e

desligam em sequência
Análise do circuito

O circuito segue as mesmas linhas de raciocínio do circuito 01. A única diferença


está no sketch, pois, ao acionar o botão, um led acende e o outro acende em
seguida. Depois, o led que acendeu primeiro desliga e, em seguida, desliga-se o
outro.

Análise do programa
#define Led1 10
#define Led2 11
#define Botao 7

void setup() {
pinMode (Led1, OUTPUT) ;
pinMode (Led2, OUTPUT) ;
pinMode (Botao, INPUT) ;
}
void loop () {
if (digitalRead (Botao) == 1) {
digitalWrite (Led1,HIGH) ;
delay (1000) ;
digitalWrite (Led2,HIGH) ;
delay (1000) ;
digitalWrite (Led1,LOW) ;
delay (1000) ;
digitalWrite (Led2,LOW) ;
delay (1000) ;
}
}
Variáveis
#define Led1 10
#define Led2 11
#define Botao 7

Aqui temos uma nova instrução: #define, aquela que não precisa de ponto e vírgula
no final. Esta instrução diz ao arduino: “crie uma variável de nome Led1 e atribua o
valor 10 a ela”. Isto também poderia ser escrito assim:

int Led1 = 10;


int Led2 = 11;
int Botao = 7;

SETUP
void setup() {
pinMode (Led1, OUTPUT) ;
pinMode (Led2, OUTPUT) ;
pinMode (Botao, INPUT) ;
}

Aqui ficou configurado que o arduino só vai precisar de dois pinos de saída, que
seriam os pinos 10 e 11, pois precisamos acender os LED’s. E vamos precisar de
um pino que receberá energia e que será o pino 7, para o arduino ficar o resto de
sua vida testando se houve presença de energia (alguém apertou o botão).

LOOP
void loop () {
if (digitalRead (Botao) == 1) {
digitalWrite (Led1,HIGH) ;
delay (1000) ;
digitalWrite (Led2,HIGH) ;
delay (1000) ;
digitalWrite (Led1,LOW) ;
delay (1000) ;
digitalWrite (Led2,LOW) ;
delay (1000) ;
}
}
Ao entrar no loop “eterno”, o arduino testa constantemente se houve acionamento
do botão. Enquanto não houver, a função digitalRead retornará zero e nada
ocorrerá. Havendo a presença de energia no pino 7 (Botao), aquela função
retornará 1 e as instruções contidas no if serão executadas, uma vez que a
condição foi atendida.
A primeira instrução vai atribuir o valor 1 (HIGH) à função digitalWrite; logo, o 1º Led
acenderá. Em seguida, segue-se um atraso de 1 seg e a nova instrução atribui o
valor 1 àquela mesma função, só que agora ao segundo Led, que acende.
O processo de desligamento ocorre em seguida atribuindo zero (LOW) à função
digitalWrite ao primeiro Led, e depois, ao segundo Led, com intervalos de 1
segundo, após cada desligamento.
Novamente, o arduino fica em loop até que se pressione o botão.
Uma outra maneira de se escrever este sketch seria nomear variáveis para as
funções digital...(ledX, Y). Veja as alterações em rosa:

#define Led1 10
#define Led2 11
#define Botao 7
#define LedOn1 digitalWrite (Led1,HIGH)
#define LedOn2 digitalWrite (Led2,HIGH)
#define LedOff1 digitalWrite (Led1,LOW)
#define LedOff2 digitalWrite (Led2,LOW)
#define BotaoOn digitalRead (Botao) == 1

void setup() {
pinMode (Led1, OUTPUT) ;
pinMode (Led2, OUTPUT) ;
pinMode (Botao, INPUT) ;
}
void loop () {
if (BotaoOn) {
LedOn1 ;
delay (1000) ;
LedOn2 ;
delay (1000) ;
LedOff1 ;
delay (1000) ;
LedOff2 ;
delay (1000) ;
}
}

O loop dá a impressão de estar bem mais conversacional, não acha? Apesar de ser
maior...
Notou que a função #define tem um alcance maior? Observe que, nas definições
em rosa, o #define disse ao arduino: armazene a função digitalWrite (Led1,HIGH)
na variável LedOn1

“Ué..Por que não precisou de capacitor desta vez?”. No outro programa, o arduino
testava o acionamento do botão e saía para executar outras tarefas e voltava para
ver se havia pressionado o botão. E você nem tinha soltado o botão ainda!!! É. Eu
diria que é a velocidade da luz!! (Nossa! Acho que exagerei nessa...).

Já nesse exercício você pressiona o botão e o arduino vai ter de esperar, no


mínimo, 4 segundos. Você não é tão lento assim para apertar e soltar o botão, não
é mesmo? Então, não é necessário.

* * * * *

Você também pode gostar