O teclado Numérico ou keypad é um componente utilizado em uma infinidade de aplicações desde telefone à fechaduras eletrônicas. Por ser bastante conhecido, ele dispensa informações básicas.
O princípio do keypad é muito simples, não passa de uma matriz de botões como mostra a imagem abaixo.
São criadas linhas e colunas que se cruzam atravpes dos botões. As colunas são os OUTPUTS (por onde a corrente elétrica será enviada) e as linhas são os INPUTs (por onde a corrente vai sair), então ao pressionar o botão a corrente faz uma curva da linha para a coluna, sendo possível identificar qual botão foi pressionado.
Configuração do Hardware
Configuração do Software
char* secretCode = "1234";
int position = 0;
int led = 13;
const int numRows = 4; // number of rows in the keypad
const int numCols = 3; // number of columns
const int debounceTime = 20; // number of milliseconds for switch to be stable
// keymap defines the character returned when the corresponding key is pressed
const char keymap[numRows][numCols] = {
{ '1', '2', '3' } ,
{ '4', '5', '6' } ,
{ '7', '8', '9' } ,
{ '*', '0', '#' }
};
// this array determines the pins used for rows and columns
const int rowPins[numRows] = { 8,7,6,5 }; // Rows 0 through 3
const int colPins[numCols] = { 2,3,4 }; // Columns 0 through 2
void setup()
{
pinMode(led, OUTPUT);
Serial.begin(9600);
for (int row = 0; row < numRows; row++)
{
pinMode(rowPins[row],INPUT); // Set row pins as input
digitalWrite(rowPins[row],HIGH); // turn on Pull-ups
}
for (int column = 0; column < numCols; column++)
{
pinMode(colPins[column],OUTPUT); // Set column pins as outputs
// for writing
digitalWrite(colPins[column],HIGH); // Make all columns inactive
}
}
void loop()
{
char key = getKey();
Serial.println(key);
}
// returns with the key pressed, or 0 if no key is pressed
char getKey()
{
char key = 0; // 0 indicates no key pressed
for(int column = 0; column < numCols; column++)
{
digitalWrite(colPins[column],LOW); // Activate the current column.
for(int row = 0; row < numRows; row++) // Scan all rows for
// a key press.
{
if(digitalRead(rowPins[row]) == LOW) // Is a key pressed?
{
delay(debounceTime); // debounce
while(digitalRead(rowPins[row]) == LOW)
; // wait for key to be released
key = keymap[row][column]; // Remember which key
// was pressed.
}
}
digitalWrite(colPins[column],HIGH); // De-activate the current column.
}
return key; // returns the key pressed or 0 if none
}
Nenhum comentário:
Postar um comentário