Nessa parte vamos ver como ler uma entrada/estado de uma porta digital, para processa-la e gerar uma saída correspondente.
Não espere o nível de detalhes da parte 2, já que estou assumindo que já aprendremos o básico sobre o arduino.
A idéia aqui é ler a entrada de um interruptor através de uma porta digital e, caso o interruptor esteja fechado, ligar o LED. Caso contrário, desliga.
Nesse exemplo, teremos essa configuração:
Figura 3.1 – configuração do nosso exemplo
Ler uma porta digital é análogo a escrever em uma. Ler uma porta lógica nos dirá se o sinal está LOW (menor que 2volts) ou HIGH (maior que 3volts)
O Arduino, além das portas digitais, possui em sua placa acesso ao VCC (5volts) e o GND (terra, 0v). Podemos usar esses acessos para alimentar circuitos eletrônicos ou usar para gerar diferença de voltagem em nossas portas digitais e conseguir ler seu estado.
Ou seja, poderíamos pegar o VCC, que temos certeza que tem 5volts, ligar em um interruptor e jogar a outra ponta em uma porta digital. Se o interruptor estiver fechando o circuito, conseguiremos ler 5V. Contudo, não é tão simples, porque quando o circuito está aberto, não necessariamente temos um valor LOW(0volts), pois o fio não estaria ligado a nada. Como o fio não está ligado a nada, o microcontrolador não sabe se o estado é HIGH ou LOW, configurando o estado de alta impedância. Veja abaixo:
Figura 3.2 NÃO FAÇA ISSO – Exemplo de circuito ligado e desligado atraves de um interruptor para exemplificar o estado de alta impedância. Veja que quando o interruptor está aberto, a porta digital não está ligada a nada.
Para ler o interruptor, vamos precisar de um resitor pull-down, ou seja, vamos usar um resistor com valor suficientimente alto e ler o valor intermediário entre o VCC e o GND. Assim, quando o circuito estiver aberto, vamos ler o valor do GND. Quando estiver fechado, o resistor de valor alto vai ligar a porta lógica ao VCC. Mais informações sobre o funcionamento do resistor pull-down pode sem encontrados aqui (http://pt.wikipedia.org/wiki/Resistores_pull-up)
Logo, a configuração de leitura do interruptor na porta 7 (escolhi uma randomicamente entre as disponíveis) ficaria assim:
Figura 3.3 – Configuração de leitura do interruptor com resistor pull-down.
Como vamos usar o interruptor para ligar e desligar o LED, vamos juntar essa configuração à configuração da parte 2 de nosso tutorial, ficando com a seguinte configuração.
Figura 3.4 – Configuração final do exemplo. Repare que o resistor ligado a porta 4, responsavel por ligar o LED (etapa 2) passa por tras do fio da porta 7.
A parte de hardware terminada, vamos à de software. Novamente começamos com o setup, precisamos configurar a porta 7 como leitura (entrada), e a 4 novamente com o saida, já que ela alimentará o LED. O trecho de código abaixo resolve o problema.
void setup() { // inicializa a porta 4 como porta de saída / escrita. pinMode(4, OUTPUT); // escreve o estado da porta 4 como LOW / desligado digitalWrite(4, LOW); // inicializa a porta 4 como porta de entrada / leitura. pinMode(7, INPUT); }
Quadro 3.5 – Configurando a porta 7 como entrada/escrita.
Depois do setup, temos que definir nossa lógica. Isso é, quando o interruptor estiver fechado, leremos um sinal HIGH e ligaremos o LED. Quando o interruptor estiver aberto, leremos LOW, e desligaremos o LED. Faremos isso da seguinte forma:
void loop(){ // variável para armazenar a leitura da porta int buttonState = 0; // le o estado da porta digital 7 buttonState = digitalRead(7); // checa se o interruptor esta fechado // se ele estiver, o buttonState vai ser HIGH: if (buttonState == HIGH) { // liga o LED digitalWrite(4, HIGH); } else { // desliga o LED digitalWrite(4, LOW); } }
Quadro 3.6 – Lógica para ligar e desligar o LED através da leitura da porta digital. Mais detalhes sobre a função digitalRead pode ser encontrado no site do arduino (http://arduino.cc/en/Reference/digitalRead)
O código final pode ser visto abaixo. É só colocá-lo na IDE, fazer o upload e testar seu funcionamento. O vídeo mostra o resultado.
void setup() { // inicializa a porta 4 como porta de saída / escrita. pinMode(4, OUTPUT); // escreve o estado da porta 4 como LOW / desligado digitalWrite(4, LOW); // inicializa a porta 4 como porta de entrada / leitura. pinMode(7, INPUT); } void loop(){ int buttonState = 0;// variável para armazenar a leitura da porta // le o estado da porta digital 7 buttonState = digitalRead(7); // checa se o interruptor esta fechado // se ele estiver, o buttonState vai ser HIGH: if (buttonState == HIGH) { // liga o LED digitalWrite(4, HIGH); } else { // desliga o LED digitalWrite(4, LOW); } }
Quadro 3.7 – código final
Veja o video de tudo funcionando:
Olá amigo muito legal e detalhada sua explicação ..
Parabens !
Agora me tira uma duvida , como eu faço para mandar o comando do monitor serial , teria que colocar, 1 ligado e 0 desligado ? obrigado ..