Boa tarde galera,
Estou trabalhando em um código que precisa receber valores na casa de centenas, dezenas e unidades (ex: 134, 3, 56...), apos o usuário inserir os valores, gostaria que os valores apenas entrasse na lógica, após pressionar um botão ENTER.
A minha dúvida inicial está em como poderia ler mais de um numero pelo Keypad, hoje eu só consigo ler unidade.
A segunda dúvida, é como poderia implementar essa função de ENTER em um determinado botão do Keypad, para enviar os números para a lógica seguinte?
Sou grato pela ajuda.
Obrigado
Parece-me que isto:
http://forum.arduino.cc/index.php?topic=253306.msg1810882#msg1810882
responde à sua questão, certo?
Olá luissilva, parece que é esta a lógica. Vou testar aqui, e posto o resultado. Apenas outra pergunta, quando entrar no estado do usuário colocar os números, o programa deverá aguardar a entrada dos números via while? Por exemplo:
while(! NO_KEY)?
Obrigado
Luis, no meu programa, a parte para o usuário inserir os números, estão fora do void loop. Esta numa parte da programação chamada void enroll (crie este void para facilitar a programação). O efeito para aguardar o usuário digitar, seria o mesmo, no void loop? Ou preciso remanejar meu código para o void loop?
Porque é que não mostra o código? Seria bastante mais fácil esta conversa se conhecesse o código.
Luis, desculpe-me não postar antes. Estava com dificuldades para uso da internet.
Eu consegui fazer o que queria, com base na sua informação, segue o que fiz:
void loop() // run over and over again
{
lcd.clear();
lcd.setCursor(1,0);
lcd.println("Enroll/Verify? ");
while(true) {
customKey = customKeypad.getKey();
if (customKey == '#'){ //verifica sé é um digito ASCII, chama variavel C que foi digitado no teclado
lcd.clear();
verify();
}
else if(customKey == '*'){
estado = true;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Digite o ID: ");
while(customKey = 2)
{
customKey = customKeypad.getKey();
if(customKey >= '0' && customKey <= '9') {
value = value * 10 + customKey - '0';
lcd.setCursor(12,0);
lcd.print(value);
delay(200);
}
if(customKey == '#'){
id = value;
enroll();
value = 0;
}
}
}
}
}
void enroll()
{
{
Serial.end();
Serial.begin(9600);
}
//lcd.clear();
if (id == (pin = EEPROM.read(id))) // Verifica se o ID digitado esta na E2PROM
{
lcd.clear();
lcd.print(" #ID cadastrado ");
lcd.setCursor(7,1);
lcd.print(id);
delay(2000);
uint8_t id = 0;
customKey = 0;
loop();
}
else if(id != EEPROM.read(id))
{
}
lcd.clear();
lcd.print("Cadastrando ID#: ");
//delay(1000);
lcd.setCursor(0,1);
lcd.print(id);
delay(2500);
while (! getFingerprintEnroll(id) );
}
O código segue ainda, para outras etapas. A dúvida que surgiu em cima do código acima, é de limitar para apenas 3 digitos, ex: 234, 546, 988..Hoje sei que ele digita valores até 32mil e alguma coisa, após este valor ele fica aleatório.
[b]while(customKey = 3) [/b] //Tenho dúvida neste ponto, se com o While, consigo fazer ele limitar para 3 dígitos.
{
customKey = customKeypad.getKey();
if(customKey >= '0' && customKey <= '9') {
value = value * 10 + customKey - '0';
lcd.setCursor(7,1);
lcd.print(value);
client.print(value);
delay(200);
}
if(customKey == '#'){
id = value;
enroll();
value = 0;
}
if(customKey == '*'){
loop();
}
}
}
Isso que descreve pode ser feito de várias formas. Se faz com um while, então devia retirar:
if(customKey == '#'){
id = value;
enroll();
value = 0;
}
e quando sai do while verifica logo (sem ser necessário premir o ' # ').
Em relação ao seu while, não gosto muito.
while(customKey = 3)
esta linha faz "repetir enquanto (while=enquanto), a tecla for igual a 3?". Não faz nenhum sentido. Para além disso nesta linguagem de programação, a comparação de igualdade é feita com dois sinais de igual '==', apenas um sinal é usado para outra coisa.
O que devia fazer era, criar outra variável que fosse incrementada quando o utilizador prime uma tecla numérica, e repetir o cíclo, enquanto o utilizador não premir pelo menos 3 teclas.
Veja se consegue fazer isto, se não conseguir diga qualquer coisa.
Desculpe-me a demora meu caro.
A questão do While, é para limitar o usuário a digitar no Keypad, até 3 números..Ou digita 2, ou digita 47, ou digita 874, por exemplo. Ainda preciso do '#' como Enter, para enviar o comando void enroll.
Ainda estou lutando para deixar rodando como comentado acima.
Mas vou conseguir ![]()
Vou implementar e qualquer dúvida posto aqui. Eu tenho outro dúvida, um pouco mais complexa, o meu projeto envolve Sensor de Impressão Digital, e estou bem no desenvolvimento. Porém, eu gostaria de algo que pudesse interfacear com o usuário, além do Keypad e Display LCD 16x2. Imagino poder jogar os IDs cadastrados, em um banco de dados (MySQL) e posteriormente, adicionar a uma lista negra (lista de exceções) os IDs que não poderão validar sua impressão digital. Hoje possuo o Ethernet Shield W5100, ainda não realizei nenhuma conexão via MySQL.
Você acha que para esta finalidade, o melhor caminho seria este que falei acima? Estou aberto a idéias e opiniões para melhora deste projeto. (Projeto do meu TCC - Engenharia Eletrônica).
boa tarde, sera q alguem consegue me ajudar
preciso fazer um codigo q fique variando de 70 a 170v subindo e descendo
alguem tem alguma ideia
obrigado
Olá, meu nome é Carlos, um estudante do ensino médio, tenho 17 anos de nacionalidade colombiana, estou estudando na escola Nuestra Señora de la Candelaria no município de Planeta Rica / Córdoba, eu precedente neste grupo por razões de trabalho escolar, Tenho hobbies jogando vôlei e desenho, obrigado pela atenção.