Olá, recentemente me envolvi em um projeto de alarme e incêndio e surgiu a ideia de representar diferentes setores de uma maquete com um LED diferente. Em primeiro caso resolvi utilizar um teclado matricial para acender diferentes LEDs.
Eu sei como funciona o teclado matricial porém não consigo definir uma forma para manter um LED aceso quando uma tecla for pressionada, e caso for pressionada novamente o LED apague.
O meu problema é que sempre mexi no teclado matricial colocando as colunas em alto e as linhas em baixo, caso um botão for pressionado a coluna dele também fica em estado baixo e faço uma varredura pra encontrar a tecla pressionada.
Aqui um exemplo:
int pinosLinhas[] = {11,10,9,8};
int pinosColunas[] = {7,6,5,4};
char teclas[4][4] = {{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}};
void setup()
{
for (int nL = 0; nL <= 3; nL++) {
pinMode(pinosLinhas[nL], OUTPUT);
digitalWrite(pinosLinhas[nL], HIGH);
}
for (int nC = 0; nC <= 3; nC++) {
pinMode(pinosColunas[nC], INPUT_PULLUP);
}
Serial.begin(9600);
Serial.println("Teclado 4x4");
Serial.println("Aguardando acionamento das teclas...");
Serial.println();
}
void loop()
{
//faz varredura em todas as linhas, desligando uma de cada vez
for (int nL = 0; nL <= 3; nL++)
{
digitalWrite(pinosLinhas[nL], LOW);
//faz varredura em todas as colunas verificando se tem algum botao apertado
for (int nC = 0; nC <= 3; nC++) {
if (digitalRead(pinosColunas[nC]) == LOW)
{
Serial.print("Tecla: ");
Serial.println(teclas[nL][nC]);
while(digitalRead(pinosColunas[nC]) == LOW){}
}
}
digitalWrite(pinosLinhas[nL], HIGH);
}
delay(10);
}
Queria saber como fazer como integrar os LEDs nesse código pro proposito que eu quero atingir.