Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Pins for the CNC Shield v3
- X_STP_PIN 2
- Y_STP_PIN 3
- Z_STP_PIN 4
- X_DIR_PIN 5
- Y_DIR_PIN 6
- Z_DIR_PIN 7
- SHIELD_EN_PIN 8 pos useage for turning steppers off for realligment
- */
- // INCLUDES
- #include <AccelStepper.h>
- #include <ezButton.h>
- // Define the stepper motor connections
- const int Z_DIR_PIN = 7; // Z Takeup Reels Direction Pin
- const int Z_STP_PIN = 4; // Z Takeup Reels Step Pin
- const int X_DIR_PIN = 5; // X Capstans Direction Pin
- const int X_STP_PIN = 2; // X Capstans Step Pin
- const int stepsPerRev = 200; // Number of steps for a full rotation(360) // SPROCKET(CAPSTAN)
- const int stepsPerRev2 = 200; // Number of steps for a full rotation(360) // Takeup Reel
- const int microSteps = 16; // 16th microstepping
- //const int takeupMaxSpeed = 250; // Takeup Reel Max Speed
- //const int takeupSpeed = 250; // Takeup Reel Speed
- //const int capstanMaxSpeed = 600; // Capstan Reel Max Speed
- //const int capstanSpeed = 600; // Capstan Reel Speed 120
- //const int capstanAccel = 99999999; // * Sets the steppers acceleration to a high number so that the stepper
- //const int takeupAccel = 99999999; // * number so that the stepper Doesn't acceralate. 99999999
- const int takeupMaxSpeed = 450; // Takeup Reel Max Speed
- const int takeupSpeed = 450; // Takeup Reel Speed
- const int capstanMaxSpeed = 900; // Capstan Reel Max Speed
- const int capstanSpeed = 900; // Capstan Reel Speed 120
- const int capstanAccel = 800; // * Sets the steppers acceleration to a high number so that the stepper
- const int takeupAccel = 99999999; // * number so that the stepper Doesn't acceralate. 99999999
- int steps = 800; // Number of steps to move x amount of 8mm cine film frames.
- /*
- __________________
- | STEPS | FRAMES |
- |-------|--------|
- | 100 | 6 |
- | 200 | 12 | 1
- | 300 | 18 |
- | 400 | 24 | 2
- | 500 | 30 |
- | 600 | 36 | 3
- | 700 | 42 |
- | 800 | 48 | 4
- | 900 | 54 |
- | 1000 | 60 | 5
- */
- // Create two new instances of the AccelStepper class
- AccelStepper takeup(AccelStepper::DRIVER, Z_STP_PIN, Z_DIR_PIN); // Runs all the time unless switch is pressed!
- AccelStepper capstan(AccelStepper::DRIVER, X_STP_PIN, X_DIR_PIN); // Runs only when told to via serial coms
- // SWITCH SETUP
- ezButton tensionSW(9); // Create ezButton object that attach to pin 7;
- ezButton stopButton(11); // Create ezButton object that attach to pin 3;
- bool isTakeupActive = false; // Flag to track the status of the takeup stepper
- bool isCapstanContinuous = false; // Flag to indicate capstan continuous movement
- void setup() {
- Serial.begin(9600); // Initialize serial communication at 9600 baud
- Serial.println("");
- Serial.println("M = Move"); //
- Serial.println("T = Activate Takeup Stepper"); //
- Serial.println("X = enable capstan continuous movement"); //
- Serial.println("");
- tensionSW.setDebounceTime(50); // set debounce time to 50 milliseconds
- takeup.setMaxSpeed(takeupMaxSpeed); // Set the maximum speed of the stepper motor
- takeup.setSpeed(takeupSpeed); // Set the speed of the stepper motor
- takeup.setAcceleration(takeupAccel); // Set the acceleration of the stepper motor
- capstan.setMaxSpeed(capstanMaxSpeed); // Set the maximum speed of the stepper motor
- capstan.setSpeed(capstanSpeed); // Set the speed of the stepper motor
- capstan.setAcceleration(capstanAccel); // Set the acceleration of the stepper motor
- takeup.move(999999999); // * Tells the Takeup stepper to to move x steps
- // * when takeup.run() is called in the loop.
- }
- void loop() {
- serialCheck();
- tensionSW.loop(); // Checks that status of the switch
- stopButton.loop();
- switchReleased(); // code for when the switch is released
- switchPressed(); // code for when the switch is pressed
- if (isTakeupActive) {
- takeup.run();
- }
- if (isCapstanContinuous) {
- capstan.move(steps * microSteps);
- capstan.run();
- if (stopButton.isPressed()) {
- isCapstanContinuous = false; // Stop the capstan continuous movement
- capstan.stop();
- Serial.println("Capstan movement stopped.");
- }
- } else {
- capstan.run();
- }
- }
- void serialCheck() {
- // Note: we shall process one command at a time! This means: reset the
- // following variable to zero as soon as the command is done processing.
- static char current_command;
- // Do not proceed with another command until we're done with the current one!
- if (current_command == 0) {
- if (Serial.available() > 0) {
- current_command = Serial.read();
- // Perform a single action upon receiving a command. Makes code easier to read.
- switch (current_command) {
- default:
- current_command = 0;
- break; // Ignore unknown commands
- case 'M':
- capstan.move(steps * 16);
- break; // Move the motor 100 steps
- case 'T': // Activate the takeup stepper
- isTakeupActive = true;
- break;
- case 'A': // Activate the takeup stepper
- isTakeupActive = false; //not sure this is working!
- break;
- case 'X': // enable capstan continuous movement
- isCapstanContinuous = true;
- break;
- }
- }
- } else {
- // Send a message when the motor is done moving:
- if (capstan.isRunning() == false) {
- current_command = 0; // Reset the current_command
- Serial.println("S"); // Send message "We're done!"
- }
- }
- }
- void switchReleased() {
- if (tensionSW.isReleased()) {
- Serial.println("MOVING - Trigger Released");
- takeup.move(999999999);
- }
- }
- void switchPressed() {
- if (tensionSW.isPressed()) {
- Serial.println("STOPPED - Trigger Pressed");
- takeup.stop();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement