int first = 0;int second = 0; int caso = 0;
#include /font>Keypad.h>
#include /font>LiquidCrystal.h>//biblioteca do display
LiquidCrystal lcd(8, 9, 7, 6, 5, 4);
const byte ROWS = 4;
const byte COLS = 4;
// Define o Keypad (mapa do circuito do teclado).
char keys[ROWS][COLS] =
{
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = { 31, 33, 35, 37 };
byte colPins[COLS] = { 39, 41, 43, 45 };
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Objeto do keypad
char tecla = kpd.getKey(); //Variavel para adquirir a tecla pressionada
void setup() {
lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas)
}
void loop()
{
char tecla = kpd.getKey(); //Variavel para adquirir a tecla pressionada
switch (caso)
{
case 0:
lcd.setCursor(0, 0);
lcd.print ("MENU");
lcd.setCursor (0, 1);
lcd.print ("INSIRA O TAMANHO");
caso = 1;
break;
case 1:
switch (tecla)
{
case '0' ... '9': // Caso aperte teclas de 0 a 9 para definir o tamanho do fio
lcd.clear();
lcd.setCursor (0, 0);
lcd.print ("TAMANHO EM MM"); // Tamanho do fio a ser definido
lcd.setCursor(0, 1);
first = first * 10 + (tecla - '0'); // Conta para acumular digitos no lcd.print (ex:136)
lcd.print(first);
caso = 1;
break;
case '*': // Caso aperte * será como um "enter" e irá para o menu de quantidade de fios
caso = 2; // Outra tela do menu
lcd.clear();
lcd.setCursor(0, 0);
lcd.print ("INSIRA A QTDE"); // Quantidade de fios a ser definido
lcd.setCursor(0, 1);
second = second * 10 + (tecla - '0'); // Mesma conta para acumular digitos
lcd.print(second);
break;
}
}
}
Tags:
As respostas para este tópico estão encerradas.
Olá Lucas
Por favor modifique seu tópico de acordo com as regras do nosso fórum.
Se possível leia esse tópico Important
Obrigado
Editado, ok?
Algumas coisas eu fiquei em dúvida. Você fez uma chamada de função fora do setup() e do loop(), como essa aqui: char tecla = kpd.getKey(); Onde as variáveis "first" e "second" são zeradas? isso pode causar um overflow.
Essa chamada acabei de ver q está inutilmente no programa, ela não esta interferindo em nada... as variaveis "first" e "second" não são zerados pois precisarei do valores delas posteriormente para fazer o calculo para trabalhar o acionamento do motor em função do tempo ligado.
O q eu percebi foi q se eu mudo o '*' para por exemplo '9' , ele joga o valor "9" em vez de "-6", então está parecendo que ele está jogando o endereço do caracter, e não a função em si.
Acho que a estrutura do seu programa esta incorreta.
Como irá identificar os digitos quando for inserir a quantidade ?
Depois de digitar * , aparece o segundo menu , não é ?
Não esta faltando mais um case ?
case '0' ... '9':
Sim, está faltando outro case, vc entendeu perfeitamente o programa, o problema é que quando coloco outro case '0' ... '9': ele digita a mesma coisa para os 2 menus, ou seja, se eu digitar 12 no tamanho e for pro menu da quantidade vai estar "12 mais o digito q eu colocar a mais", mesmo eu fazendo em switch diferente, creio eu q seja pq a variavel "char tecla" seja uma só, não consigo distingui-las
Esqueci de mencionar q se colocar outro case desse jeito q vc mencionou, o problema de aparecer "-6" some, porem acontece o que eu disse...
Minha sugestão:
Primeiro faça um programa de teste usando o Keypad (teclado de membranas)
Use o print na console, para simplificar o programa. Crie os dois menus.
http://playground.arduino.cc/Code/Keypad
http://playground.arduino.cc/Main/KeypadTutorial
Depois acrescente as rotinas de LCD.
Sim, usar o Serial.print()
https://www.arduino.cc/en/Serial/Print
Pode fazer quantas rotinas quiser. Só depende do tamanho da memória do Arduino.
Uma dica para aprender Arduino :
Ao lado da linhas de programa, insira comentários explicando o que ela faz.
Leia, estude e entenda isso:
http://playground.arduino.cc/Code/Keypad
http://playground.arduino.cc/Main/KeypadTutorial
Veja isso também:
http://labdegaragem.com/forum/topics/cria-o-de-menu-com-arduino
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por