este es mi código me imagino que habria que crear una variable para cada final de carrera y luego una sentencia if para que cuando el final de carrera se active apague el motor
//led
int led = 13;
//display
int num1 = A0;
int num2 = A1;
int num3 = A2;
int num4 = A3;
int num5 = A4;
int num6 = A5;
int num7 = A6;
int luz1 = 22;
int luz2 = 24;
int luz3 = 26;
int luz4 = 28;
#include<Keypad.h>
//motor
int IN1 = 3;
int IN2 = 2;
//teclado
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {12, 11, 10, 9}; //Filas(pines del 9 al 6)
byte colPins[COLS] = {8, 7, 6, 5}; //Columnas (pines del 5 al)
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
/////////////////////////////////////////////////////////////////////////////VOID SETUP
void setup() {
//motor
pinMode (IN1, OUTPUT); // Input4 conectada al pin
pinMode (IN2, OUTPUT); // Input3 conectada al pin
pinMode (num1, OUTPUT);
pinMode (num2, OUTPUT);
pinMode (num3, OUTPUT);
pinMode (num4, OUTPUT);
pinMode (num5, OUTPUT);
pinMode (num6, OUTPUT);
pinMode (num7, OUTPUT);
pinMode (luz1, OUTPUT);
pinMode (luz2, OUTPUT);
pinMode (luz3, OUTPUT);
pinMode (luz4, OUTPUT);
Serial.begin (9600);
}
////////////////////////////////////////////////////////////////////////////////VOID LOOP
void loop() {
char key = keypad.getKey();
if (key != 0) // Si el valor es 0 es que no se ha pulsado ninguna tecla
Serial.println(key);
if (key) {
switch (key)
{
case '2'://Cuando key A es oprimida.. de 4 a 1.
Serial.println("2");// el monitor serial escribe ascensor
// Motor gira en sentido inverso
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
numeroDos();
delay(1000);
//motor no gira
digitalWrite(IN1, LOW);
digitalWrite(led, LOW);
delay(3000);
break;
}
}
//////////////////////////////////////////////////////////////////Boton de 3 a 1
if (key) {
switch (key)
{
case '3'://Cuando key B es oprimida.
Serial.println("3");// el monitor serial escribe visitanos
// Motor gira en sentido inverso
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
numeroTres();
delay(2000);
//motor no gira
digitalWrite(IN1, LOW);
digitalWrite(led, LOW);
delay(3000);
break;
}
}
///////////////////////////////////////////////////////////////// Boton de 4 a 2
if (key) {
switch (key)
{
case 'A'://Cuando key c es oprimida.
Serial.println("4");// el monitor serial escribe visitanos
// Motor gira en sentido inverso
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
numeroCuatro();
delay(3000);
//motor no gira
digitalWrite(IN1, LOW);
digitalWrite(led, LOW);
delay(3000);
break;
}
}
///////////////////////////////////////////////////////////Boton de 3 a 2
if (key) {
switch (key)
{
case '4'://Cuando key D es oprimida.
Serial.println("1");// el monitor serial escribe visitanos
// Motor gira en sentido inverso
digitalWrite (IN2, HIGH);
digitalWrite (IN1, LOW);
numeroUno();
delay(1000);
//motor no gira
digitalWrite(IN2, LOW);
digitalWrite(led, LOW);
delay(3000);
break;
}
}
/////// Boton de 4 a 3
///////////////////////////////////////////////////////////Boton B
if (key) {
switch (key)
{
case '6'://Cuando key B es oprimida.
Serial.println("3");// el monitor serial escribe visitanos
// Motor gira en sentido inverso
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
numeroTres();
delay(1000);
//motor no gira
digitalWrite(IN1, LOW);
digitalWrite(led, LOW);
delay(3000);
break;
}
}
/////////////////////////////////////////////////////////// Numeros
if (key) {
switch (key)
{
case 'B':
Serial.println("4");
// Motor no gira
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
numeroCuatro();
delay(3000);
//motor no gira
digitalWrite(IN1, LOW);
digitalWrite(led, LOW);
delay(3000);
break;
}
}
if (key) {
switch (key)
{
case '7':
Serial.println("1");
numeroUno();
// Motor gira en un sentido
digitalWrite(IN2, HIGH);
digitalWrite(IN1, LOW);
delay(2000);
//motor no gira
digitalWrite(IN2, LOW);
digitalWrite(led, LOW);
delay(3000);
break;
}
}
if (key) {
switch (key)
{
case '8':
Serial.println("2");
numeroDos();
// Motor gira en un sentido
digitalWrite(IN2, HIGH);
digitalWrite(IN1, LOW);
delay(1000);
//motor no gira
digitalWrite(IN2, LOW);
digitalWrite(led, LOW);
delay(3000);
break;
}
}
if (key) {
switch (key)
{
case 'C':
Serial.println("4");
numeroCuatro();
// Motor gira en un sentido
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
delay(1000);
//motor no gira
digitalWrite(IN1, LOW);
digitalWrite(led, LOW);
delay(3000);
break;
}
}
//Boton del 1 al 4
if (key) {
switch (key)
{
case '*':
Serial.println("1");
numeroUno();
// Motor gira en un sentido
digitalWrite(IN2, HIGH);
digitalWrite(IN1, LOW);
delay(3000);
//motor no gira
digitalWrite(IN2, LOW);
digitalWrite(led, LOW);
delay(3000);
break;
}
}
//Boton del 1 al 3
if (key) {
switch (key)
{
case '0':
Serial.println("2");
numeroDos();
// Motor gira en un sentido
digitalWrite(IN2, HIGH);
digitalWrite(IN1, LOW);
delay(2000);
//motor no gira
digitalWrite(IN2, LOW);
digitalWrite(led, LOW);
delay(3000);
break;
}
}
//Boton del 2 al 4
if (key) {
switch (key)
{
case '#':
Serial.println("3");
numeroTres();
// Motor gira en un sentido
digitalWrite(IN2, HIGH);
digitalWrite(IN1, LOW);
delay(1000);
//motor no gira
digitalWrite(IN2, LOW);
digitalWrite(led, LOW);
delay(3000);
break;
}
}
////...
}
//Metodo para los numeros del display
void numeroUno() {
//1
digitalWrite(num1, LOW);
digitalWrite(num2, HIGH);
digitalWrite(num3, HIGH);
digitalWrite(num4, HIGH);
digitalWrite(num5, LOW);
digitalWrite(num6, HIGH);
digitalWrite(num7, HIGH);
//led
digitalWrite(led, HIGH);
digitalWrite(luz1, HIGH);
}
void numeroDos() {
//2
digitalWrite(num1, HIGH);
digitalWrite(num2, LOW);
digitalWrite(num3, LOW);
digitalWrite(num4, HIGH);
digitalWrite(num5, LOW);
digitalWrite(num6, LOW);
digitalWrite(num7, LOW);
//led
digitalWrite(led, HIGH);
digitalWrite(luz2, HIGH);
}
void numeroTres() {
//3
digitalWrite(num1, LOW);
digitalWrite(num2, HIGH);
digitalWrite(num3, LOW);
digitalWrite(num4, HIGH);
digitalWrite(num5, LOW);
digitalWrite(num6, LOW);
digitalWrite(num7, LOW);
//led
digitalWrite(led, HIGH);
digitalWrite(luz3, HIGH);
}
void numeroCuatro() {
//4
digitalWrite(num1, LOW);
digitalWrite(num2, HIGH);
digitalWrite(num3, HIGH);
digitalWrite(num4, LOW);
digitalWrite(num5, LOW);
digitalWrite(num6, HIGH);
digitalWrite(num7, LOW);
//led
digitalWrite(led, HIGH);
digitalWrite(luz4, HIGH);
}