boa noite pessoal, tudo bem?

Aguém poderia mim dar uma forcinha?

tem algum codigo ou logica de programação que faz com que eu acione um botão no lcd Keypad somente depois de eu ter precionado outro botão?

exemplo

suponhamos que meu lcd keypad tem 2 botoes.

botao 1 imprime no lcd uma mensagem

botao 2 imprime no lcd uma contagem regressiva

gostaria que a função do botao 2 só fosse executada se a função do botao 1 fosse executada primeiro

ou seja gostaria que o botao 2 ficasse inativo enquanto eu nao  precionar o botao 1

no meu caso quando pressiono o botao 1 e depois o botão 2 começa a contagem

e se eu pressiono somente o botao 2 tambem começa a contagem.

desde ja agradeço a atenção de todos.

Exibições: 638

Responder esta

Respostas a este tópico

Utilize uma variável auxiliar para isso. Ao declarar essa variável defina um valor inicial para ela, por exemplo 0, e após executar a função do botão 1 defina outro valor para essa variável, por exemplo 1.

Na parte do código que você verifica se o botão 2 foi pressionado, verifique também o valor da variável auxiliar. Se for 1, execute a função e se for 0 ignore.

if((digitalRead(botao2)==1 && (variavel==1))

Não se esqueça de voltar a variável para o valor inicial, no caso 0, depois de executar a função do botão 2.

Olá joão tudo bem?

Primeiramente gostaria de agradecer imenssamente por sua ajuda,

Perdoe minha ignorância, mas é que estou usando o arduino a poucos dias e meu conhecimento com linguagem de programação é 000,1%

então na teoria consegui entender um pouco, mas quando parti para pratica, não consegui fazer nada.Rsrrsrs

e agora qualquer tecla que preciono começa somente a primeira contagem.

o codigo é esse,

void loop() {
int Botao = analogRead (0);

if (Botao < 99) {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("Tempo");
lcd.setCursor(2, 1);
lcd.print("2 Segundos");

}

else if (Botao < 800) {
lcd.clear();
lcd.setCursor(7, 1);
lcd.print("1");
delay(1000);
lcd.setCursor(7, 1);
lcd.print("2");
}

if (Botao < 200) {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("Tempo");
lcd.setCursor(2, 1);
lcd.print("5 Segundos");

}

else if (Botao < 800) {
lcd.clear();
lcd.setCursor(7, 1);
lcd.print("1");
delay(1000);
lcd.setCursor(7, 1);
lcd.print("2");
lcd.setCursor(7, 1);
lcd.print("3");
delay(1000);
lcd.setCursor(7, 1);
lcd.print("4");
delay(1000);
lcd.setCursor(7, 1);
lcd.print("5");
}

}

desde sempre lhe agradeço.

Vou dizer como você faria para uma situação e você tenta fazer para a outra.
Antes do setup declare uma variável inteira com valor igual a 0
int aux = 0;
Dentro do IF que verifica se o botão é menor que 200, após o lcd.print("5 Segundos"); coloque aux=1;
Agora na condição do IF Botão < 800 troque por Botão < 800 && aux == 1
E após o pcs.print("5") coloque aux=0;

bom dia João.

muito obrigado, deu certinho. muito legal mesmo.

agora caso eu queira por mais  botões com tempos diferentes, sendo que o Botão <800 será sempre o botão de START devo criar uma nova variavél aux ou não?

tipo:

declaro uma nova variavel chamada int aux2 = 2

if ( < 400 ) {

"codigo"

aux2  = 3

}

else if(botao <800 && aux == 3 ) {

" codigo"

aux2=2;

}

 

Não sei se entendi direito mas você quer usar 3 desses botões para definir tempos e 1 botão como START, é isso?

Se for isso é bem simples, basicamente você vai precisar de apenas 1 variável que será responsável por guardar o tempo escolhido. Como exemplo, vamos chamar essa variável de 'tempo'. Crie a variável tempo com valor inicial igual a 0 e em cada botão de seleção de tempo você define um novo valor para essa variável. Por exemplo

if (Botao < 200 && Botao >= 99) {
    lcd.clear();
    lcd.setCursor(5, 0);
    lcd.print("Tempo");
    lcd.setCursor(2, 1);
    lcd.print("2 Segundos");

    tempo = 2;

}

if (Botao < 99) {
    lcd.clear();
    lcd.setCursor(5, 0);
    lcd.print("Tempo");
    lcd.setCursor(2, 1);
    lcd.print("5 Segundos");

    tempo = 5;

}

E dentro do IF do Bota < 800 você usa um FOR indo de 1 até o valor da variável tempo, e na condição do IF você verifica se a variável tempo é maior que 0. Dessa forma

if(Botao < 800 && Bota > 400 && tempo > 0){

     for(int i=1; i<=tempo; i++){

         lcd.clear();
         lcd.setCursor(7, 1);
         lcd.print(i);
         delay(1000);

     }

}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço