BOA NOITE, GALERA !

ESTOU PRECISANDO DE UMA AJUDA.

SEGUINTE ESTOU FAZENDO UM PROJETO ONDE TENHO UM BOTÃO E 2 LEDS.

OQUE ACONTECE É QUE EU PRECISO FAZER UMA VERIFICAÇÃO NO BOTÃO 

TIPO :

IF (BOTÃO FOR PRESSIONADO POR 3 SEGUNDOS){

// COMANDO 

}

OBRIGADO .

Exibições: 9807

Responder esta

Respostas a este tópico

use esse codigo 

montado e testado 

nao esqueça de coloca o resistor de elevaçao no gnd e o botao vai no +vcc

int botao = 10;
int saida = 13;
int aciona = false;
long tempo_acionado = 3000;
unsigned long ultimo_tempo = 0;

void setup()
{
pinMode(botao,INPUT);
pinMode(saida,OUTPUT);
}

void loop()
{
unsigned long tempo_atual = millis();

if(digitalRead(botao) == HIGH)
{
aciona = true;
}
if (aciona == true)
{
if(tempo_atual - ultimo_tempo >= tempo_acionado)
{
digitalWrite(saida,HIGH);
ultimo_tempo = tempo_atual;
aciona = false;
}
}
if(digitalRead(botao) == LOW)
{
digitalWrite(saida,LOW);
ultimo_tempo = tempo_atual;
aciona = false;
}
}

so q esta com um led so 

em q condiçao acende o outro led?

O ESQUEMA É O SEGUINTE :

TENHO 2 LEDS (1-VERMELHO E 1- VERDE) E UM BOTÃO. ENQUANTO EU PRESSIONAR O BOTÃO, O LED VERDE ACENDE QUANDO PARAR DE PRESSIONAR ELE APAGA.

QUANDO EU VOLTAR A PRESSIONAR NOVAMENTE O  O LED  VERMELHO ACENDE, QUANDO PARAR DE PRESSIONAR ELE APAGA.

E ESSE CICLO CONTINUA.

SEGUE CÓDIGO QUE ESTOU APLICANDO:

const int botao = 2 ; //pino em que o botão está ligado
const int ledVd = 13 ; //pino em que o LED está ligado
const int ledVm = 9 ;

int contador_botao = 0 ; //contador para o número de prensas botão
int estado_botao = 0 ; // Estado atual do botão
int estado_anterior_botao = 0; // Estado anterior do botão

void setup ( ) {
// inicializar o pino do botão como INPUT:
pinMode ( botao , INPUT ) ;
// inicializar o LED como uma saída:
pinMode ( ledVd , OUTPUT ) ;
// inicializa a comunicação Serial:
Serial . begin ( 9600 ) ;
}


void loop ( ) {
// ler o pino de INPUT botão:
estado_botao = digitalRead ( botao );

// comparar o estado_botao ao seu estado anterior
if ( estado_botao != estado_anterior_botao ) {
// se o estado mudou, incrementar o contador
if (estado_botao == HIGH) {
// se o estado atual é HIGH, então o botão
//muda de desligado para ligado:
contador_botao ++;
Serial.println ( "on" );
Serial.print( "número de vezes em que o botão foi pressionado:" ) ;
Serial . println ( contador_botao ) ;
}
else {
// se o estado atual é baixa, então o botão
//varia de ligado para desligado:
Serial.println ( "off" ) ;
}
}
// salvar o estado atual como o último estado,
// para a próxima vez através do loop
estado_anterior_botao = estado_botao ;


// acende o LED a cada quatro vezes em que o botão foi
//pressionado
// verificar o módulo do contador botão
// a função módulo dá-lhe o restante da
// a divisão de dois números:
if( estado_botao == HIGH && contador_botao == 1 ) {
delay(3000);
digitalWrite ( ledVd , HIGH ) ;
}
else {
delay(3000);
digitalWrite ( ledVd , LOW ) ;
}

if ( estado_botao == HIGH && contador_botao == 2) {
delay(3000);
digitalWrite ( ledVm , HIGH ) ;
}
else {
delay(3000);
digitalWrite ( ledVm , LOW ) ;
}
if(contador_botao == 2 && estado_botao == LOW){
contador_botao = 0;
}
}

vc nao vai poder usar a funçao delay visto q ela para o programa ate terminar o tempo programado

embora seja mais dificil de usar mas tem q ser com a funçao millis()

vai ai o codigo corrigido para 2 leds acenderem com a temporizaçao do botao e alternancia deles:

