Duda Keypad + LCD + Motor DC

Hola,

Mi duda es la siguiente, como puedo mover un motor DC ingresando un código en el Keypad.

Tengo lo siguiente.

#include <Keypad.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

//---[Motores DC]---
int MX1 = 24;
int MX2 = 25;
//PWM 0

int lcd_key     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

//Para leer los botones, vamos a definer una pequeña function;

int read_LCD_buttons()  
  { adc_key_in = analogRead(0);      // Leemos A0
    // Mis botones dan:  0, 145, 329,507,743
    // Y ahora los comparamos con un margen comodo
    if (adc_key_in > 900) return btnNONE;     // Ningun boton pulsado 
    if (adc_key_in < 50)   return btnRIGHT; 
    if (adc_key_in < 250)  return btnUP;
    if (adc_key_in < 450)  return btnDOWN;
    if (adc_key_in < 650)  return btnLEFT;
    if (adc_key_in < 850)  return btnSELECT; 

    return btnNONE;  // Por si todo falla
  }
  
char codigo[3];  
int espacio = 0;
int cuadro = 0;
int fila = 0;
const byte Filas = 4;          //KeyPad de 4 filas
const byte Cols = 4;           //y 4 columnas
byte Pins_Filas[] = {53, 51, 49, 47};     //Pines Arduino para las filas.
byte Pins_Cols[] = {45, 43, 41, 39};     // Pines Arduino para las columnas.

char Teclas [ Filas ][ Cols ] =
    {
        {'1','2','3','A'},
        {'4','5','6','B'},
        {'7','8','9','C'},
        {'*','0','#','D'}
     };

Keypad Teclado = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Cols, Filas, Cols);
int numero = 0;

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("Codigo libro:");
  pinMode(MX1,OUTPUT);
  pinMode(MX2,OUTPUT);
}


void loop() {
  lcd_key = read_LCD_buttons();
     
  char tecla = Teclado.getKey();

   if (tecla != 0) 
   {             
     lcd.setCursor(espacio,1);
     lcd.print(tecla);
     espacio++;
   }

   codigo[numero]=tecla;  
    
   if( lcd_key == btnUP)
  {
    lcd.setCursor(4,1);
    lcd.print("Aceptado");
  }
  if (espacio == 3)
  {
    espacio = 0; 
  }
  if( lcd_key == btnSELECT)
  {
    lcd.setCursor(0,1);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Codigo libro:");
    espacio=0;
  }

 if(codigo[numero]==120){ // Coordenada X=1, Y=1 
   analogWrite(0,255);
   digitalWrite(MX1,LOW);
   digitalWrite(MX2,HIGH);
   delay(4000);
   analogWrite(0,0);
   digitalWrite(MX1,LOW);
   digitalWrite(MX2,LOW);
 }
  
}

Probe ingresando el numero en un arreglo y este usarlo para mover el Motor pero no hay caso.

Gracias por la ayuda !

Vamos por partes. 1. El keypad funciona bien? Es decir precionas cada 1 de las teclas de la matriz y lo lees en el Monitor Serie? 2. El motor funciona con otro código sin teclado? Intenta resolver las dos tareas por separado y luego vemos de unirle y darle funcionalidad al teclado y lo que quieres que haga como respuesta a cada tecla.

surbyte: Vamos por partes. 1. El keypad funciona bien? Es decir precionas cada 1 de las teclas de la matriz y lo lees en el Monitor Serie? 2. El motor funciona con otro código sin teclado? Intenta resolver las dos tareas por separado y luego vemos de unirle y darle funcionalidad al teclado y lo que quieres que haga como respuesta a cada tecla.

Asi es, funciona todo bien por separado.

Entonces no entiendo porque si sabes que tecla presionaste y sabes como accionar el motor todo tu problema está aca

if(codigo[numero]==120){ // Coordenada X=1, Y=1 
   analogWrite(0,255);
   digitalWrite(MX1,LOW);
   digitalWrite(MX2,HIGH);
   delay(4000);
   analogWrite(0,0);
   digitalWrite(MX1,LOW);
   digitalWrite(MX2,LOW);
 }

o esto no funciona

if(codigo[numero]==120){

o el código del motor no funciona. si dices que el motor funcionaba estas cometiendo algun error con el if, Verifica con un Serial.println("Motor ON") dentro del if a ver si lo lees en el monitor serie.

Ok entiendo pero esta bien la idea de guardar en un arreglo los números que estoy ingresando y luego verificar la condición para mover los motores? Porque si es asi, algo no funciona para mover el motor.

Y no pensaste en usar la librería keypad? esta todo resuelto amigo. busca en el playground Ardino Keypad Library y úsala. es mucho mas simple que lo tuyo.