terça-feira, 20 de dezembro de 2016

Acionamento de botão no Arduino



Fazer o acionamento de um botão no arduino é um dos primeiros passos na apredizagem deste microcontrolador, pois o usuário começa a interagir com a placa através dele.

Para isso, vamos precisar conhecer algumas sintaxes básicas da linguagem de programação do arduino, tais como: Constantes, Função digitalRead() e Desvio de código (if/else).

- A função digitalRead lê um valor de entrada no pino especificado, ou ALTO (quando recebe/lê 5V na porta) ou BAIXO (quando recebe/lê 0V na porta)
- A função if/else permite controlar o fluxo de código, através dele vamos determinar o que ser feito caso o botão seja pressionado ou não, conforme código demonstrativo baixo:

if (botão pressionado)
{
// Faça isso
}
else
{
//Faça aquilo
}

Uma grande vantagem de utilizar o arduino é que não é necessário colocar resistor de elevação (Pull-up) no botão externamente, pois o próprio arduino já possui resistor de elevação interno, basta ativarmos no setup, como no exemplo abaixo:

void setup()
{
pinMode(10, INPUT); //configurando porta 10 como entrada
digitalWrite(10,1); //Escrevo na porta 10 o nível lógico ALTO
}
void loop() {}

No momento que eu solicito ao arduino para que escreva nível lógico 1 na porta de entrada, o Arduino "entende" que solicitamos o resistor interno de elevação, ativando-o.

Fazendo isso, a função digitalRead() vai sempre retornar ALTO, até que o botão (que está ligado ao GND) seja pressionado, ai então retornará BAIXO na função digitalRead(),
Logo, o circuito fica assim:


Sem mais delongas, vamos ao código:
void setup() {   pinMode(13, OUTPUT); //Porta escolhida para escrever informação caso botão pressionado   pinMode(10, INPUT); //Porta escolhida para ler o botão   digitalWrite(10, 1); //Ativamos o resistor de elevação } void loop() {   int leitura = digitalRead(10); //Atribuimos a função digitalRead() na variável leitura   if (leitura == 0) //Compara, se leitura for igual a zero, isto é, botão pressionado   {     digitalWrite(13, 1); //Escreva nível lógico ALTO (5V) na porta 13, podemos acionar Led, relês, etc   }   else //senão   {     digitalWrite(13, 0); //Escreva nivel lógico BAIXO (0V) na porta 13   } }