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:
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
}
}
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:
nao entendi o var2
Se não existir o var2, o led só acenderá enquanto eu estiver a carregar no botão. o var2 armazena esse valor, mantendo-o ligado.
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.
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
}
}
porque você colocou
-estado ???
ñ seria suficiente estado=1???
porque voce colocou -estado?
estado=1 ñ seria suficiente ???
Tem como alterar para 5 Leds mais só um botão quando aperta o botão acende um e se apertar de novo apaga o que estava aceso e liga o proscimo
Ao manter o botão pressionado envia um pulso de 500 milissegundos qual seria o code ?
Obrigado !
Amigo, não sei se você ainda está ativo, mas se quando eu apertar o botão o led piscasse ao invés de só acender, como eu faria?
Abraços.
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 ?
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
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
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.
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
}
}
Olá, sou novo na programação em arduino e gostaria entender a parte do estado = 1 - estado.
Enviar um comentário