Terrible Gray T-800
use code and design skemetics > #include <Stepper.h> #define STEPS_PER_REVOLUTION 200 // Steps per revolution of your stepper motor #define MICROSTEPS_PER_STEP 8 // Microsteps per step of the stepper driver (DMA860H supports up to 256 microsteps) #define STEPPER_PIN1 12 // Stepper motor driver pulse pin #define STEPPER_PIN2 13 // Stepper motor driver direction pin #define STATUS_BUTTON_PIN 2 // Pin connected to status button #define EMERGENCY_BUTTON_PIN 3 // Pin connected to emergency stop button #define HOME_BUTTON_PIN 4 // Pin connected to home button // Define states for button handling enum ButtonState { Idle, Pressed, Debouncing }; ButtonState statusButtonState = Idle; ButtonState emergencyButtonState = Idle; ButtonState homeButtonState = Idle; // Create a Stepper object with 200 steps per revolution and connect to appropriate pins Stepper stepper(STEPS_PER_REVOLUTION * MICROSTEPS_PER_STEP, STEPPER_PIN1, STEPPER_PIN2); void setup() { Serial.begin(9600); stepper.setSpeed(100); // Set the speed of the stepper motor (steps per second) // Initialize button pins pinMode(STATUS_BUTTON_PIN, INPUT_PULLUP); pinMode(EMERGENCY_BUTTON_PIN, INPUT_PULLUP); pinMode(HOME_BUTTON_PIN, INPUT_PULLUP); // Attach interrupts to buttons attachInterrupt(digitalPinToInterrupt(STATUS_BUTTON_PIN), statusButtonISR, FALLING); attachInterrupt(digitalPinToInterrupt(EMERGENCY_BUTTON_PIN), emergencyButtonISR, FALLING); attachInterrupt(digitalPinToInterrupt(HOME_BUTTON_PIN), homeButtonISR, FALLING); } void loop() { // Handle button states handleButtonState(statusButtonState, statusButtonPressed); handleButtonState(emergencyButtonState, emergencyButtonPressed); handleButtonState(homeButtonState, homeButtonPressed); // Your main code here } // ISR for status button void statusButtonISR() { statusButtonPressed = true; } // ISR for emergency stop button void emergencyButtonISR() { emergencyButtonPressed = true; } // ISR for home button void homeButtonISR() { homeButtonPressed = true; } // Function to handle button state transitions void handleButtonState(ButtonState &state, bool &pressed) { switch (state) { case Idle: if (pressed) { state = Debouncing; delay(50); // Debouncing delay } break; case Debouncing: if (!pressed) { state = Idle; } else { state = Pressed; } break; case Pressed: // Perform actions here when the button is pressed if (state == statusButtonState) { Serial.println("Status button pressed."); // Perform status-related actions here } else if (state == emergencyButtonState) { Serial.println("Emergency stop button pressed."); // Perform emergency stop actions here } else if (state == homeButtonState) { Serial.println("Home button pressed."); // Perform homing actions here } state = Idle; break; } pressed = false; }
maghji

1 Comment