Primeiramente, um bom dia a todos! Amigos, venho aqui solicitar a ajuda de vocês em um projeto de Arduino em automação e necessito de ajuda no momento, pois sou iniciante. Estou tentando desenvolver algo simples por enquanto, onde aperto um botão e o Arduino mantém um relé ativo por 8 segundos, tentei fazer um código com base no que aprendi vasculhando a internet, mas quando testo ele não funciona :/. Alguém pode me dizer onde errei ou sugestão de um algo melhor?
Acompanhem o código abaixo em .txt, por favor.
Tags:
As respostas para este tópico estão encerradas.
Simplificado, você pode colocar debounce, contagem regressiva, etc.
E ai Pedro Henrique Ribeiro Soares, tudo bem?
"Quero apertar um botão, e quero que o relé fique ativo por 8 segundos"
Tudo bem, até aqui é bem fácil, vamos então analisar seu código?
int led = 13;
- Definiu a variável "led" como "int" e atribuiu o valor de "13"
int Pulsador = 2;
- Definiu a variável "Pulsador" como "int" e atribuiu o valor de "2"
void setup(){
- Abertura da função "setup()"
pinMode(led, OUTPUT);
- Define o pino "led" como saída.
pinMode(Pulsador, INPUT);
- Define o pino "Pulsador" como entrada.
}
- Fecha o "setup()"
void loop(){
- Abertura da função "loop()"
if (digitalRead(Pulsador) == HIGH) {
- Condição: "Se, a leitura do pino "pulsador" for igual a "HIGH" (alto)
for (int x=0; x<=5; x++){
- Inicia uma "rotina" de for:
1) define "x" como inteiro, a iguala a zero.
2) O loop continua se "X" for menor ou igual a "5".
3) e adiciona "+1" a X
obs- Ou seja, haverá 6 repetições
digitalWrite(led, !digitalRead(led));
- Define o estado do pino "led", como o inverso do próprio estado.
delay(5000);
- Pausa de 5 segudos.
}
- Fecha o for
}
- Fecha o "if"
}
- Fecha o "loop()"
Quando a gente vai criar um código, é muito importante entende-lo, caso contrário, você irá copiar/colar ou escrever coisas aleatórias e sem muito sentido.
Lembre-se, programador tem que ser "preguiçoso", então, quanto menor for seu código, e mais objetivo, em princípio será melhor.
Então, voltando ao seu código, veja aquele "for". Não existe sentido algum ele ali. Pois ao pressionar o botão, você irá produzir um delay de 30 (TRINTA) segundos, o mudança automática do estado do pino, sem a possibilidade de você mexer.
Veja:
for(int x = 0; x<=5; x++)
quando X == 0, o estado do pino irá mudar, e terá 5 segundos de delay
quando X == 1, o estado do pino irá mudar DE NOVO, e terá 5 segundos de delay
quando X == 2, o estado do pino irá mudar NOVAMENTE, e terá 5 segundos de delay
quando X == 3, o estado do pino irá mudar MAIS UMA VEZ, e terá 5 segundos de delay
quando X == 4, o estado do pino irá mudar DE NOVO, e terá 5 segundos de delay
quando X == 5, o estado do pino irá mudar MAIS UMA VEZ, e terá 5 segundos de delay
Esse código é excessivamente estranho e faz qualquer coisa, menos o que você deseja.
Se você quer que, ao apertar o botão, ligue o rele por 8 segundos, e depois desligue, então pq não fazer assim?
void setup(){
pinMode(13, OUTPUT); // define o pino 13 como "saida"
pinMode(2, INPUT); // define o pino 2 como "entrada"
}
loop(){
if (digitalRead(2) == HIGH) { // Caso o botão seja pressionado
digitalWrite(13, HIGH); // Muda o estado do pino para alto
delay(8000); // delay de 8 segundos
digitalWrite(13, LOW); // muda o estado do pino para baixo
}
}
Simples e objetivo.
Muito obrigado amigo! Tive problemas com a senha da minha conta e não tive como voltar pra te agradecer, mas realmente deu certo! Eu estava complicando demais pra nada hahaha. Muito obrigado pelas dicas!
Que ótimo que pude ajuda-lo.
Se possível, altere o nome do tópico para: "[resolvido] Acionar rele por 8seg após pressionar botão"
Bom dia,
Como o Hélio já deu as dicas, sugiro que estude:
https://docs.arduino.cc/built-in-examples/digital/Debounce
https://labdegaragem.com/profiles/blogs/tutorial-executando-fun-es-...
https://create.arduino.cc/projecthub/techvaler/basic-setup-for-ardu...
e ainda:
https://blog.eletrogate.com/componentes-basicos-do-arduino-o-que-e-...
https://blog.eletrogate.com/arduino-ide-montagem-e-descricao-de-onz...
https://blog.eletrogate.com/o-que-e-o-efeito-bouncing-e-como-evita-lo/
Muito obrigado pelas fontes, amigo. Irei sim estudar mais sobre! Espero um dia poder estar auxiliando outras pessoas assim como vocês.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por