#include <Stepper.h>
#include <Keypad.h>
const int stepsPerRevolution = 2048; // Change this to match your motor's steps per revolution
const float stepsPerCm = stepsPerRevolution / 40.0; // Assuming 10 cm between each level
Stepper stepper(stepsPerRevolution, 8, 10, 9, 11);
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the keypad
Keypad keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
const int ledFloor = 12; // LED indicating current floor
const int ledUp = 13; // LED indicating elevator moving up
const int ledDown = 14; // LED indicating elevator moving down
int currentFloor = 1;
void setup() {
stepper.setSpeed(5); // Adjust this speed as needed
pinMode(ledFloor, OUTPUT);
pinMode(ledUp, OUTPUT);
pinMode(ledDown, OUTPUT);
updateFloorIndicator();
}
void loop() {
char key = keypad.getKey();
if (key) {
int targetFloor = key - '0';
if (targetFloor >= 1 && targetFloor <= 4 && targetFloor != currentFloor) {
moveToFloor(targetFloor);
}
}
}
void moveToFloor(int targetFloor) {
if (targetFloor > currentFloor) {
digitalWrite(ledUp, HIGH);
digitalWrite(ledDown, LOW);
int stepsToMove = (targetFloor - currentFloor) * stepsPerCm * 10; // 10 cm between each level
stepper.step(stepsToMove); // Move up to the target floor
} else {
digitalWrite(ledUp, LOW);
digitalWrite(ledDown, HIGH);
int stepsToMove = (currentFloor - targetFloor) * stepsPerCm * 10; // 10 cm between each level
stepper.step(-stepsToMove); // Move down to the target floor
}
currentFloor = targetFloor;
updateFloorIndicator();
}
void updateFloorIndicator() {
for (int i = 12; i <= 14; i++) {
digitalWrite(i, LOW);
}
digitalWrite(ledFloor + currentFloor - 1, HIGH);
}