Galera, estou projetando uma maquina de cortar fio automatica, sendo necessario colocar o tamanho do fio e a quantidade de fios a serem cortados.
Estou usando um arduino mega 2560, Display 16x2 e um keypad 4x4 ligados direto sem resistores

Segue o programa:

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;
}
}
}






A duvida é quando vou inserir a quantidade automaticamente o arduino joga o valor "-6" no campo de digitação e não consigo tirar de jeito nenhum.

Exibições: 401

As respostas para este tópico estão encerradas.

Respostas a este tópico

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 

Ok

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.


Veja isso também:
http://labdegaragem.com/forum/topics/cria-o-de-menu-com-arduino
Desculpe minha ignorância, mas oq seria usar o print no console? Serial monitor vc diz? Eu vi em um tutorial um rapaz q faz um loop só do lcd e um loop só de "ações" é possível? Se sim como consigo fazer 2 loops separados?

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

Obrigado! Tentarei fazer algo.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço