domingo, 29 de dezembro de 2013

Curso Arduino 07 - Botão - Keypad / Teclado Numérico


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