Ligando uma lâmpada com relé e push button
Neste artigo anterior sobre como ligar uma lâmpada utilizando relé, eu mostrei como ligar um relé ao Arduino, utilizando transistor, diodo e resistor. Neste post teremos uma evolução do post anterior, mostrando como ligar uma lâmpada utilizando relé e push button.
Seguindo a sugestão de alguns leitores, vou usar o mesmo circuito como base, e mostrar o acionamento do relé via push button, ou seja, cada vez que o botão é pressionado, o estado do led é alterado, acendendo e apagando conforme o controle do usuário. Veja no vídeo abaixo o circuito em funcionamento :
Acionando relé utilizando push-button
Antes de montar o circuito do Arduino com relé e push button, vamos apenas recapitular a “lista de material” que utilizei anteriormente:
- Rele 5v
- 1 Diodo 1N4007 (ou similar)
- 1 Transistor BC548 (ou equivalente NPN)
- 2 resistores de 10 K
- Led
e vamos acrescentar mais dois componentes muito fáceis de encontrar:
- 1 push button
- 1 resistor 330 ohms
Com o material em mãos, vamos ao circuito, que como citei anteriormente, é o mesmo do artigo anterior, agora com um push button ligado à porta 2 do Arduino. Observe que estamos conectando a saída NO (Normal Open ou Normal Aberto) do relé no anodo do led.
Também usei o programa anterior como base, acrescentando uma rotina que inverte o estado do relé conforme o botão é pressionado. Esta mudança de estado do relé é feita na linha 29 do programa:
// Programa: Acionamento de rele com push button // Autor: Arduino e Cia int sinalparaorele = 4; //define a porta para o acionamento do rele int pinobotao = 2; //Porta utilizada para o botão de acionamento int leitura; //Armazena informações sobre a leitura do botão int estadorele = 0; //Armazena o estado do relé (ligado/desligado) void setup() { //Define o pino como saida (sinal para o rele) pinMode(sinalparaorele, OUTPUT); //Define o pino como entrada (Pino do botao) pinMode(pinobotao, INPUT); //digitalWrite(sinalparaorele, 0); } void loop() { leitura = digitalRead(pinobotao); if (leitura != 1) { while(digitalRead(pinobotao) != 1) { delay(100); } // Inverte o estado estadorele = !estadorele; digitalWrite(sinalparaorele, estadorele); } }
E finalmente, se você precisar utilizar este mesmo esquema e programa para acionar uma lâmpada, use a ligação abaixo :
Essa é apenas uma opção de uso de botão para acionamento do relé. Conforme as suas necessidades, o botão pode ser facilmente substituído por uma chave, um sensor ou a entrada pode até mesmo ser acionada via bluetooth, como neste artigo, onde explico como utilizar um celular Android para controlar o Arduino, via bluetooth.
Muito bom o tópico, exatamente o que eu precisava. Os meu teste foram mais fáceis pois tenho um rele shield.
Por curiosidade, por que vc usa o while, é para ter um efeito similar ao debouncig?
Obrigado Murilo !
Eu usei este while pois o acionamento do botão é muito instável, ou seja, ele pode mudar de estado várias vezes enquanto você está apertando ou desapertando o botão, e isso iria acender e apagar o led várias vezes no mesmo acionamento. Como eu queria que o botão mudasse o estado somente cada vez que é pressionado, eu coloquei o while para "lembrar" o estado do botão e evitar que o led acenda de forma errada. Espero não ter complicado. rs. Abraço !
Muito bom o tutorial! Mas tenho uma pegunta,se eu quisesse acionar com uma tecla do meu pc ao invés do push button, como eu faria. Abraco
Boa noite João,
É perfeitamente possível. Você pode criar um programa que acesse a saída serial conectada ao Arduino e faça o envio e recebimento de informações. Eu já criei alguma coisa desse tipo, mas já faz algum tempo, e preciso retomar esse assunto.
Abraço !
E vc tem esse código criado pelo pc?
Olá…
Sou novo com o Arduino e se possível você poderia comentar o pedaço do código?
Não entendi o uso do != 1
void loop()
{
leitura = digitalRead(pinobotao);
if (leitura != 1)
{
while(digitalRead(pinobotao) != 1)
{
delay(100);
}
estadorele = !estadorele;
digitalWrite(sinalparaorele, estadorele);
}
}
Boa noite,
Esse pedaço do código, mais especificamente o "!=1" é um operador de comparação, que verifica se o botão foi pressionado e foi para o nível 0 / Low.
O primeiro pedaço do código apenas verifica se o botão foi pressionado :
if (leitura != 1)
A linha com o while executa um loop enquanto o botão estiver pressionado, evitando que algum ruído durante o pressionamento do botão inverta o estado da saída sem necessidade :
while(digitalRead(pinobotao) != 1)
{
delay(100);
Espero ter ajudado. Qualquer dúvida, deixe msg, por favor.
Abraço !
mano o meu ide deu um erro na hora de copila no int pinobotao = 2; pq
Bom dia Victor !
Que erro ele dá ?
mano eu ão to conseguindo montar esse circuito pelo proteus me ajudem . por favor presciso muito aprender esse acionamento
Bom dia Victor !
Com qual parte você está tendo dificuldade ?
Abraço.
e no caso de eu querer ligar 3 leds e 3 push button, oque tem que alterar?
Boa tarde Atila,
No circuito, basta você replicar o circuito e ligar tanto o relé/transistor, led e botão em portas diferentes.
No programa, basta você replicar a informação sobre variáveis, leitura de portas, etc, 3 vezes. Vai ficar mais ou menos assim :
// Programa : Acionamento de rele utilizando push button
// Autor : Arduino e Cia
//Rele1
int sinalparaorele1 = 4; //define a porta a ser utilizada para o acionamento do rele
int pinobotao1 = 2; //Porta utilizada para o botão de acionamento
int leitura1; //Armazena informações sobre a leitura do botão
int estadorele1 = 0; //Armazena o estado do relé (ligado/desligado)
//Rele2
int sinalparaorele2 = 5; //define a porta a ser utilizada para o acionamento do rele
int pinobotao2 = 3; //Porta utilizada para o botão de acionamento
int leitura2; //Armazena informações sobre a leitura do botão
int estadorele2 = 0; //Armazena o estado do relé (ligado/desligado)
//Rele3
int sinalparaorele3 = 6; //define a porta a ser utilizada para o acionamento do rele
int pinobotao3 = 7; //Porta utilizada para o botão de acionamento
int leitura3; //Armazena informações sobre a leitura do botão
int estadorele3 = 0; //Armazena o estado do relé (ligado/desligado)
void setup()
{
pinMode(sinalparaorele1, OUTPUT); //Define o pino como saida (sinal para o rele)
pinMode(pinobotao1, INPUT); //Define o pino como entrada (Pino do botao)
pinMode(sinalparaorele2, OUTPUT); //Define o pino como saida (sinal para o rele)
pinMode(pinobotao2, INPUT); //Define o pino como entrada (Pino do botao)
pinMode(sinalparaorele3, OUTPUT); //Define o pino como saida (sinal para o rele)
pinMode(pinobotao3, INPUT); //Define o pino como entrada (Pino do botao)
}
void loop()
{
leitura1 = digitalRead(pinobotao1);
if (leitura1 != 1)
{
while(digitalRead(pinobotao1) != 1)
{
delay(100);
}
estadorele1 = !estadorele1;
digitalWrite(sinalparaorele1, estadorele1);
}
leitura2 = digitalRead(pinobotao2);
if (leitura2 != 1)
{
while(digitalRead(pinobotao2) != 1)
{
delay(100);
}
estadorele2 = !estadorele2;
digitalWrite(sinalparaorele2, estadorele2);
}
leitura3 = digitalRead(pinobotao3);
if (leitura3 != 1)
{
while(digitalRead(pinobotao3) != 1)
{
delay(100);
}
estadorele3 = !estadorele3;
digitalWrite(sinalparaorele3, estadorele3);
}
}
Abraço !
Mas eu preciso do codigo do programa de android para acionar e qual deveria ser
Boa noite Thales,
Por favor dê uma olhada neste artigo, creio que tem o que você precisa :
http://www.arduinoecia.com.br/2013/03/acionando-portas-do-arduino-usando.html
Abraço !
Olá, gostaria de saber para que o diodo e o transistor estão no circuito, se pudesse me explicar a funcionalidade deles. Obrigado
Boa tarde Otávio,
Esses componentes formam o circuito de proteção, evitando danos ao Arduino. O transistor amplifica o sinal , que na porta do Arduino é de 50mA, evitando que o relé "puxe" mais corrente do que o necessário. O diodo, por sua vez, evita que sobrecargas de energia voltem para o Arduíno, danificando a porta.
Em linhas gerais (e resumidas), é isso. Espero ter ajudado. abraço !
Na verdade a função do diodo é de criar um curto-ciruito impedindo sobretensões geradas pela fem (força eletromotriz) induzida pela redução da corrente na bobina. Milhões de pessoas deterioram seus circuitos, principalmente relés, utilizando somente diodo. O correto é isolar a parte de comando com optoacopladores e colocar em oposição ao diodo, um diodo zener, de tal modo que a maxima tensão suportada por ele fique em função da maxima tensão suportada entre coletor e emissor do transistor que excita o relé.
qual o motivo de usar a resistencia na chave, só como referencia 0 para arduino?
usei sem ele e funciona enviando a tensão.
Como estou usando rele de 12 V, não posso aproveitar a alimentação e enviar 12 V na porta do arduino?
Boa tarde Ayres,
Exatamente. O resistor na chave serve como referência 0.
Quanto aos 12v, se você estiver falando das portas, não será possível ligar, pois o nível de tensão suportado pelo Arduino é de 5v.
Se você estiver falando da porta de alimentação externa do Arduino, OK, você pode aproveitar esses 12v para alimentar a placa.
Abraço !
Como eu sei qual é o NO e o NC do meu relé ?
Boa noite,
Se você souber qual o pino C (comum), pode simplesmente testar com um led, como eu fiz no circuito, ou até mesmo com um multímetro.
Abraço !
Poderia explicar o motivo de vc ter colocado o resistor 330 omhs no push button? Não é a mesma coisa sem ele?
Boa tarde,
Não, se você não colocar o resistor, o valor da porta pode oscilar entre 0 e 1, gerando "falsos positivos", como se estivesse acionando o botão.
O resistor está ligado ao GND, funcionando como um resistor pull-down, ou seja, quando o botão não está sendo pressionado, garantimos (ou forçamos) que o valor lido na porta do Arduino é 0.
Abraço !
Olá, como eu poderia fazer no codigo pra que uma pressionada no botao o circuito fique ligado e com outra pressionada ele desliga. Assim eu nao preciso ficar pressionando o botao para o circuito ficar ligando… abraço
Como eu poderia mudar o codigo para que com um click no botao o circuito continuasse ligado ate eu dar outro click para desliga-lo? abraço
Boa noite Gabriel,
O circuito mostrado no post já faz isso.
Abraço !
Boa noite, como eu faço para que além do botão eu conseguisse controlar pelo monitor serial também? Obrigado.
Bom dia,
Veja este código de exemplo, que controla o LED da porta 13. L liga o led, e D apaga. Você pode adaptar esse programa para o seu projeto:
// Programa: Controle de lampada pelo serial monitor
// Autor: Arduino e Cia
//Armazena o caracter recebido
char buf;
void setup()
{
//Define o pino 13 como saida
pinMode(13, OUTPUT);
Serial.begin(9600);
Serial.println("Aguardando dados…");
}
void loop()
{
while(Serial.available() > 0)
{
buf = Serial.read();
//Caso seja recebido o caracter L, acende o led
if (buf == 'L')
{
digitalWrite(13, HIGH);
Serial.println("Lampada acesa");
}
//Caso seja recebido o caracter D, apaga o led
if (buf == 'D')
{
digitalWrite(13, LOW);
Serial.println("Lampada apagada");
}
}
}
Abraço !
Boa tarde, só consegui fazer funcionar de um modo ou de outro, segue código.
// Programa : Acionamento de rele utilizando push button
// Autor : Arduino e Cia
int sinalparaorele = 5; //define a porta para o acionamento do rele
int pinobotao = 2; //Porta utilizada para o botão de acionamento
int leitura; //Armazena informações sobre a leitura do botão
int estadorele = 0; //Armazena o estado do relé (ligado/desligado)
char buf;
void setup()
{
Serial.begin(9600);
//Define o pino como saida (sinal para o rele)
pinMode(sinalparaorele, OUTPUT);
//Define o pino como entrada (Pino do botao)
pinMode(pinobotao, INPUT);
// digitalWrite(sinalparaorele, 0);
Serial.println("Aguardando dados…");
}
void loop()
{
serial();
botao();
}
void botao(){
leitura = digitalRead(pinobotao);
if (leitura != 1)
{
while(digitalRead(pinobotao) != 1)
{
delay(100);
}
// Inverte o estado
estadorele = !estadorele;
digitalWrite(sinalparaorele, estadorele);
}
}
void serial() {
while(Serial.available() > 0) {
buf= Serial.read();
if(buf=='a') {
// Inverte o estado
estadorele = !estadorele;
digitalWrite(sinalparaorele, estadorele);
Serial.println(estadorele);
}
}
}
Boa tarde,
Antes de mais nada, parabéns por ter tentado. 🙂
Aqui também não funcionou, então fiz algumas alterações no programa. Dê uma olhada, que eu acho que agora ficou legal. Eu usei a porta 13 para testar o programa com o led:
// Programa : Acionamento de rele utilizando push button
// Autor : Arduino e Cia
int sinalparaorele = 13; //define a porta para o acionamento do rele
int pinobotao = 2; //Porta utilizada para o botão de acionamento
int leitura; //Armazena informações sobre a leitura do botão
int estadorele = 0; //Armazena o estado do relé (ligado/desligado)
char buf;
void setup()
{
Serial.begin(9600);
//Define o pino como saida (sinal para o rele)
pinMode(sinalparaorele, OUTPUT);
//Define o pino como entrada (Pino do botao)
pinMode(pinobotao, INPUT);
// digitalWrite(sinalparaorele, 0);
Serial.println("Aguardando dados…");
}
void loop()
{
leitura = digitalRead(pinobotao);
if (leitura != 0)
{
while (digitalRead(pinobotao) != 0)
{
delay(100);
}
// Inverte o estado
estadorele = !estadorele;
digitalWrite(sinalparaorele, estadorele);
}
if (Serial.available()) {
buf = Serial.read();
if (buf == 'a') {
// Inverte o estado
estadorele = !estadorele;
digitalWrite(sinalparaorele, estadorele);
Serial.print("Estado rele: ");
Serial.println(estadorele);
}
}
}
É isso ai, funcionou. Neste caso já podemos acender e apagar a lâmpada ( ou led) pelo botão ou pelo celular, esta é a melhor forma também para mostrar na tela do celular o status da lâmpada? mostrando o valor 0 ou 1.
Boa tarde,
Sim. Você só precisa arrumar uma maneira do celular receber esses dados (bluetooth, wifi, etc).
Abraço !
ola parabens pelo trabalho.
tenho uma duvida.
como consigo ligar e desligar a msm lampada com a msm letra!?
ex. mandar a letra "a" ai liga e se mandar a letra "a" d novo ai desliga!!
como consigo fazer isso!?
mto obg desde ja.
Oi Chris,
Você quer fazer isso pela serial ?
Abraços !
Bom dia!
Gostaria de saber como faço para ligar o rele com um botao e desligar com outro.
não sei a programação.
Obrigado por enquanto.
Olá! Como ficaria o "código" utilizando um "IR Controle Remoto", para obter esse mesmo resultado? Preciso fazer um acionamento por "IR Controle Remoto", em que a carga só está em funcionamento enquanto o botão está pressionado. Obrigado!
Olá! Em caso de falha no arduíno, continuarei tendo controle do acendimento da lampada pelo interruptor?
Bom dia,
Se você ligar o relé em paralelo com o interruptor, pode continuar usando normalmente.
Abraço!
OLA PARABÉNS PELO SEU TRABALHO, NO MEU TCC EU QUERO A HORA QUE APERTAR O BOTÃO ELE CONTE 5 MINUTOS E DESLIGUE, EU USEI SEU CÓDIGO PODE ME DIZER SE ESTÁ CORRETA A LÓGICA? DESDE JA AGRADEÇO
//Porta ligada ao pino do modulo
int porta_rele1 = 7;
//Porta ligada ao botao 1
int porta_botao1 = 2;
//Armazena o estado do rele – 0 (LOW) ou 1 (HIGH)
int estadorele1 = 1;
//Armazena o valor lido do botão
int leitura1 = 0;
void setup()
{
//Define pino para o rele como saida
pinMode(porta_rele1, OUTPUT);
//Define pinos dos botoes como entrada
pinMode(porta_botao1, INPUT);
//Estado inicial do rele – desligados
digitalWrite(porta_rele1, HIGH);
}
void loop()
{
//Verifica o acionamento do botao 1
leitura1 = digitalRead(porta_botao1);
if (leitura1 != 0)
{
while(digitalRead(porta_botao1) != 0)
{
delay(5000);
digitalWrite(porta_rele1, LOW);
}
//Inverte o estado da porta
estadorele1 = !estadorele1;
//Comandos para o rele 1
digitalWrite(porta_rele1, estadorele1);
}
}
Amigo, fiz uma ligação via infra vermelho e queria ligar o relé pela mesma tecla, fiz o codigo porem com 2 teclas(uma para ligar e outra desligar). Como posso incrementar com esse codigo seu para ficar na mesma.
Pika relativa do codigo:
#include
int RECV_PIN = 11;
float armazenavalor;
int pinoledvermelho = 5;
int pinoledverde = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
pinMode(pinoledvermelho, OUTPUT);
pinMode(pinoledverde, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Inicializa o receptor IR
}
void loop()
{
if (irrecv.decode(&results))
{
Serial.print("Valor lido : ");
Serial.println(results.value, HEX);
armazenavalor = (results.value);
if (armazenavalor == 0xFF30CF) //Verifica se a tecla 1 foi acionada
{
digitalWrite(pinoledvermelho, HIGH); //Acende o led vermelho
}
if (armazenavalor == 0xFF18E7) //Verifica se a tecla 2 foi acionada
{
digitalWrite(pinoledvermelho, LOW); //Apaga o led vermelho
}
if (armazenavalor == 0xFF10EF) //Verifica se a tecla 4 foi acionada
{
digitalWrite(pinoledverde, HIGH); //Acende o led verde
}
if (armazenavalor == 0xFF38C7) //Verifica se a tecla 5 foi acionada
{
digitalWrite(pinoledverde, LOW); //Apaga o led verde
}
if (armazenavalor == 0xFF52AD) //Verifica se a tecla 9 foi acionada
{
digitalWrite(pinoledvermelho, LOW); //Apaga todos os leds
digitalWrite(pinoledverde, LOW);
}
irrecv.resume(); //Le o próximo valor
}
}
Olá, gostaria de saber se este circuito aceita a ligação de 2 relês de 5v no mesmo pino de saida do transistor??
Eles irão ser acionado em conjunto por 15 minutos, 220v em 2 fases de 110v ??
Boa tarde,
Não fiz esse teste, mas eu recomendo um circuito para cada relé.
Abraço!
Boa tarde. Sou novo no Arduino é queria fazer uma horta automatizada. Para isso precisaria ligar uma bomba sapo que exige um relé de 15a. Esse relé de 15a poderia ser ligado no Arduino usando o esquema ilustrado acima?
Oi Daniel,
Perfeitamente. Nâo esqueça que o relé tem que suportar no mínimo 15A, ok?
Abraço!
Adilson
Ola, parabens pelas publicações, ate agora foi oq de melhor encontrei sobre arduino.
Gostaria que vcs me ajudassem por favor.
Montei um circuito para um projeto de pinball, com motor de trava eletrica de carro, e preciso aciona-lo com botao tipo videogame(apertado liga, solto desliga)….POREM…e ai a dificuldade eu preciso que quando pressionado botao o rele que aciona o mecanismo acione apenas por 50ms , e desarme, MESMO se o botão ainda estiver apertado..E somente quando soltar o botão sera enviado outro sinal no caso em um segundo rele, que esse vai acionar o mecanismo de volta, com a inversão da polaridade da fonte q é usada no mecanismo da trava e tambem tem que ser so por 50ms e desarma, pois os solenoides que atuam dentro do mecanismo do pinball não podem receber carga direto, apenas pulsos curtos…
Espero que tenha conseguido me expressar, obrigado e abrçs.
Desculpem, esqueci de avisar, no projeto do pinball estou usando o PULLUP do proprio arduino, e nao um resistor pulldown , para fazer a leitura inicial…ok…obrigado
Ola parabens pelas publicações,ate agora é oq vi de melhor sobre arduino.
Estou com uma baita dificuldade, e gostaria que vcs me ajudassem, por favor.
Estou montando um pinball, com mecanismo de trava eletrica de carros para acionar os flipers.
Bom meu problema é que preciso acionar o mecanismo para frente com um botao tipo de game, (apertado liga, solto desliga)…POREM eu preciso q esse botao acione o rele optoacoplador quando apertado, mas somente por 50 ms, mesmo que continue apertado o botão. E então somente quando soltar o boão o arduino envia sinal para outro rele que vai acionar o mesmo mecanismo para baixo…tambem somente por 50 ms.
Isso tem que ocorrer pois o mecanismo usa uma solenoide , e nao pode ficar com tensão direto ligado, tem que ser apenas um pulso.
Tambem estou usando o circuito interno de PULLUP do arduino, ja consigo acionar e desligar o rele, porem não consigo fazer ele mesmo com botão apertado dar apenas 50ms de acionamento no rele e voltar para NF.
Lembrando que uma porta so ira acionar os dois reles, pois sempre estarão em opostos no que diz respeito a saida HIGH , LOW.
Espero que possam me ajudar…obrigado
Boa noite.
como inicio o sistema com a lampada apagada?
Boa tarde João,
No relé que eu usei ele já inicia o sistema apagado. Mas se o seu relé estiver invertido, basta você alterar o valor da variável estadorele na linha 7 de 0 para 1.
Abraço!
Adilson
Como eu faço pro relé desligar após 6 segundos mesmo que o botão esteja pressionado?
Boa tarde,
Você pode usar uma interrupção ou mesmo criar um contador para fazer isso.
Abraço!
Adilson
Olá! Preciso de um circuito pra acionar um rele, que acenda duas lampadas paralelas de 12v 5w do carro, através de um push Button. Esse serve?
preciso algum esquema q seja fácil de fazer, pois nao domino muito a arte da eletrônica! rsrs..
[…] deste post sobre ligar uma lâmpada com relé e Arduino? Então confira neste artigo uma variação deste circuito, mostrando como utilizar um botão tipo push button para controlar o […]
Olá, o relé que você usou monoestável ou biestável?
Oi Umberto,
Monoestável.
Abraço!
Adilson
Boa noite muito tempo que eu vejo seus video com o arduino e ja ate montei
um sistema na minha casa porem hoje estou querendo adicionar controles
manual no meu projeto. como esta hoje eu consigo controlar toda a minha
casa pela rede dentro e fora de casa porem quando eu acendo uma luz com o
arduino eu so apago por ele eu gostaria de colocar botoes ligado direto na
placa do arduino para controlar os mesmas portas que eu tenho na rede mas
nao sei como fazer o biblioteca para acionar as portas manual ou seja eu
quero tirar meus interruptores e colocar push button ja passei cabos do
arduino ate os meus interruptores mas nao sei como adicionar estes push
button a meu projeto. vou te mandar a minha biblioteca que eu tenho hoje.
desde ja agradeço a sua atenção.
/*
AllAvailPins.ino – Expose All Available Pins on Arduino UNO for
EthernetSup Library.
Created by Carlos Magno, Jan 19, 2016.
Released into the public domain.
*/
#define BLYNK_PRINT Serial // Comment this out to disable prints and
save space
#include
#include
#include “EthernetSup.h”
#include
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = “******************chave do blink*****”;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 58 };
// Todas as portas disponiveis do ATMega328p
// Exceto Serial e ISP
const char p1 = 23;
const char p2 = 25;
const char p3 = 27;
const char p4 = 28;
const char p5 = 29;
const char p6 = 30;
const char alarmeporta = 31;
const char alarmemovimento = 32;
const char cercaeletrica = 33;
const char Fechadura = 35;
const char Garagem = 37;
const char p9 = 39;
const char p10 = 40;
const char p11 = 41;
const char p12 = 42;
const char p13 = 43;
const char p14 = 44;
const char p15 = 45;
const char p16 = 46;
const char p17 = 47;
EthernetSup sup;
void setup()
{
Serial.begin(9600);
Blynk.begin(auth);
// You can also specify server.
// For more options, see BoardsAndShields/Arduino_Ethernet_Manual example
//Blynk.begin(auth, “your_server.com”, 8442);
//Blynk.begin(auth, IPAddress(192,168,0,4), 8442);
// Iniciando Ethernet
sup.begin(mac, ip);
// Configurando portas dos botoes
pinMode(p1, OUTPUT);
pinMode(p2, OUTPUT);
pinMode(p3, OUTPUT);
pinMode(p4, OUTPUT);
pinMode(p5, OUTPUT);
pinMode(p6, OUTPUT);
pinMode(alarmeporta, OUTPUT);
pinMode(alarmemovimento, OUTPUT);
pinMode(cercaeletrica, OUTPUT);
pinMode(Fechadura, OUTPUT);
pinMode(Garagem, OUTPUT);
pinMode(p9, OUTPUT);
pinMode(p10, OUTPUT);
pinMode(p11, OUTPUT);
pinMode(p12, OUTPUT);
pinMode(p13, OUTPUT);
pinMode(p14, OUTPUT);
pinMode(p15, OUTPUT);
pinMode(p16, OUTPUT);
pinMode(p17, OUTPUT);
// Estado incial das portas
digitalWrite(p1, LOW);
digitalWrite(p2, LOW);
digitalWrite(p3, LOW);
digitalWrite(p4, LOW);
digitalWrite(p5, LOW);
digitalWrite(p6, LOW);
pinMode(alarmeporta, LOW);
pinMode(alarmemovimento, LOW);
pinMode(cercaeletrica, LOW);
digitalWrite(Fechadura, LOW);
digitalWrite(Garagem, LOW);
digitalWrite(p9, LOW);
digitalWrite(p10, LOW);
digitalWrite(p11, LOW);
digitalWrite(p12, LOW);
digitalWrite(p13, LOW);
digitalWrite(p14, LOW);
digitalWrite(p15, LOW);
digitalWrite(p16, LOW);
digitalWrite(p17, LOW);
sup.addButton(p1, “Luz da varanda 6”, ONOFF_BUTTON);
sup.addButton(p2, “Luz da varanda A”, ONOFF_BUTTON);
sup.addButton(p3, “Luz do muro “, ONOFF_BUTTON);
sup.addButton(p4, “Luz do corredor “, ONOFF_BUTTON);
sup.addButton(p5, “Luz da garagem”, ONOFF_BUTTON);
sup.addButton(p6, “Luz da cobertura “, ONOFF_BUTTON);
sup.addButton(alarmeporta, “Alarme Porta”, PULSE_BUTTON);
sup.addButton(alarmemovimento, “Alarme Sensor”, PULSE_BUTTON);
sup.addButton(cercaeletrica, “Cerca Eletrica”, PULSE_BUTTON);
sup.addButton(Fechadura, “Saida da av A”, PULSE_BUTTON);
sup.addButton(Garagem, “Portao garagem”, PULSE_BUTTON);
sup.addButton(p15, “Luz quarto da grace”, ONOFF_BUTTON);
sup.addButton(p16, “Luz quarto casal”, ONOFF_BUTTON);
sup.addButton(p17, “Luz do quarto tv”, ONOFF_BUTTON);
sup.addButton(p9, “Luz do porte “, ONOFF_BUTTON);
sup.addButton(p10, “Luz da cozinha”, ONOFF_BUTTON);
sup.addButton(p11, “cozinha a lenha”, ONOFF_BUTTON);
sup.addButton(p12, “Luz da sala”, ONOFF_BUTTON);
sup.addButton(p13, “Luz da copa”, ONOFF_BUTTON);
sup.addButton(p14, “Area de tanque”, ONOFF_BUTTON);
}
void loop()
{
// Load HTML
Blynk.run();
if (sup.available())
{
// Verifica se algum botao foi pressionado
int lastButton = sup.getLastClickedButton();
// Executa o comando conforme o botao clicado
switch (lastButton)
{
case p1:
digitalWrite(p1, sup.getButtonState(lastButton));
break;
case p2:
digitalWrite(p2, sup.getButtonState(lastButton));
break;
case p3:
digitalWrite(p3, sup.getButtonState(lastButton));
break;
case p4:
digitalWrite(p4, sup.getButtonState(lastButton));
break;
case p5:
digitalWrite(p5, sup.getButtonState(lastButton));
break;
case p6:
digitalWrite(p6, sup.getButtonState(lastButton));
break;
case alarmeporta:
digitalWrite(alarmeporta, HIGH);
delay(300);
digitalWrite(alarmeporta, LOW);
break;
case alarmemovimento:
digitalWrite(alarmemovimento, HIGH);
delay(300);
digitalWrite(alarmemovimento, LOW);
break;
case cercaeletrica:
digitalWrite(cercaeletrica, HIGH);
delay(300);
digitalWrite(cercaeletrica, LOW);
break;
case Fechadura:
digitalWrite(Fechadura, HIGH);
delay(500);
digitalWrite(Fechadura, LOW);
break;
case Garagem:
digitalWrite(Garagem, HIGH);
delay(500);
digitalWrite(Garagem, LOW);
break;
case p9:
digitalWrite(p9, sup.getButtonState(lastButton));
break;
case p10:
digitalWrite(p10, sup.getButtonState(lastButton));
break;
case p11:
digitalWrite(p11, sup.getButtonState(lastButton));
break;
case p12:
digitalWrite(p12, sup.getButtonState(lastButton));
break;
case p13:
digitalWrite(p13, sup.getButtonState(lastButton));
break;
case p14:
digitalWrite(p14, sup.getButtonState(lastButton));
break;
case p15:
digitalWrite(p15, sup.getButtonState(lastButton));
break;
case p16:
digitalWrite(p16, sup.getButtonState(lastButton));
break;
case p17:
digitalWrite(p17, sup.getButtonState(lastButton));
break;
default:
break;
}
// Novo metodo para limpar estado
// do botao somente no final
sup.clearButtonIdx();
}
// Delay
delay(10);
}