Como executar o loop principal do teclado da entrada do projeto Arduino Sistema

Você terá que executar um loop principal para o seu sistema de entrada de teclado projeto Arduino. Existem apenas algumas coisas que o código faz a operar seu sistema de entrada. O laço principal funciona como se segue:

  1. Ouvir para uma chave.

  2. Se uma tecla foi pressionada, enviá-lo para o display LED.

  3. Incrementar o número de teclas pressionadas por um.

  4. Inseri-lo no buffer de código na próxima posição disponível.

  5. Determinar se quatro dígitos tenham sido digitados.

    Se assim for, verifique se o código é válido.

  6. Se o código for válido, abra a porta e repor tudo para a próxima vez.

A principal coisa que você precisa fazer é verificar se uma tecla foi pressionada. A primeira instrução cria um local de carbonizar variável chamada chave para armazenar o caractere que é enviado de volta a partir de uma função chamada getKey (). Lembre-se do kEYMAP? É aí que este número, em última análise vem.

O valor char chave também é atribuído ao codeBuffer [] matriz, que você usa para testar se o código é válido. É adicionada à posição armazenada pela keypressCount, que é incrementado para cima cada vez que um novo personagem é detectado. o # 147 zero-th # 148- personagem é a primeira tecla pressionada detectado. assim codeBuffer [0] contém a primeira tecla pressionada no teclado, codeBuffer [1] contém a segunda tecla pressionada, e assim por diante.

A próxima condicional E se indicação executa somente quando uma tecla foi pressionada, altura em que as etapas 2 a 6 da lista anterior são processados. Se a chave não foi pressionado, o programa apenas espera para que isso aconteça. Quando isso acontece, o sendCommand função executa:

sendCommand (keypressCount + 1, key) -

o sendCommand tem dois parâmetros: quais sete segmentos número do módulo de mudar, eo que mudá-lo. Você usa keypressCount não só para manter o controle do número de chaves vezes ter sido pressionado até agora, mas também para dizer que dígitos de sete segmentos para acender.

Contudo, keypressCount começa em zero porque o código[] a amortecedor[] matrizes de caracteres começar sua numeração em zero, e você deseja armazenar esses valores no lugar certo. Mas o chip Max começa dígitos de numeração de 1. Portanto, para usar keypressCount para acender o dígito de sete segmentos correta, você tem que adicionar um (+1) Para o seu valor.

A próxima instrução implementa esse recurso depuração útil. Se tiver definido a DEPURAR boolean para verdade, o código irá imprimir todas as suas variáveis ​​para a porta serial.

Em seguida, você incrementar o keypressCount por um e, em seguida, testar para ver se quatro dígitos ter sido pressionado. Se assim for, é hora do show. o atraso (500) declaração dá-lhe um meio segundo para ver o dígito último código de acesso inserido, porque o visor muda dependendo se o código de acesso correto foi digitado. Este teste é feito com um pouco de código em linguagem C nativa:

if (memcmp (codeBuffer, código, 4) == 0) {if (debug) {Serial.println ( "Match!") -} desbloqueio () -}

A função memcmp () compara dois itens na memória e toma como parâmetros os dois itens e seus comprimentos esperados. Neste caso, você está comparando o codeBuffer matriz e o código armazenado no início do programa. Ambos têm um comprimento de quatro bytes.

Se eles são exactamente as mesmas, o memcmp () função retorna um zero e isso é exatamente o que você está procurando na declaração condicional. Se eles forem iguais (e DEPURAR é verdade), # 147-MATCH! # 148- é impresso para a porta serial e o desbloquear () função é executada. Se a comparação memória falhar, então a função não retorna um # 147-0, # 148- ou seja, o código errado foi inserido.

Em ambos os casos, você quer limpar o visor, pronto para a próxima vez. Então você chamar o clearDisplay () função. Outra instrução em linguagem C nativa faz um pouco de limpeza de memória:

memset (codeBuffer, 0, 4) -

Isso limpa a codeBuffer explicitamente, definindo-o como 0. Seu comprimento é de 4, que é o segundo parâmetro. Alguns podem argumentar que esta instrução não é necessário, mas é uma boa prática para gerenciar explicitamente a memória, em vez de deixar as coisas ao acaso.

Por último, porque este foi o quarto keypress e há apenas quatro dígitos para avaliar, a keypressCount precisa ser reposto a zero para que você está pronto para a próxima iteração.

menu