Botão liga o LED - botão desliga o LED - Arduino

sexta-feira, 10 de fevereiro de 2012 16 comentários
Relativamente à mensagem anterior, nesta a montagem é exatamente a mesma. A diferença é que, neste caso, ao retirarmos o dedo do botão o led vai permanecer ligado, pois o valor do botão é armazenado numa variável.
Funcionará como um interrutor: ao carregar acende o led; ao carregar novamente desliga o led.
Esta mensagem é baseada nestes tutoriais:

Material:
  • 1 breadboard
  • 1 arduino
  • 1 led
  • 1 resistência de 220 ohm
  • 1 botão de pressão (pushbutton)
  • 1 resistência de 10 kohm
  • 5 Fios elétricos
Esquema:
Esquema desenhado no Fritzing
Código:
__________________________________________________
int led=13;      // led no pino 13
int botao=12;  // botão no pino 12
int var=0;       // valor instantaneo enviado pelo botão
int var2=0;     // valor guardado
int estado=0;  // guarda o valor 0 ou 1 (HIGH ou LOW)

void setup()
{
  pinMode(led,OUTPUT);
  pinMode(botao,INPUT);
}

void loop()
{
  var=digitalRead(botao); // ler o valor enviado pelo botão: "HIGH" ou "LOW"

  if ((var == HIGH) && (var2 == LOW)) {
    estado = 1 - estado;
    delay(20); // de-bouncing
  }

  var2=var;
  if (estado == 1) {
    digitalWrite(led, HIGH); // liga o led
  } else {
    digitalWrite(led, LOW);  // desliga o led
  }
}
__________________________________________________

Clique no botão "Upload" do arduino e observe os resultados!

16 comentários:

  • Unknown disse...

    Boa tarde amigo primeiramente gostaria de lhe agradecer pela sua postagem isso tem me ajudado bastante porem gostaria que vc me ajudasse se possível no seguinte como faço para usar mais botões com esta função ligar e desligar no mesmo botão.
    Ficarei muito grato se vc puder me ajudar.

  • Eletrão disse...

    Para utilizar mais botões, tem que duplicar o código. Mas tem que alterar o nome das variáveis, para não misturar.

    Note que eu aqui acrescentei "22" em todas as variáveis.

    int led=13; // led no pino 13
    int botao=12; // botão no pino 12
    int var=0; // valor instantaneo enviado pelo botão
    int var2=0; // valor guardado
    int estado=0; // guarda o valor 0 ou 1 (HIGH ou LOW)


    int led22=11; // led no pino 11
    int botao22=10; // botão no pino 10
    int var22=0; // valor instantaneo enviado pelo botão
    int var222=0; // valor guardado
    int estado22=0; // guarda o valor 0 ou 1 (HIGH ou LOW)


    void setup()
    {
    pinMode(led,OUTPUT);
    pinMode(botao,INPUT);
    pinMode(led22,OUTPUT);
    pinMode(botao22,INPUT);
    }
    void loop()
    {
    var=digitalRead(botao); // ler o valor enviado pelo botão: "HIGH" ou "LOW"
    if ((var == HIGH) && (var2 == LOW)) {
    estado = 1 - estado;
    delay(20); // de-bouncing
    }
    var2=var;
    if (estado == 1) {
    digitalWrite(led, HIGH); // liga o led
    } else {
    digitalWrite(led, LOW); // desliga o led
    }


    var22=digitalRead(botao22); // ler o valor enviado pelo botão: "HIGH" ou "LOW"
    if ((var22 == HIGH) && (var222 == LOW)) {
    estado22 = 1 - estado;
    delay(20); // de-bouncing
    }
    var222=var22;
    if (estado22 == 1) {
    digitalWrite(led22, HIGH); // liga o led
    } else {
    digitalWrite(led22, LOW); // desliga o led
    }

    }

  • Achilles disse...

    Quando tenho um codigo maior, nem sempre que aperto o botao a lampada acende ou apaga, pois posso apertar e soltar em um momento que o codigo não está passado por aquela verificação, alguma dica ou macete para funcionar SEMPRE que aperto o botão ?

  • Unknown disse...

    Boa tarde, prezado

    Muito obrigado por compartilhar seu conhecimento conosco, devo dizer que foi de grande importância sua orientação.

    Parabéns, funciona perfeitamente...

    Grato

  • Mikro Carlos disse...

    muito bom mas no código dos dois botões, na 2ª parte do "void loop" penso que se altera o código de "estado22=1-estado;" para "estado22=1-esatdo22", senão o não funciona bem o led 22 no pino 11. Eu corrigi e funciona bem agora, aumentei ligeiramente o tempo de debouncing para 40 ms. Obrigado pela dica

  • Robotics disse...

    Bom dia, estou interessado em montar um sistema automatizado com as seguintes condições:
    - Ao acionar o botão (push button??), é acionado o relé que terá ligado um exaustor;
    - Durante o funcionamento do mesmo, um LED verde fica aceso;
    - Ao acionar o botão novamente, o relé deverá desligar somente após 5 minutos e, durante esse tempo, um LED amarelo deverá ficar piscando, indicando que está "entrando em hibernação";
    - Quando concluir o tempo, um LED vermelho acende e fica assim até o próximo acionamento;
    - O mesmo pode acontecer se for o caso de incluir + 3 relés (totalizando 4), sendo que não é necessário que os demais tenham um tempo para desligar;
    - Uma opção interessante seria inserir um display LCD 16x2 para indicar o status (relé 1 ligado e o "nome do equipamento"; relé 2, relé 3... etc) e além disso, poderia indicar o status de preparando para desligar e pronto.

    A dúvida final seria: dá para montar isso no Arduino ou usando um microcontrolador??
    Como poderia ser o esquema de ligação desse sistema?
    Quais componentes eu iria precisar (resistores, etc)?
    Se puder me ajudar, agradeço imensamente!
    Abraço e desde já, muito obrigado.

  • Unknown disse...

    Existe um codigo bem mais simples que esse porem ele usa delay

    #define BT1 3 // DEFININDO O PINO DO BOTAO 1
    #define LED1 9 // DEFININDO O PINO DO LED 1
    int VALOR1 = 0; // DEFININDO O PRIMEIRO VALOR A SER GUARDADO

    void setup() {
    pinMode(BT1, INPUT_PULLUP); // PARA N USAR RESISTOR NA MONTAGEM USEI O "PULLUP", LIGAÇÃO DIRETA DO GND NO BOTÃO E DELE PARA O ARDUINO
    pinMode(LED1, OUTPUT); // DEFININDO LED COMO SAIDA
    }

    void loop() {
    VALOR1 = digitalRead(BT1); // DEFININDO O VALOR DO BOTAO1 PARA A VARIAVEL "VALOR1"
    if (VALOR1 == LOW){
    digitalWrite(LED1, !digitalRead(LED1)); // CASO BOTÃO FOR PRECIONADO A ESCRITA DO LED1 VAI SER O INVERSO DELE, OU SEJA, SE ELE ESTIVER LIGADO DESLIGARÁ E SE ELE ESTIVER DESLIGADO LIGARÁ.
    delay(300); // ESSES 300 MILISEGUNDOS SÃO MUITO INPORTANTES POIS ESSE É O TEMPO QUE VC TEM PARA DESACIONAR O BOTÃO
    }
    }

 

©Copyright 2012 Eletrão | TNB