Brandon Ring / Mbed 2 deprecated Project_Stepper

Dependencies:   TextLCD mbed

Revision:
0:506d7846938a
Child:
1:529333e22121
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Aug 18 15:04:19 2011 +0000
@@ -0,0 +1,187 @@
+/* 
+Project Stepper
+Written by Tony Cacace & Brandon Ring
+Date: 08-18-11
+Rev: AB
+
+This program will use the mbed micro-controller to step a stepper motor forward and reverse
+based on the users input request.  
+*/
+
+#include "mbed.h"
+#include "TextLCD.h"
+
+#define DELAYSEQ 3.0    // A wait used between the main while loop
+
+TextLCD lcd(p24, p26, p27, p28, p29, p30);
+DigitalOut enable1(p21);
+DigitalOut enable2(p22);
+DigitalOut STP1(p11);
+DigitalOut STP2(p12);
+DigitalOut STP3(p13);
+DigitalOut STP4(p14);
+Serial pc(USBTX, USBRX); // tx, rx
+
+void moveSteps (int);       // Fuction prototype: used to define how many steps to take
+volatile int count = 1;     //keeps track of counted steps 1-4 
+float delayStep = 0.5;    //Speed of motor.....0.005
+
+
+
+int main() {
+    enable1 = 1;    //Turn on driver
+    enable2 = 1;    //Turn on driver
+//    int inputdir;   //Variable used to define step direction.
+    int inputsteps; //Variable used to define step amount.
+
+do {    //Print menu on PC to request what to do from the user.
+    pc.printf("Menu\n\n");
+    pc.printf("1. Home Stage.\n");
+    pc.printf("2. Move Stage Forward.\n");
+    pc.printf("3. Move Stage Backwards.\n");
+    pc.printf("4. Exit Program.\n\n");
+    pc.scanf("%d",&count);
+    pc.printf("Option %i\n\n",count);
+  
+ switch (count) {   //Switch function to move to loop requested by user.
+     case 1: // (HOME) Call function here to do the required operation
+     
+            pc.printf("We're sorry, this function is not available at this time!!\n\n");
+            break;
+            
+     case 2: // (Move Forward) Call function here to do the required operation
+     
+            inputsteps=1;
+     while ( (inputsteps > 0) && (inputsteps < 101) ){       //Experimented to determine this range.
+            pc.printf("How many steps do you want to move?\n"); //Next two lines print to PC for user input.
+            pc.printf("     Enter a number between 1 and 100.\n\n");
+            pc.scanf("%i", &inputsteps);    //Reads PC terminal to take in user input.
+            lcd.cls();                      //Clears LCD screen.
+            lcd.printf("%i", inputsteps);   //Print User command to mbed LCD.
+            
+            int stepcount = 0;              // keeps track of how many steps were taken
+            pc.printf("Move started....\n\n"); //Prints so user knows command was received.
+            
+                while (stepcount<inputsteps) { // compares how many steps taken to the desired steps passed in 
+                    count++;
+                
+                    if (count == 5)     // if the motor went around oncce..
+                        count=1;        // ...reset the counter
+                
+                    switch (count) {
+                
+                    case 1:     // if count equals 1 do this
+                        STP1 = 1;
+                        STP2 = 0;
+                        STP3 = 0;
+                        STP4 = 0;
+                    break;      // this skips the code below until stepcount++ 
+        
+                    case 2:
+                        STP1 = 0;
+                        STP2 = 0;
+                        STP3 = 1;
+                        STP4 = 0;
+                    break;
+
+                    case 3:
+                        STP1 = 0;
+                        STP2 = 1;
+                        STP3 = 0;
+                        STP4 = 0;
+                    break;
+    
+                    case 4:
+                        STP1 = 0;
+                        STP2 = 0;
+                        STP3 = 0;
+                        STP4 = 1;
+                    break;
+                    }
+                    stepcount++;                //Iterate loop to keep track of steps.
+                    lcd.cls();                  //Clear mbed LCD screen.
+                    lcd.printf("%i", stepcount);//Print loop count on LCD.
+                    wait(delayStep);            //Defines how fast to step the motor.
+                    }
+                inputsteps=0;   //Reset inputsteps so that while loop becomes false.
+                pc.printf("%i steps completed.\n\n", stepcount); //Prints number of steps performed.
+                }
+            break;
+            
+     case 3: // (Move Backward) Call function here to do the required operation
+     
+            inputsteps=1;
+     while ( (inputsteps > 0) && (inputsteps < 101) ){       //Experimented to determine this range.
+            pc.printf("How many steps do you want to move?\n"); //Next two lines print to PC for user input.
+            pc.printf("     Enter a number between 1 and 100.\n\n");
+            pc.scanf("%i", &inputsteps);    //Reads PC terminal to take in user input.
+            lcd.cls();                      //Clears LCD screen.
+            lcd.printf("%i", inputsteps);   //Print User command to mbed LCD.
+            
+            int stepcount = 0;              // keeps track of how many steps were taken
+            inputsteps=-1*inputsteps;       // reverses sign so that motor steps backwards.
+            pc.printf("Move started....\n\n"); //Prints so user knows command was received.
+                while (stepcount>inputsteps) { 
+
+                    count--;
+      
+                    if (count == 0) // if the motor went around oncce..
+                        count=4;    // ...reset the counter
+                    
+                    switch (count) {
+      
+                    case 1:     // if count equals 1 do this
+                        STP1 = 1;
+                        STP2 = 0;
+                        STP3 = 0;
+                        STP4 = 0;
+                    break;
+
+                    case 2:     // this skips the code below until stepcount--
+                        STP1 = 0;
+                        STP2 = 0;
+                        STP3 = 1;
+                        STP4 = 0;
+                    break;
+
+                    case 3:
+                        STP1 = 0;
+                        STP2 = 1;
+                        STP3 = 0;
+                        STP4 = 0;
+                    break;
+
+                    case 4:
+                        STP1 = 0;
+                        STP2 = 0;
+                        STP3 = 0;
+                        STP4 = 1;
+                    break;
+                    }
+                    stepcount--;                //Iterate loop to keep track of steps.
+                    lcd.cls();                  //Clear mbed LCD screen.
+                    lcd.printf("%i", stepcount);//Print loop count on LCD.
+                    wait(delayStep);
+                    }
+                inputsteps=0;   //Reset inputsteps so that while loop becomes false.
+                pc.printf("%i steps completed.\n\n", stepcount); //Prints number of steps performed.    
+                }
+            break;
+            
+     case 4: // (End Program) Call function here to do the required operation
+            printf("Goodbye\n\n");
+            wait(100000); //Wait forever!
+            break;
+            
+     default: // (Invaild Input)
+            pc.printf("Invaild Choice. Try again...\n\n");
+            wait(1);
+            break;
+        }
+    } 
+
+while (1); //Program won't run without this while loop!
+
+}
+
+