#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <AccelStepper.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define BUTTON_UP 12
#define BUTTON_DOWN 14
#define BUTTON_SELECT 27
#define STEP_PIN 18
#define DIR_PIN 19
AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
int menuIndex = 0;
int stepOptions[] = {100, 200, 300, 400}; // Step selection
void setup() {
pinMode(BUTTON_UP, INPUT_PULLUP);
pinMode(BUTTON_DOWN, INPUT_PULLUP);
pinMode(BUTTON_SELECT, INPUT_PULLUP);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
while (1);
}
display.clearDisplay();
stepper.setMaxSpeed(1000);
stepper.setAcceleration(500);
displayMenu();
}
void loop() {
if (digitalRead(BUTTON_UP) == LOW) {
menuIndex = (menuIndex - 1 + 4) % 4;
displayMenu();
delay(200);
}
if (digitalRead(BUTTON_DOWN) == LOW) {
menuIndex = (menuIndex + 1) % 4;
displayMenu();
delay(200);
}
if (digitalRead(BUTTON_SELECT) == LOW) {
int steps = stepOptions[menuIndex]; // Use selected step value
stepper.moveTo(steps);
stepper.runToPosition();
displayMenu();
delay(200);
}
}
void displayMenu() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(10, 10);
display.println("Select Steps:");
for (int i = 0; i < 4; i++) {
display.setCursor(20, 25 + (i * 10));
if (i == menuIndex) {
display.print("> ");
}
display.print(stepOptions[i]);
display.print(" steps");
}
display.display();
}