// ===============================================================
//Layout do teclado
// 1 | 2 | 3 | * |
// 4 | 5 | 6 | # |
// 7 | 8 | 9 | 0 |
// ===============================================================
// --- Mapeamento de Hardware ---
#define COLUNA_1 16
#define COLUNA_2 15
#define COLUNA_3 14
#define COLUNA_4 13
#define LINHA_1 17
#define LINHA_2 8
#define LINHA_3 9
// ===============================================================
// --- Protótipo das Funções ---
void readMatrix(); //leitura do teclado
void store(char value); //Função para armazenar o número digitado no teclado matricial
void printBotao(); //impressão do número correspondente ao botão pressionado na matriz
// ===============================================================
// --- Variáveis ---
char controleColuna = 0x01;
int botaoPressionado = 0x00; //variável para armazenar o número pressionado no teclado
// ===============================================================
// --- Setup ---
void setup() {
Serial.begin(115200);
pinMode(COLUNA_1, OUTPUT);
pinMode(COLUNA_2, OUTPUT);
pinMode(COLUNA_3, OUTPUT);
pinMode(COLUNA_4, OUTPUT);
pinMode(LINHA_1, INPUT_PULLUP);
pinMode(LINHA_2, INPUT_PULLUP);
pinMode(LINHA_3, INPUT_PULLUP);
digitalWrite(COLUNA_1, HIGH); //Inicializa coluna 1 em HIGH
digitalWrite(COLUNA_2, HIGH); //Inicializa coluna 2 em HIGH
digitalWrite(COLUNA_3, HIGH); //Inicializa coluna 3 em HIGH
digitalWrite(COLUNA_4, HIGH); //Inicializa coluna 4 em HIGH
}//end setup
// ===============================================================
// --- Loop Infinito ---
void loop() {
readMatrix();
}//end lopp infinito
// ===============================================================
//Layout do teclado
// 1 | 2 | 3 | * |
// 4 | 5 | 6 | # |
// 7 | 8 | 9 | 0 |
// ===============================================================
// --- Desenvolvimento das Funções ---
void readMatrix(){
if(digitalRead(COLUNA_1) && controleColuna == 0x01){ //Coluna 1 em nível high? controleColuna igual 1?
//Sim...
controleColuna = 0x02; //habilita leitura para proxima coluna
digitalWrite(COLUNA_1, LOW); //apenas coluna 1 em nível baixo
digitalWrite(COLUNA_2, HIGH);
digitalWrite(COLUNA_3, HIGH);
digitalWrite(COLUNA_4, HIGH);
// -- Testa qual botão foi pressionado e armazena o valor --
if (!digitalRead(LINHA_1)) store(1);
else if(!digitalRead(LINHA_2)) store(4);
else if(!digitalRead(LINHA_3)) store(7);
} //end if COLUNA_1
else if(digitalRead(COLUNA_2) && controleColuna == 0x02){ //Coluna 2 em nível high? controleColuna igual 2?
//Sim...
controleColuna = 0x03; //habilita leitura para proxima coluna
digitalWrite(COLUNA_1, HIGH); //apenas coluna 2 em nível baixo
digitalWrite(COLUNA_2, LOW);
digitalWrite(COLUNA_3, HIGH);
digitalWrite(COLUNA_4, HIGH);
// -- Testa qual botão foi pressionado e armazena o valor --
if (!digitalRead(LINHA_1)) store(2);
else if(!digitalRead(LINHA_2)) store(5);
else if(!digitalRead(LINHA_3)) store(8);
} //end else if COLUNA_2
else if(digitalRead(COLUNA_3) && controleColuna == 0x03){ //Coluna 3 em nível high? controleColuna igual 3?
//Sim...
controleColuna = 0x04; //habilita leitura para proxima coluna
digitalWrite(COLUNA_1, HIGH); //apenas coluna 3 em nível baixo
digitalWrite(COLUNA_2, HIGH);
digitalWrite(COLUNA_3, LOW);
digitalWrite(COLUNA_4, HIGH);
// -- Testa qual botão foi pressionado e armazena o valor --
if (!digitalRead(LINHA_1)) store(3);
else if(!digitalRead(LINHA_2)) store(6);
else if(!digitalRead(LINHA_3)) store(9);
} //end else if COLUNA_3
else if(digitalRead(COLUNA_4) && controleColuna == 0x04){ //Coluna 4 em nível high? controleColuna igual 4?
//Sim...
controleColuna = 0x01; //habilita leitura para proxima coluna
digitalWrite(COLUNA_1, HIGH); //apenas coluna 4 em nível baixo
digitalWrite(COLUNA_2, HIGH);
digitalWrite(COLUNA_3, HIGH);
digitalWrite(COLUNA_4, LOW);
// -- Testa qual botão foi pressionado e armazena o valor --
if (!digitalRead(LINHA_1)) store(10);
else if(!digitalRead(LINHA_2)) store(11);
else if(!digitalRead(LINHA_3)) store(0);
} //end else if COLUNA_4
}// end readMatrix()
void store(char valor){ //Função para armazenar o valor digitado no teclado
delay(350);
botaoPressionado = valor; //atualiza botaoPressionado
printBotao();
} //end store
void printBotao(){ //Função para imprimir o número pressionado
if (botaoPressionado == 10) Serial.println("*");
else if(botaoPressionado == 11) Serial.println("#");
else Serial.println(botaoPressionado);
} //end printBotao()
Loading
franzininho-wifi
franzininho-wifi