int botao = 10;
int led_vermelho = 13;
int led_verde = 12;
int aciona_vermelho = false;
int aciona_verde = false;
int libera_led = false;
long tempo_acionado = 3000;
unsigned long ultimo_tempo = 0;

void setup()
{
pinMode(botao,INPUT);
pinMode(led_vermelho,OUTPUT);
pinMode(led_verde,OUTPUT);
}

void loop()
{
unsigned long tempo_atual = millis();

if(digitalRead(botao) == HIGH && libera_led == false)
{
aciona_vermelho = true;
}
if (aciona_vermelho == true)
{
if(tempo_atual - ultimo_tempo >= tempo_acionado)
{
digitalWrite(led_vermelho,HIGH);
ultimo_tempo = tempo_atual;
aciona_vermelho = false;
libera_led = true;
}
}
if(digitalRead(botao) == LOW)
{
digitalWrite(led_vermelho,LOW);
ultimo_tempo = tempo_atual;
aciona_vermelho = false;
}
//
if(digitalRead(botao) == HIGH && libera_led == true)
{
aciona_verde = true;
}
if (aciona_verde == true)
{
if(tempo_atual - ultimo_tempo >= tempo_acionado)
{
digitalWrite(led_verde,HIGH);
ultimo_tempo = tempo_atual;
aciona_verde = false;
libera_led = false;
}
}
if(digitalRead(botao) == LOW)
{
digitalWrite(led_verde,LOW);
ultimo_tempo = tempo_atual;
aciona_verde = false;
}
}

espero q ajude 

bons projetos!!!!

MUITO OBRIGADO, ME AJUDOU MUITO.

PORÉM OS DOIS LEDS NUNCA PODEM ESTAR LIGADOS JUNTOS.

E O CÓDIGO QUE VC PASSOU FAZ ISSO, QUANDO EU SEGURO O BOTA PRESSIONADO ELE LIGA OS DOIS LEDS.

ESTOU VERIFICANDO SE CONSIGO MUDAR ISSO COM O SEU CÓDIGO 

FALOW 

OBRIGADO 

AGORA SIM DEU CERTO. 

SEGUE CÓDIGO :

int botao = 2;
int led_vermelho = 12;
int estado_vermelho = 0;
int led_verde = 13;
int aciona_vermelho = false;
int aciona_verde = false;
int libera_led = false;
long tempo_acionado = 3000;
unsigned long ultimo_tempo = 0;
void setup()
{
pinMode(botao,INPUT);
pinMode(led_vermelho,OUTPUT);
pinMode(led_verde,OUTPUT);
Serial.begin(9600);
}
void loop()
{
unsigned long tempo_atual = millis();
if(digitalRead(botao) == HIGH && libera_led == false && aciona_verde == false)
{
aciona_vermelho = true;
}
if (aciona_vermelho == true)
{
if(tempo_atual - ultimo_tempo >= tempo_acionado)
{
digitalWrite(led_vermelho,HIGH);
Serial.print("O led vermelho está acionado");
ultimo_tempo = tempo_atual;
aciona_vermelho = true;
libera_led = true;
}
}
if(digitalRead(botao) == LOW)
{
delay(3000);
digitalWrite(led_vermelho,LOW);
ultimo_tempo = tempo_atual;
aciona_vermelho = false;
}
if(digitalRead(botao) == HIGH && libera_led == true)
{
aciona_verde = true;
}
if (aciona_verde == true)
{
if(tempo_atual - ultimo_tempo >= tempo_acionado)
{
digitalWrite(led_verde,HIGH);
ultimo_tempo = tempo_atual;
aciona_verde = true;
libera_led = false;
}
}
if(digitalRead(botao) == LOW)
{
delay(3000);
digitalWrite(led_verde,LOW);
ultimo_tempo = tempo_atual;
aciona_verde = false;
}
}

Meu irmão vc nao sabe o quanto vc me ajudou!!!! Obrigado !!!

Muito obrigado. Ajudou muito.

então eu to com uma ideia mais ou menos assim :

quando eu pressionar o botão normal ele vai funcionar o pino X quando eu apertar e segurar ele ativa o pino Y, assim eu apertar o botão normal ele vai ligar a saida x se eu apertar de novo ele desliga a saída x , se eu apertar e segurar ele liga a saída y se soltar ele desliga a saída y.

obrigado !!!!

Oi Carlos.
Sei que já jaz muito tempo que postou, mas gostaria de saber se conseguiu o código como descreveu na sua pergunta. Eu estou com um projeto que tem algo parecido. Se puder dizer como resolveu, agradeço

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2020   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço