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.

Nao%20funcionando%20%3B%28.txt

Exibições: 80

Responder esta

Respostas a este tópico

Simplificado, você pode colocar debounce, contagem regressiva, etc.

LED_TIME.rar

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"

Muito obrigado pelas fontes, amigo. Irei sim estudar mais sobre! Espero um dia poder estar auxiliando outras pessoas assim como vocês.

RSS

© 2022   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço