Arduino – Botão com duas funções liga/desliga

Fala ai pessoal, neste post vamos ver como empregar duas funções em um único botão no Arduíno, ou seja, vamos ver como desligar e ligar uma lampada usando o mesmo botão.

Acontece que em muitos projetos de automação temos a função de apagar e de acender uma lampada pelo celular ou por um controle infravermelho e nosso interruptor mecânico comumente usado fica atrapalhando esse tipo de esquema, por exemplo, se a lampada tiver acesa pelo interruptor convencional você não tem como pagar ele pelo seu controle automatizado com relé e vice versa.

Outra problemática é que os códigos de programação mais encontrados na internet só atribuem uma função a um botão, teríamos que usar dois botões, um para ligar e outro para desligar a lampada, o que torna o projeto mais caro e mais complicado.

Com o uso de variáveis no programa, vamos aprender a atribuir duas funções em um único botão.

PARA TUTORIAIS EM VÍDEO, INSCREVA-SE NO CANAL DO YOUTUBE, BASTA CLICAR NO BOTÃO ABAIXO:

inscreva-se

 

Vamos precisar de uma placa Arduíno logicamente, um pushbutton, um resistor de 10 k ohm, um led, um resistor de 300 ohm, fios Jumper e o projeto será montado em uma protoboard.

O projeto de ligação deste projeto é bem simples como vocês podem ver na imagem abaixo:

Esquema de ligação, led e pushbutton
Esquema de ligação, led e pushbutton

Agora vamos ao mais importante para este projeto, o código de programação e seus devidos comentários:


//Nerdking.net.br 
//Função Liga / Desliga num mesmo botão
//Base para projetos futuros

int led = 8; // led no pino 8
int botao = 7; // botão no pino 7
int funcaoa = 0; // valor instantaneo enviado pelo botão
int funcaob = 0; // valor guardado
int estado=0; // guarda o valor 0 ou 1 (HIGH ou LOW)

void setup(){
 
 pinMode(led,OUTPUT); //Define o led como saida
 pinMode(botao,INPUT); //Define o botão como entrada

}

void loop(){

funcaoa=digitalRead(botao); // ler o valor enviado pelo botão: "HIGH" ou "LOW"
 if ((funcaoa == HIGH) && (funcaob == LOW)) {
 estado = 1 - estado;
 delay(500); // Tempo apertando o botão, se fica pouco de mais a o led fica piscando rapidamente, não é aconselhavel deixar menos que 500
 }
 funcaob=funcaoa;
 if (estado == 1) {
 digitalWrite(led, HIGH); // liga o led
 } else {
 digitalWrite(led, LOW); // desliga o led
 }
}

Note que neste código não usamos nenhum tipo de biblioteca e de forma simples com variáveis declaradas conseguimos  fazer com que um único botão desempenha-se duas funções, nos próximos post vamos adicionar um controle remoto IR a este projeto, continue visitando o site para não ficar de fora:

5 comentários em “Arduino – Botão com duas funções liga/desliga

  • junho 11, 2017 em 12:00 am
    Permalink

    Great article but it didn’t have evegtyhinr-I didn’t find the kitchen sink!

    Resposta
  • setembro 13, 2017 em 5:28 am
    Permalink

    I blog frequently and I truly thank you for your information. Your article has truly peaked my interest. I am going to bookmark your website and keep checking for new details about once per week. I subscribed to your RSS feed as well.
    replica van cleef & arpels ring http://www.fclb.co/

    Resposta
  • outubro 25, 2017 em 11:59 pm
    Permalink

    Muito bom! Estava precisando de um desse. Porém deu um erro:

    ‘amp’ was not declared in this scope

    if ((funcaoa == HIGH) &&amp (funcaob == LOW)) {

    ^

    _1_toque_arduino:21: error: expected ‘)’ before ‘;’ token

    if ((funcaoa == HIGH) &&amp (funcaob == LOW)) {

    ^

    _1_toque_arduino:21: error: ‘amp’ was not declared in this scope

    if ((funcaoa == HIGH) &&amp (funcaob == LOW)) {

    ^

    exit status 1
    ‘amp’ was not declared in this scope

    O que seria?

    Resposta
  • outubro 26, 2017 em 12:56 am
    Permalink

    Resolvi o problema.
    Retirei o:

    &&

    e deixei só && e resolveu o problema!

    Resposta
  • dezembro 27, 2017 em 11:50 pm
    Permalink

    tudo errado aspas ”amp” e o funcaob???? ;-;

    Resposta

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *