keypad 4x4 y control remoto

Hola, tengo una consulta para los mas entendidos, intento adaptar un control remoto a un código que usa un keypad 4x4, ya tengo los códigos HEX de cada tecla desde 0 hasta el 9 y mi pregunta es como emular el keypad con el control remoto... alguna idea?

espero me entiendan la pregunta...

Todo se desprende de usar IRremote y reproducir los códigos que el te indique para cada tecla.
Una vez que tengas el código identificado puedes con un teclado keypad o con lo que gustes reproducir la combinación de tu agrado.

Busca IRremote en tu gestor de Librerías. Mira los ejemplos, practica leyendo códigos y reproduciéndolos y resolverás todo tu proyecto.

Entiendo, ya e leido y visto varios videos sobre IRremote, ya tengo los codigos de cada tecla, y también e prendido leds con el control, asi que este funciona perfecto. pero no e podido encontrar algo que me oriente en lo que quiero y por ello dejare este código a modo de ejemplo… un simple control de acceso de 4 digitos que funciona con un keypad 4x4, ahora lo que quiero es usar el control remoto como un keypad.

estos son los codigos de las teclas.

0xFF6897 = tecla 1
0xFFT8P7 = tecla 2
0xFFH894 = tecla 3
0xFF68C7 = tecla 4

la idea es poner la “clave” 1234 desde el control remoto o desde el keypad 4x4

#include <Keypad.h>     // importa libreria Keypad

const byte FILAS = 4;     // define numero de filas
const byte COLUMNAS = 4;    // define numero de columnas
char keys[FILAS][COLUMNAS] = {    // define la distribucion de teclas
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte pinesFilas[FILAS] = {9, 8, 7, 6}; // pines correspondientes a las filas
byte pinesColumnas[COLUMNAS] = {5, 4, 3, 2}; // pines correspondientes a las columnas

Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS);  // crea objeto

char TECLA;       // almacena la tecla presionada
char CLAVE[5];        // almacena en un array 6 digitos ingresados
char CLAVE_MAESTRA[5] = "1234";   // almacena en un array la contraseña maestra
byte INDICE = 0;      // indice del array


void setup()
{
  Serial.begin(9600);      // inicializa comunicacion serie
}

void loop() {
  TECLA = teclado.getKey();   // obtiene tecla presionada y asigna a variable
  if (TECLA)        // comprueba que se haya presionado una tecla
  {
    CLAVE[INDICE] = TECLA;    // almacena en array la tecla presionada
    INDICE++;       // incrementa indice en uno
    Serial.print(TECLA);    // envia a monitor serial la tecla presionada
  }

  if (INDICE == 4)      // si ya se almacenaron los 5 digitos
  {
    if (!strcmp(CLAVE, CLAVE_MAESTRA))  // compara clave ingresada con clave maestra
      Serial.println(" Correcta");  // imprime en monitor serial que es correcta la clave
    else
      Serial.println(" Incorrecta");  // imprime en monitor serial que es incorrecta la clave

    INDICE = 0;
  }
}

Agradezco desde ya a todos quienes puedan orientarme…

hola, ya e logrado que los números y letras de mi control remoto se vean en el serial monitor. ahora alguien podría darme un ejemplo de como programar que los números del control remoto haga lo mismo que el keypad 4x4?

desde ya agradezco la ayuda…

#include <IRremote.h>
#include <Keypad.h>     // importa libreria Keypad

const byte FILAS = 4;     // define numero de filas
const byte COLUMNAS = 4;    // define numero de columnas
char keys[FILAS][COLUMNAS] = {    // define la distribucion de teclas
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte pinesFilas[FILAS] = {9, 8, 7, 6}; // pines correspondientes a las filas
byte pinesColumnas[COLUMNAS] = {5, 4, 3, 2}; // pines correspondientes a las columnas

Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS);  // crea objeto

char TECLA;       // almacena la tecla presionada
char CLAVE[5];        // almacena en un array 6 digitos ingresados
char CLAVE_MAESTRA[5] = "1234";   // almacena en un array la contraseña maestra
byte INDICE = 0;      // indice del array

