// define direction pin and step pin #define dirPinAxis 26 #define stepPinAxis 27 #define sleepPin 28 #define resetPin 29 #define dirPinPump 1 #define stepPinPump 2 // define microstepping signal pins #define m0 0 #define m1 7 #define m2 6 #define stepsPerRevolution 200 //define button pins #define endStopBtn 4 #define sauceBtn 3 //define helper variables bool isAtEndstop = false; bool isSaucing = false; int sauceBtnState = 0; void setup(){ pinMode(endStopBtn, INPUT_PULLUP); pinMode(sauceBtn, INPUT_PULLUP); // Declare stepper driver pins as output: pinMode(stepPinPump, OUTPUT); pinMode(dirPinPump, OUTPUT); pinMode(stepPinAxis, OUTPUT); pinMode(dirPinAxis, OUTPUT); pinMode(sleepPin, OUTPUT); pinMode(resetPin, OUTPUT); pinMode(m0, OUTPUT); pinMode(m1, OUTPUT); pinMode(m2, OUTPUT); //Stepper setup digitalWrite(sleepPin, HIGH); digitalWrite(resetPin, HIGH); // Set 1/16 microstepping digitalWrite(m0, LOW); digitalWrite(m1, LOW); digitalWrite(m2, HIGH); // initialize the serial port: Serial.begin(9600); } void loop() { int endstopBtnState = digitalRead(endStopBtn); while(isAtEndstop == false){ endstopBtnState = digitalRead(endStopBtn); if(endstopBtnState == 1){ Serial.println("Starting to move to endstop"); delay(15); // Set the spinning direction clockwise: digitalWrite(dirPinAxis, LOW); // Go -10 steps slowly: for (int i = 0; i < 16*10; i++) { // These four lines result in 1 step: digitalWrite(stepPinAxis, HIGH); delayMicroseconds(1000); digitalWrite(stepPinAxis, LOW); delayMicroseconds(1000); } } else{ Serial.println("Reached endstop"); digitalWrite(dirPinAxis, HIGH); Serial.println("Moving away from endstop"); // Go 10 steps slowly: for (int i = 0; i < 16*10; i++) { // These four lines result in 1 step: digitalWrite(stepPinAxis, HIGH); delayMicroseconds(1000); digitalWrite(stepPinAxis, LOW); delayMicroseconds(1000); } isAtEndstop = true; } } while(isSaucing == false){ Serial.println("Press button for Ketchup"); sauceBtnState = digitalRead(sauceBtn); //Serial.println(sauceBtnState); if(sauceBtnState == 0){ Serial.println("Putting ketchup on your hotdog"); digitalWrite(dirPinPump, LOW); //Set the direction of the axis digitalWrite(dirPinAxis, HIGH); // Go 140 steps slowly: for (int i = 0; i < 16*440; i++) { // These four lines result in 1 step: digitalWrite(stepPinAxis, HIGH); digitalWrite(stepPinPump, HIGH); delayMicroseconds(1000); digitalWrite(stepPinAxis, LOW); digitalWrite(stepPinPump, LOW); delayMicroseconds(1000); } digitalWrite(dirPinPump, HIGH); //pumpKatchup backwards: for (int i = 0; i < 2*100; i++) { digitalWrite(stepPinPump, HIGH); delayMicroseconds(1000); digitalWrite(stepPinPump, LOW); delayMicroseconds(1000); } delay(2000); isSaucing = true; } } isAtEndstop = false; isSaucing = false; //now the loop goes back to the top and starts by moving the axis back to endstop }