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:

10 thoughts on “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
  • junho 15, 2020 em 2:04 pm
    Permalink

    You really make it seem so easy with your presentation but I find this matter to be actually something which I think
    I would never understand. It seems too complicated and very broad for
    me. I’m looking forward for your next post, I’ll try to get the hang of it!

    Resposta
  • junho 16, 2020 em 4:18 am
    Permalink

    Have you ever thought about adding a little bit more than just your
    articles? I mean, what you say is fundamental and everything.
    However imagine if you added some great photos or video clips to give your posts more, “pop”!
    Your content is excellent but with images and video clips, this site could undeniably be one of the best in its field.
    Terrific blog!

    Resposta
  • junho 17, 2020 em 12:41 am
    Permalink

    I used to be recommended this website by my cousin. I’m now not positive whether or not this put
    up is written through him as no one else recognize such distinct
    about my problem. You are wonderful! Thanks!

    Resposta
  • junho 17, 2020 em 11:48 am
    Permalink

    I was wondering if you ever thought of changing the
    layout of your website? Its very well written; I love what youve
    got to say. But maybe you could a little more in the way of content so
    people could connect with it better. Youve got an awful lot of text for only having
    1 or two images. Maybe you could space it out better?

    Resposta

Deixe uma resposta

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

Receba Algo Incrível Preencha seus dados

Preencha seus dados e receba algo incrível.
Não fique fora dessa!