Boa Tarde pessoal, estou com dificuldade para colocar tempo no botão,

funciona assim: eu tenho que pressionar o botão durante 2 segundos e depois aciona a saida, e se eu manter o botão pressionado mais que 3 segundos ele desliga a saida.

eu consegui fazer a primeira parte de acionar a saida depois de um tempo, mas não consigo fazer a mesma desligar se eu manter o botão pressionado.

SEGUE O CÓGIDO:

# define botao 12
# define saida 13
unsigned long tempo_acionado = 2000;
unsigned long ultimo_tempo = 0;
int i = 0;
void setup() {
Serial.begin(9600);
pinMode(botao, INPUT);
pinMode(saida, OUTPUT);
digitalWrite(botao, 1);

}
void loop() {

unsigned long tempo_atual = millis();
if (digitalRead(botao) == 0)
{

if (tempo_atual - ultimo_tempo >= tempo_acionado)
{

i++;
Serial.println("Apeto: ");
Serial.println(i);
digitalWrite(saida, 1);
ultimo_tempo = tempo_atual;
}

}

Exibições: 270

Respostas a este tópico

Na prática, não se consegue uma transição limpa de níveis de tensão 
ALTO e BAIXO a partir de uma chave mecânica, devido a trepidação do 
contato, ao mover a chave de um contato (posição) para outro.

Trepidações de contado geram falsas informações, verifique isto.

Leandro, da uma olhada nesse código e vê se funciona:


# define botao 12
# define saida 13

#define TEMPO_ACIONAR 2000
#define TEMPO_DESLIGAR 3000

#define ATIVADO 0


unsigned long tempo_inicial;


void setup() {
Serial.begin(9600);

pinMode(botao, INPUT);
pinMode(saida, OUTPUT);

digitalWrite(botao, 1);

tempo_inicial = millis();
}

boolean botaoAtivado() {
int contadorFiltro = 0;
for (int j = 0; j < 10; j++) {
digitalRead(botao)==ATIVADO? contadorFiltro++ : contadorFiltro;

delay(2);
}

return contadorFiltro > 5;
}

void loop() {

while(botaoAtivado()) {
if(millis() - tempo_inicial > TEMPO_DESLIGAR)
digitalWrite(saida, 1);

else if(millis() - tempo_inicial > TEMPO_ACIONAR)
digitalWrite(saida, 0);

delay(5);
}

tempo_inicial = millis();
}

A ideia é que ele trate esse problema da transição limpa entre níveis de tensão e trate também o acionamento e desligamento da saída. Qualquer coisa fala aew.

Anexos

Vou testar o código aqui Gabriel

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço