No código implementado na atividade 5 do contador binário (botão que controla o incremento), a ideia é incrementar o contador a partir de ação da tecla ligada ao pino 8 e não pelo tempo
A explicação deste tutorial presume que a chave esteja montada da seguinte forma ligada a um pino com resistor de pull up ativado:
Para isso teríamos, em tese, dentro do looping principal:
escreve_byte (contador); // escreve o byte na saída
if (digitalRead(bt_inc)==0) contador++; // incrementa a variável contador em uma unidade
}
Em tese, o programa acima funciona, ou seja, a sua lógica está correta.
Porém, na prática este código se torna ineficiente, pois o nosso microcontrolador executa este código em uma velocidade muito alta, e dessa forma ao pressionar a chave ele passa diversas vezes pelo comando de teste da chave (if), o que provoca o resultado de “corrida” do contador (o contador incrementa mais de uma posição).
Para solucionar é necessário após a detecção de chave pressionada aguardar que ela seja solta.
O truque consiste em abrir um looping para deixar preso o programa até que o botão seja solto.
escreve_byte (contador); // escreve o byte na saída
if (digitalRead(bt_inc)==0){
while (digitalRead(bt_inc)==0);
contador++; // incrementa a variável contador em uma unidade
}
}
O comando while (digitalRead(bt_inc)==0); fica preso em um looping enquanto que a chave estiver pressionada. Enquanto a condição for verdadeira (chave pressionada) o comando while não executa nada ( o “;” no final do comando while garante isso).
Nenhum comentário:
Postar um comentário