teclado matricial y led

Hola buenas, soy nuevo en el foro y en el mundo de arduino, estoy mirando por Internet pero no lo encuentro, quiero que con un teclado matricial de 3x4 al meter una clave se active un led durante 4 segundos. para cambiar la calve quiero que se haga desde arduino meterlo yo manual mente.

gracias y un saludo.

:slight_smile:

Que teclado vas a usar?

hola muchas gracias por contestar :slight_smile: , voy a usar un teclado de 4x3 matricial, y si puedes hacer que al pulsar las teclas pite un buzzer te lo agradecería.

gracias y un saludo.

No tengo teclado para probar, así que vas a tener que ir probando tu.
Esto debería leer el teclado, pitar al pulsar y sacar por serial lo que has pulsado. Comprueba que funcione e indicame como debería funcionar.
Cuantos dígitos la clave?
Pulsar # o * para finalizar clave o contar el numero de pulsaciones para controlar cuando acabas de teclear?
La clave la modificas desde el teclado o modificando el código?

#include <Keypad.h>

const byte FILAS = 4; 
const byte COLUM = 3; 
char Teclas[FILAS][COLUM] = 
{
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'#','0','*'}
};
byte PinsFilas[FILAS] = {5, 4, 3, 2};    //Pins de las filas
byte PinsColum[COLUM] = {8, 7, 6};       //Pines delas columnas

Keypad Teclado = Keypad( makeKeymap(Teclas), PinsFilas, PinsColum, FILAS, COLUM );

byte PinBuzzer = 9;

byte PinLed = 10;


void setup()
{
  Serial.begin(9600);
  pinMode(PinBuzzer, OUTPUT); 
  pinMode(PinLed, OUTPUT);  
}

void loop()
{
  char key = Teclado.getKey();

  if (key != NO_KEY)    // Hay tecla pulsada?º
  {
    analogWrite(PinBuzzer,128);     // Emite pitido
    delay(250);                     // Tiempo de pitido
    digitalWrite(PinBuzzer, LOW); 
    
    Serial.println(key);
  }
}

Hola, los dígitos depende de la clave que metas. # para borrar + para confirmar la clave. la modifico desde el código. tengo encargado el teclado. gracias y un saludo.

Buenas, no esta probado ni tengo manera de probarlo, pero creo que debería de funcionar .
Un saludo

#include <Keypad.h>

const byte FILAS = 4; 
const byte COLUM = 3; 
char Teclas[FILAS][COLUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'#','0','*'} };
byte PinsFilas[FILAS] = {5, 4, 3, 2};    //Pins de las filas
byte PinsColum[COLUM] = {8, 7, 6};       //Pines delas columnas

Keypad Teclado = Keypad( makeKeymap(Teclas), PinsFilas, PinsColum, FILAS, COLUM );

byte PinBuzzer = 9;                     

byte PinLed = 10;

const byte DigitosClave=4;
char Clave[DigitosClave] = {'1','2','3','4'};    
byte Coincidencias=0;
byte DigitosPulsados=0;

void setup()
{
  Serial.begin(9600);
  pinMode(PinBuzzer, OUTPUT); 
  pinMode(PinLed, OUTPUT);  
}

void Pitido(int Duracion, int Espera, int Repeticiones)
{
  for (int x=0; x<Repeticiones; x++)
  {
    analogWrite(PinBuzzer,128);         // Emite pitido
    delay(Duracion);                    // Tiempo de pitido
    digitalWrite(PinBuzzer, LOW); 
    delay(Espera);
  }
}

void loop()
{
  char key = Teclado.getKey();

  if (key != NO_KEY)                    // Hay tecla pulsada?
  {
    Pitido(250,0,1);   
    Serial.println(key);

    if(key=='*')                        // Abrir??
    {
      if(Coincidencias==DigitosClave)
      {
        Pitido(125,125,3);
        digitalWrite(PinLed, LOW);
        delay(4000);
        digitalWrite(PinLed, LOW);
      }
      key=='#';
    }
    
    if(key=='#')                        // Borrar
    {
      Coincidencias=0;
      DigitosPulsados=0;
      Pitido(500,0,1);
    }
    
    if (DigitosPulsados<DigitosClave && key==Clave[DigitosPulsados])    
    {                                    // No hemos pulado mas digitos que la clave y coinciden
      Coincidencias++;
      DigitosPulsados++;
    }
    else
    {
      DigitosPulsados=DigitosClave+1;  // Clave incorrecta,
      Coincidencias=0;                 // ya no controlamos mas hasta q borre
    }
  }
}