Galera eu queria fazer um esquema que funcionaria assim, eu coloco um valor e do #(enter) e ae ele pede outro valor e ae eu aperto novamente #(enter) e ae comece a fazer o meu que meu programa tem que fazer com esses dois numeros, mas cada um desses tem até centenas!!

Como eu faço isso?????

Exibições: 1571

Responder esta

Respostas a este tópico

O que você tem até agora e em qual parte está tendo problema?
Você já conseguiu fazer a entrada de dados apartáveis de um keypad?

Eu tenho isso até agora

#include <Keypad.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const byte linhas = 4;
const byte colunas = 4;

char teclas[linhas][colunas] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte pinlinhas[linhas] = {22, 24, 26, 28};
byte pincolunas[colunas] = {52, 50, 48, 46};

Keypad keypad = Keypad( makeKeymap(teclas), pinlinhas, pincolunas, linhas, colunas );

void setup(){
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("TECLA");
}

void loop(){
char teclas = keypad.getKey();

if (teclas != NO_KEY){

lcd.setCursor(0, 1);
lcd.print(teclas);



}
}

ae disso eu to tentando ver como vou fazer para fazer com que eu coloque um numero tipo 52 ae do enter ae coloco um numero 110 ae do enter e ae eu giro um motor de passo pra 52 passos e o outro motor de passo para 110 passos mas a parte dos passos eu tenho aqui como programar o problema vai ser essa junção de 2 ou tres numeros e o enter(#)

A variável "teclas" irá ler a tecla pressionada, então você pode verificar se é #, caso não, concatene esses dados em uma variável, caso sim passe a concatenar em outra variável
Se for lido # pela segunda vez, compare as duas variáveis que foram criada nessa processo, caso sejam iguais prossiga, caso sejam diferentes mostre algum erro. Nos dois casos lembre-se de limpar as duas variáveis.

sim mas quando eu pressiono uma tecla ela lé só que quando eu vou pressionar a segunda tecla ela substitui a anterior!

Sim, por isso que você precisa concatenar com uma outra variável
Por exemplo, cria uma variável qualquer e vai "adicionando" as teclas lidas nessa variavel

e como eu faço isso????

O João Arthur tem razão.

Uma vez eu fiz uma função que faz exatamente o que você quer: ler um valor numérico pelo keypad até o usuário pressionar #.

Veja no meu blog abaixo e procure pelo código-fonte a função readVal

Coloque essa função no seu código e chame-a 2 vezes. guardando os valores nas variáveis que você desejar.

Não se esqueça que essa função devolve uma String. Mas aí é só convertê-la para int ou float na medida da sua necessidade. Tem um exemplo disso também no código.

Função readVal:
String readVal(){
  String myString = "";
  char keyPressed = keyPad.getKey();
  while (keyPressed != '#'){
    keyPressed = keyPad.getKey();
    if ((keyPressed != NO_KEY) && (keyPressed != '#')) {
      myString.concat(keyPressed);
      lcd.print(keyPressed);
      playTone();
      }  
    }  
  return(myString);  
  }

Obs: O playTone é só para dar um sinal sonoro no pressionamento das teclas. Você poder retirá-lo. O lcd também é opcional

então o readVal n esta funcionando!!!

É q eu n manjo de string tipo colocar um char em cada uma das strings depois concatenar elas e depois transformar elas em numero.

Talvez você possa trabalhar com Int
Inicie uma variável com o valor 0, por exemplo vamos chamar de senha, e toda vez que uma tecla for pressionada (e não for #) vc faz senha = senha*10 + (incomungByte - 48);
No final você terá sua senha saca nessa variável como um inteiro.

n entendi essa da senha * 10 

tipo eu começo

int senha = 0;

ae la em baixo eu colocaria 

char teclas = keypad.getKey();

if (teclas != '#'){

senha = senha * 10 + (incomungByte - 48);

}

????????????

A função readVal já faz tudo isso pra você. Apenas coloque-a no final do seu código e depois no programa principal faça isso:

int num1 = readVal().toInt();

int num2 = readVal().toInt();

Ela vai trazer para as variáveis num1 e num2 os dois valores lidos

em qual variavel ele guarda cada um dos dois??? pq ficou assim

#include <Keypad.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const byte linhas = 4;
const byte colunas = 4;

char teclas[linhas][colunas] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte pinlinhas[linhas] = {22, 24, 26, 28};
byte pincolunas[colunas] = {52, 50, 48, 46};

Keypad keypad = Keypad( makeKeymap(teclas), pinlinhas, pincolunas, linhas, colunas );

void setup(){
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("TECLA");
}

void loop(){
lcd.clear();
lcd.setCursor(0, 0);
int hit = readVal().toInt();
lcd.setCursor(0, 1);

}

String readVal(){
String myString = "";
char keyPressed = keypad.getKey();
while (keyPressed != '#'){
keyPressed = keypad.getKey();
if ((keyPressed != NO_KEY) && (keyPressed != '#')) {
myString.concat(keyPressed);
lcd.print(keyPressed);

}
}
return(myString);
}

porque seria mais ou menos assim,

motor 1: digitar numero

motor2: digitar numero

e ae eu jogo cada uma dessas variaveis nos passos do motor!!

E esse toInt ja faz o valor lido virar numero ou eu tenho que transformar ele me numero????

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço