Botões - Resolução

1a: Calcule o valor do resistor utilizando a lei de Ohm, supondo que a corrente que atravessa o LED é de 20mA.
Um LED vermelho tipicamente possui uma queda de tensão de 2.0V.
\[R = \frac{U}{i}\] \[R = \frac{3.0 - 2.0}{20 \times 10^{-3}}\] \[R = 50Ω\]2a: Mude a conexão do negativo da bateria para outros terminais do botão. O que acontece?
No terminal inferior direito, o LED ficará sempre ligado, pois os terminais de cada extremidade estão sempre em curto.
No terminal superior esquerdo, o botão permanece com o mesmo comportamento.
3a: Compare a estrutura interna do botão, mostrada na parte teórica, com este exemplo. Por que este circuito funciona?
Pois, ao ser pressionado, o botão cria um contato entre os terminais opostos do circuito, fazendo com que a corrente possa fluir.

1b: Este circuito é exatamente igual ao anterior. Usando os conhecimentos que você tem sobre a protoboard, procure entender por quê.
Internamente, a protoboard é disposta desta maneira:

As conexões do circuito mostrado acima na protoboard são análogas às apresentadas na primeira questão.
2b: Adicione um outro LED à protoboard, e conecte ele de um modo que, ao apertar o botão, ambos os LEDs acendam.

1d: Que meio temos para diminuir a corrente que passa pelo curto entre o GND e o +5V, e fazer com que, ao pressionar o botão, a maior parte da corrente passe apenas para o pino de leitura, e não para o GND?
Basta adicionar um resistor pull-down.

1e: Utilizando a lei de Ohm, calcule a corrente que está passando por cada pino que definimos no Arduino, com o botão ligado e desligado.
Quando o botão não está apertado:
- O pino 4 não possui corrente, pois está desligado
- O pino 12 está ligado diretamente a um resistor de 10KΩ, que está ligado diretamente ao GND. Logo, ele também não possui corrente.
Quando o botão está apertado:
- O pino 4 fornece 5V a um resistor de 220Ω que está ligado a um LED vermelho:
- O pino 12 está ligado diretamente ao 5V. Não existe um resistor no circuito, mas o Arduino possui um resistor de impedância interno na faixa de 100 megaOhms (\(100 \times 10^9\) Ohms) que é usado quando um pino é definido como input. Logo, a corrente no circuito é de:
Como se pode notar, é uma corrente extremamente baixa (apenas 500 nanoAmperes), o que demonstra a necessidade da utilização de um resistor pull-down ou pull-up.
2e: Insira mais um LED no circuito, e faça com que ambos sejam ligados quando o botão for apertado.
Circuito:

Código:
// Variaveis para definir o pino dos componentes
int pinoLed1 = 4;
int pinoLed2 = 3;
int pinoBotao = 12;
// Variavel para guardar o estado do botão
int estadoBotao;
void setup() {
// Configurar o botao como entrada, LED como saida
pinMode(pinoBotao, INPUT);
pinMode(pinoLed1, OUTPUT);
pinMode(pinoLed2, OUTPUT);
}
void loop() {
// Salvar o estado do botão na variável estadoBotão, utilizando a função digitalRead.
// No caso, estadoBotao será HIGH se o botão estiver pressionado, ou LOW, se não
// estiver pressionado.
estadoBotao = digitalRead(pinoBotao);
// Escrever o estado do botão para o pino dos LEDs.
digitalWrite(pinoLed1, estadoBotao);
digitalWrite(pinoLed2, estadoBotao);
// Esperar um tempo para não dar muito trabalho ao simulador
// (este delay não é necessário na vida real)
delay(10);
}
3e: Insira mais um botão no circuito, e faça com que cada botão ligue um LED diferente.
Circuito:

Código:
// Variaveis para definir o pino dos componentes
int pinoLed1 = 4;
int pinoLed2 = 3;
int pinoBotao1 = 12;
int pinoBotao2 = 13;
// Variavel para guardar o estado dos botões
int estadoBotao1;
int estadoBotao2;
void setup() {
// Configurar o botao como entrada, LED como saida
pinMode(pinoBotao1, INPUT);
pinMode(pinoBotao2, INPUT);
pinMode(pinoLed1, OUTPUT);
pinMode(pinoLed2, OUTPUT);
}
void loop() {
// Salvar o estado do botão na variável estadoBotão, utilizando a função digitalRead.
// No caso, estadoBotao será HIGH se o botão estiver pressionado, ou LOW, se não
// estiver pressionado.
estadoBotao1 = digitalRead(pinoBotao1);
estadoBotao2 = digitalRead(pinoBotao2);
// Escrever o estado do botão para o pino dos LEDs.
digitalWrite(pinoLed1, estadoBotao1);
digitalWrite(pinoLed2, estadoBotao2);
// Esperar um tempo para não dar muito trabalho ao simulador
// (este delay não é necessário na vida real)
delay(10);
}