const int RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);      // inicializa comunicacion serie
  irrecv.enableIRIn();       // inicia el receptor IR
}

void loop() {

  if (irrecv.decode(&results)) //  recibe la señal IR

  {
    translateIR();
    irrecv.resume(); // recibe el proximo código Hex
  }
  TECLA = teclado.getKey();   // obtiene tecla presionada y asigna a variable
  if (TECLA)        // comprueba que se haya presionado una tecla
  {
    CLAVE[INDICE] = TECLA;    // almacena en array la tecla presionada
    INDICE++;       // incrementa indice en uno
    Serial.print(TECLA);    // envia a monitor serial la tecla presionada
  }

  if (INDICE == 4)      // si ya se almacenaron los 5 digitos
  {
    if (!strcmp(CLAVE, CLAVE_MAESTRA))  // compara clave ingresada con clave maestra
      Serial.println(" Correcta");  // imprime en monitor serial que es correcta la clave
    else
      Serial.println(" Incorrecta");  // imprime en monitor serial que es incorrecta la clave

    INDICE = 0;
  }
}
void translateIR() { // accion que debe tomar segun lo que el codigo que recibe

  // codigos del control remoto

  switch (results.value)

  {

    case 0x33B8807F: Serial.println(" A");
      break;
    case 0x33B8A05F: Serial.println(" B");
      break;
    case 0x33B8906F: Serial.println(" C");
      break;
    case 0x33B8B04F: Serial.println(" D");
      break;

    case 0x33B8827D: Serial.println(" 1");
      break;
    case 0x33B8A25D: Serial.println(" 2");
      break;
    case 0x33B8B24D: Serial.println(" 3");
      break;
    case 0x33B842BD: Serial.println(" 4");
      break;
    case 0x33B8629D: Serial.println(" 5");
      break;
    case 0x33B8728D: Serial.println(" 6");
      break;
    case 0x33B8C23D: Serial.println(" 7");
      break;
    case 0x33B8E21D: Serial.println(" 8");
      break;
    case 0x33B8F20D: Serial.println(" 9");
      break;
    case 0x33B8926D: Serial.println(" 0");
      break;

    case 0xFFFFFFFF: Serial.println(" REPEAT"); break;

    default:
      Serial.println(" Otros botones ");

  }// End Case

  delay(100); // retardo para que que no se repita inmediatamente

Lo que quieres es presionar con el control remoto IR 4 teclas y que se active un rele y te abra una puerta por ejemplo u otra cosa?

No lo he probado asi que si tiene algún error intenta resolverlo por tu cuenta

#include <IRremote.h>
#include <Keypad.h>         // importa libreria Keypad
  
const byte filas = 4;       // define numero de filas
const byte columnas = 4;    // define numero de columnas
char keys[filas][columnas] = {    // define la distribucion de teclas
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte pinesFilas[filas] = {9, 8, 7, 6}; // pines correspondientes a las filas
byte pinesColumnas[columnas] = {5, 4, 3, 2}; // pines correspondientes a las columnas

Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, filas, columnas);  // crea objeto

char teclaKP, teclaIR;                       // almacena la tecla presionada
char clave[5];                        // almacena en un array 6 digitos ingresados
char clave_maestra[5] = "1234";   // almacena en un array la contraseña maestra
byte indice = 0;                      // indice del array

const int recv_pin = 10;
IRrecv irrecv(recv_pin);
decode_results results;

void setup()
{
  Serial.begin(9600);             // inicializa comunicacion serie
  irrecv.enableIRIn();            // inicia el receptor IR
}

void loop() {

  if (irrecv.decode(&results)){   //  recibe la señal IR
      teclaIR = translateIR();
      clave[indice] = teclaIR;    // almacena en array la tecla presionada
      indice++;                   // incrementa indice en uno
      Serial.print(tecla);        // envia a monitor serial la tecla presionada
      irrecv.resume();            // recibe el proximo código Hex
  }

  teclaKP = teclado.getKey();     // obtiene tecla presionada y asigna a variable
  if (teclaKP) {                  // comprueba que se haya presionado una tecla
      clave[indice] = teclaKP;    // almacena en array la tecla presionada
      indice++;                   // incrementa indice en uno
      Serial.print(teclaKP);      // envia a monitor serial la tecla presionada
  }

  if (indice == 4) {                                            // si ya se almacenaron los 5 digitos
      if (!strcmp(clave, clave_maestra))  // compara clave ingresada con clave maestra
          tmp = Correcta;  // imprime en monitor serial que es correcta la clave
      else
          tmp = Incorrecta;  // imprime en monitor serial que es incorrecta la clave
    indice = 0;
  }
}

char translateIR() { // accion que debe tomar segun lo que el codigo que recibe
  // codigos del control remoto

  char tmp; 

  switch (results.value)   {

    case 0x33B8807F:  tmp = 'A';
                      break;
    case 0x33B8A05F:  tmp = 'B';
                      break;
    case 0x33B8906F:  tmp = 'C';
                      break;
    case 0x33B8B04F:  tmp = 'D';
                      break;
    case 0x33B8827D:  tmp = '1';
                      break;
    case 0x33B8A25D:  tmp = '2';
                      break;
    case 0x33B8B24D:  tmp = '3';
                      break;
    case 0x33B842BD:  tmp = '4';
                      break;
    case 0x33B8629D:  tmp = '5';
                      break;
    case 0x33B8728D:  tmp = '6';
                      break;
    case 0x33B8C23D:  tmp = '7';
                      break;
    case 0x33B8E21D:  tmp = '8';
                      break;
    case 0x33B8F20D:  tmp = '9';
                      break;
    case 0x33B8926D:  tmp = '0';
                      break;

    case 0xFFFFFFFF: 
   default:           tmp = 0;                         
                      break;

                    

  }
  delay(100); // retardo para que que no se repita inmediatamente
  return tmp;
}

Muchas Gracias Surbyte, lo revisare, y en realidad lo que quiero es que el control remoto se comporte como un keypad 4x4...

Asi te entendí, por favor prueba a ver si lo hace como lo supuse

me arroja este error, no logre resolverlo..

/Users/davidmora/Documents/Arduino/respuesta_surbyte_/respuesta_surbyte_.ino: In function 'void loop()':
respuesta_surbyte_:52:11: error: 'tmp' was not declared in this scope
tmp = Correcta; // imprime en monitor serial que es correcta la clave
^~~
respuesta_surbyte_:52:17: error: 'Correcta' was not declared in this scope
tmp = Correcta; // imprime en monitor serial que es correcta la clave
^~~~~~~~
/Users/davidmora/Documents/Arduino/respuesta_surbyte_/respuesta_surbyte_.ino:52:17: note: suggested alternative: 'irrecv'
tmp = Correcta; // imprime en monitor serial que es correcta la clave
^~~~~~~~
irrecv
respuesta_surbyte_:54:11: error: 'tmp' was not declared in this scope
tmp = Incorrecta; // imprime en monitor serial que es incorrecta la clave
^~~
respuesta_surbyte_:54:17: error: 'Incorrecta' was not declared in this scope
tmp = Incorrecta; // imprime en monitor serial que es incorrecta la clave
^~~~~~~~~~
exit status 1
'tmp' was not declared in this scope

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Menos mal que te puse

No lo he probado asi que si tiene algún error intenta resolverlo por tu cuenta

Correcta e Incorrecta son cosas de tu código anterior, yo no modifiqué nada de eso.
Te dije que no he probado tu código.

Obviamente Correcta e incorrecta no estan definidas y sin ir mas lejos, yo defino tmp en mi rutian modificada pero tu no, lo haces con el tmp que se usa en el loop.
Define tmp y agrega las comillas a Correcta e Incorrecta.

 if (indice == 4) {                                            // si ya se almacenaron los 5 digitos
      if (!strcmp(clave, clave_maestra))  // compara clave ingresada con clave maestra
          tmp = "Correcta";  // imprime en monitor serial que es correcta la clave
      else
          tmp = "Incorrecta";  // imprime en monitor serial que es incorrecta la clave
    indice = 0;
  }