Função millis em teclado matricial

Boas,
Tenho um teclado matricial que para ser "desbloqueado" temos de introduzir password, e assim avançamos para a fase seguinte, (possibilidade de accionar relés via teclado).

Pretendia introduzir no meu código uma função que me conta-se o tempo decorrido desde o pressionar da ultima tecla de modo a que passados "x" segundos sem teclas pressionadas volta-se para o estado inicial, (antes de introdução de password.

Julgo, (mas posso estar errado porque ainda sou "maçarico") que a função apropriada seja a função millis ().

A ideia era qualquer coisa do género:

Se("nenhuma tecla pressionada" && millis - tempo > 180000)
{teclado bloqueado}

PS: não sei como por em código a frase: nenhuma tecla pressionada
Alguém pode ajudar?

Obg
NJPinheiro

Em tempos usei um keypad num projecto.Tinha uma função para saber qual era a key pressionada.Se nada for pressionado é devolvido a valor da macro NO_KEY logo a tua solução pode ser:

 if((keypad.getKey() == NO_KEY)  && millis - tempo > 180000)
     {teclado bloqueado}

A minha função era:

char readKeypadButton()
{
  char key = keypad.getKey();
  if (key != NO_KEY)return key;
  else return NO_KEY;

}

Cuidado!

millis é uma função, assim como getKey. Sendo assim o if anterior devia ser:

 if((keypad.getKey() == NO_KEY)  && millis() - tempo > 180000L)

Pll,
a vossa dica faz sentido, em linguagem corrente julgo que se está a dizer:

  • Se o teclado não enviar nenhuma leitura de tecla e o tempo for maior que "x", então bloqueia o teclado.

Mas a verdade é que ele me esta a contar o tempo a partir do momento em que o teclado fica desbloqueado e não após pressionar uma tecla :~ :~ :~

Deixo-vos link para o meu código caso possam ajudar-me!

https://googledrive.com/host/0B-Pv876wR5B1OVFDdF9rYjZ6UFk

Aguardo
obg
NJPiheiro

Sendo assim, cada vez que se prime uma tecla, a variável tempo tem que ser actualizada.

luisilva:
Sendo assim, cada vez que se prime uma tecla, a variável tempo tem que ser actualizada.

E como faço isso?
tempo =0?
e em que parte do código meto?

Obg
NJPinheiro

Não! Se fosse assim, como o tempo actual não é zero, e possivelmente é maior que 180 000, o que isso faria seria bloquear automaticamente o teclado, sem forma de o poder desbloquear. Se o tempo actual for inferior a 180 000, não faz sentido fazer isso, porque não é necessário fazer com que ele se desbloqueie, uma vez que ainda não bloqueou.

luisilva:
Sendo assim, cada vez que se prime uma tecla, a variável tempo tem que ser actualizada.

Não! Se fosse assim, como o tempo actual não é zero

custou, mas foi :slight_smile: :slight_smile: :slight_smile:

tempo = millis();

Pois é simples, mas quando os conhecimentos não abundam até o simples pode ser uma dor de cabeça :roll_eyes:

A persistência traz frutos...e entretanto já aprendi mais qualquer coisa :slight_smile:

Encerro este tópico agradecendo aos ussers HugoPT e luisilva pelas dicas, pois sem elas não tinha conseguido vencer mais esta etapa:

Abraços
NJPinheiro