#include <AccelStepper.h>
#include <Keypad.h>
#define STEPS 200
#define IN1 18
#define IN2 19
#define IN3 21
#define IN4 22
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] = {15, 2, 4, 13};
byte colPins[COLS] = {23, 5, 12, 14};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
AccelStepper stepper(AccelStepper::FULL4WIRE, IN1, IN2, IN3, IN4);
char previousKey = '\0';
int rotationsToPerform = 0; // Variable para mantener el número de rotaciones
void setup() {
Serial.begin(9600);
stepper.setMaxSpeed(200);
stepper.setAcceleration(100);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop() {
char key = keypad.getKey();
if (key != NO_KEY) {
Serial.println("Tecla oprimida: " + String(key));
if (key >= '0' && key <= '9') {
// Si se presiona un número, acumula las rotaciones
rotationsToPerform = rotationsToPerform * 10 + (key - '0');
Serial.println("Número acumulado: " + String(rotationsToPerform));
} else if (previousKey == '1' && key == 'A') {
Serial.println("Girar motor " + String(rotationsToPerform) + " veces a la derecha");
stepper.moveTo(STEPS * rotationsToPerform);
stepper.runToPosition();
rotationsToPerform = 0; // Restablece la cantidad de rotaciones
} else if (previousKey == '1' && key == 'B') {
Serial.println("Girar motor " + String(rotationsToPerform) + " veces a la izquierda");
stepper.moveTo(-STEPS * rotationsToPerform);
stepper.runToPosition();
rotationsToPerform = 0; // Restablece la cantidad de rotaciones
}
previousKey = key;
}
if ((previousKey >= '0' && previousKey <= '9') || previousKey == '1') {
// Realizar acciones adicionales mientras se espera la tecla "A" o "B"
}
}