Code used for the 2013 LRM Senior Design Team at VCU 2013 Senior Design Linear Rotary Motor

Dependencies:   mbed

Revision:
0:b1f00c299273
Child:
1:27dcf7ff5b96
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Apr 23 21:31:49 2013 +0000
@@ -0,0 +1,1911 @@
+//FinalFinal_SeniorDesign//
+//Written by William Pedler 4/23/2013//
+//This is the program the 2013 LRM team is using as the Final Program Written 
+//for Senior Design. This program uses two xbee s1 for serial interface//
+
+//Includes//
+#include "mbed.h"
+using namespace std;
+
+//Define//
+#define DEBUG
+#define MAX 1.0
+#define MIN 0.0
+#define large_num 500        //This times 4 controls how long the sensors read for each position//
+#define one 1
+#define two 2
+#define three 3.0
+#define four 4
+#define five 5
+#define six 6
+#define seven 7
+#define eight 8
+#define nine 9
+#define track_length 42
+#define fast 0.125
+#define medium 1.0
+#define slow 2.0
+#define sensor_set 0.005
+#define rot_fast 0.080
+#define rot_med 0.100
+#define rot_slow 0.120
+#define rot_pos 24
+#define rot_step 15
+
+//Declar global variables//
+float left_min[track_length] = {0};
+float left_max[track_length] = {0};
+float right_min[track_length] = {0};
+float right_max[track_length] = {0};
+float rotary_threshold[rot_pos] = {0};
+float threash = 0;
+int rot_position = 0;
+
+//Labeling the Local file system//
+LocalFileSystem local("local");               // Create the local filesystem under the name "local"
+//Labeling onboard LED's//
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+//Label linear coils//
+DigitalOut linear0(p5);      //coil 1
+DigitalOut linear1(p6);      //coil 2
+DigitalOut linear2(p7);      //coil 3
+DigitalOut linear3(p8);      //coil 4
+DigitalOut linear4(p9);      //coil 5
+DigitalOut linear5(p10);     //coil 6
+DigitalOut linear6(p11);     //coil 7
+//Reduce noise by declaring all unused Analog pins as DigitalOut//
+AnalogIn rot_indication(p15);
+AnalogIn zero(p16);
+DigitalOut left17(p17);
+DigitalOut left18(p18);
+AnalogIn distanceR(p19);        //Vout yellow GND black Vss red
+AnalogIn distanceL(p20);        //Vout yellow GND black Vss red
+//Declar rotary coils Digital I/O//
+DigitalOut rotary0(p21);
+DigitalOut rotary1(p22);
+DigitalOut rotary2(p23);
+DigitalOut rotary3(p24);
+DigitalOut rotary4(p25);
+DigitalOut rotary5(p26);
+//Set serial com//
+Serial xbee(p13,p14);
+
+//Function Prototypes//
+void move_all_left(int num);    //num for # of coil sets left//
+void move_all_right(int num);   //num for # of coil sets right//
+float get_Lsensor_min();
+float get_Lsensor_max();
+float get_Rsensor_min();
+float get_Rsensor_max();
+void move_one_right(int p); //p for position//
+void move_one_left(int p);  //p for position//
+int get_position();
+void calibrate_linear();
+void read_file();
+int move_linear(int l);     //l for location//
+int error_check();
+void display_mode();
+void move_all_leftBobby(int num);
+void move_all_rightBobby(int num);
+void scroll_up(int line);   //line for number lines to scroll//
+void cork_screw();
+void rotate_all_cw(int set, float speed);
+void rotate_all_ccw(int set, float speed);
+void rotary_speed();
+void fast_rotary_cw();
+void small_rotary_speed();
+void rot_one_cw();
+void rot_one_ccw();
+void calibrate_rot();
+int get_user_angle(int desired_angle);
+void go_to_angle(int angle);
+void rot_pos_inc();
+void rot_pos_dec();
+///////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////MAIN/////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+int main()
+{
+    //Declarations & Initializations//
+    int desired_location = 0;
+    int desired_angle = 0;
+    int user_instruction = -1;
+
+    //Initialize Linear Coils//
+    linear0 = 1;
+    linear1 = 1;
+    linear2 = 1;
+    linear3 = 1;
+    linear4 = 1;
+    linear5 = 1;
+    linear6 = 1;
+    //Initialize Rotary Coils//
+    //Declar rotary coils Digital I/O//
+    rotary0 = 1;
+    rotary1 = 1;
+    rotary2 = 1;
+    rotary3 = 1;
+    rotary4 = 1;
+    rotary5 = 1;
+    //Initialize onbord led//
+    led1 = 0;
+    led2 = 0;
+    led3 = 0;
+    led4 = 0;
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////New User Interface//////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+    while(1) {
+        //-Prompt user with main menu-
+        switch(user_instruction) {
+            case 0:
+                user_instruction = -1;
+            break;
+            case 1:
+                //Calibrate Motor//
+                calibrate_linear();
+                //Go to operate motor//
+                user_instruction = 4;       //Go to operation menu//
+                break;
+            case 2:
+                //Use old calibration file and begin operation
+                //Read file to fill in max and min//
+                read_file();
+                user_instruction = 4;       //Go to operation menu//
+                break;
+            case 3:
+                display_mode();
+                user_instruction = -1;      //Go to main menu//
+                break;
+            case 4:
+                //Operation Menu//
+                for(int i=0; i<30; i++) {
+                    xbee.printf("\r\n");
+                }//End of for
+                scroll_up(30);
+                xbee.printf("\r\n\n****Operation Menu****");
+                xbee.printf("\r\nEnter a position number from 2 to 38: ");
+                xbee.printf("\r\nTo get back to the Main Menu press 0 and <Enter>.");
+                scroll_up(25);
+                desired_location = error_check();
+                    if(desired_location == 0) {
+                        user_instruction = -1;
+                        break;
+                    }//End of if
+                    else if(desired_location > 40) {
+                        user_instruction = 4;
+                        xbee.printf("\r\nUser input was out of bounds");
+                        xbee.printf("\r\nPlease try again");
+                        scroll_up(20);
+                        wait(slow);
+                        break;
+                    }//End of else if
+                    else if(desired_location < 0) {
+                        user_instruction = 4;
+                        xbee.printf("\r\nUser input was out of bounds");
+                        xbee.printf("\r\nPlease try again");
+                        scroll_up(20);
+                        wait(slow);
+                        break;
+                    }//End of else if
+                xbee.printf("\r\nEnter a rotary angle from 0 to 360");
+                scroll_up(25);
+                desired_angle = error_check();
+                desired_angle = get_user_angle(desired_angle);
+                xbee.printf("\r\nGoing to position %d", desired_location);
+                //Pass desired_location to move_linear();
+                //On normal exit move_linear returns 4... causes repeat of operation menu//
+                user_instruction = move_linear(desired_location);
+                //Go to the desired angle//
+                xbee.printf("\r\nGoing to angle %d", desired_angle);
+                go_to_angle(desired_angle);
+                break;
+            default:
+                //MAIN MENU//
+                scroll_up(30);
+                xbee.printf("\r\n\n****Main Menu****");
+                xbee.printf("\r\nFor Calibration press 1 and \r\n<Enter>.");
+                xbee.printf("\r\nTo enter a desired location press 2 and \r\n<Enter>.");
+                xbee.printf("\r\nFor display mode press 3 and\r\n<Enter>.");
+                scroll_up(22);
+                user_instruction = error_check();
+                break;
+        }//End of switch
+    }//End of while(1)//
+}//End of main
+/*******************************************************************************
+///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////FUNCITONS/////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+*******************************************************************************/
+///////////////////////////////////////////////////////////////////////////////
+////////////////////////////move_all_left//////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//This function accepts an interger value and moves the forcer to the left//
+//The interger number of coil sets//
+void move_all_left(int set)
+{
+//Declartions and initialization//
+    linear0 = 1;         //Coil1    Mod0
+    linear1 = 1;         //Coil2    Mod1
+    linear2 = 1;         //Coil3    Mod2
+    linear3 = 1;         //Coil4    Mod3
+    linear4 = 1;         //Coil5    Mod4
+    linear5 = 1;         //Coil6    Mod5
+    linear6 = 1;         //Coil7    Mod6
+
+    //LEFT//
+    for(int i=0; i<set; i++) {
+        linear4 =! linear4;   //Coil 5
+        wait(fast);
+        linear4 =! linear4;
+        linear5 =! linear5;   //Coil 6
+        wait(fast);
+        linear5 =! linear5;
+        linear6 =! linear6;   //Coil 7
+        wait(fast);
+        linear6 =! linear6;
+        linear0 =! linear0;   //Coil 1
+        wait(fast);
+        linear0 =! linear0;
+        linear1 =! linear1;   //Coil 2
+        wait(fast);
+        linear1 =! linear1;
+        linear2 =! linear2;   //Coil 3
+        wait(fast);
+        linear2 =! linear2;
+        linear3 =! linear3;   //Coil 4
+        wait(fast);
+        linear3 =! linear3;
+    }//End of For loop
+    return;
+}//End of Funciton
+
+///////////////////////////////////////////////////////////////////////////////
+////////////////////////////move_all_right/////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//This function accepts an interger value and moves the forcer to the right//
+//The interger number of coil sets//
+void move_all_right(int set)
+{
+//Declartions and initialization//
+    linear0 = 1;         //Coil1    Mod0
+    linear1 = 1;         //Coil2    Mod1
+    linear2 = 1;         //Coil3    Mod2
+    linear3 = 1;         //Coil4    Mod3
+    linear4 = 1;         //Coil5    Mod4
+    linear5 = 1;         //Coil6    Mod5
+    linear6 = 1;         //Coil7    Mod6
+
+    //RIGHT//
+    for(int i=0; i<set; i++) {
+        linear0 =! linear0;   //Coil 1
+        wait(fast);
+        linear0 =! linear0;
+        linear6 =! linear6;   //Coil 7
+        wait(fast);
+        linear6 =! linear6;
+        linear5 =! linear5;   //Coil 6
+        wait(fast);
+        linear5 =! linear5;
+        linear4 =! linear4;   //Coil 5
+        wait(fast);
+        linear4 =! linear4;
+        linear3 =! linear3;   //Coil 4
+        wait(fast);
+        linear3 =! linear3;
+        linear2 =! linear2;   //Coil 3
+        wait(fast);
+        linear2 =! linear2;
+        linear1 =! linear1;   //Coil 2
+        wait(fast);
+        linear1 =! linear1;
+    }//End of For loop
+    return;
+}//End of Funciton
+
+///////////////////////////////////////////////////////////////////////////////
+////////////////////////////get_Lsensor_min////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//returns the min distance value of left sensor when called//
+float get_Lsensor_min()
+{
+    //Declarations and initializations//
+    float min = MAX;
+    float read;
+    for(int i=0; i<large_num; i++) {
+        wait(sensor_set);
+        read = distanceL.read();
+        if(read < min) {
+            min = read;
+        }//End of if
+        else {
+            wait(MIN);
+        }//End of else
+    }//End of for
+    return(min);
+}//End of Function
+
+///////////////////////////////////////////////////////////////////////////////
+//////////////////////////////get_Lsensor_max//////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//returns the max distance value of the left sensor when called//
+float get_Lsensor_max()
+{
+    //Declarations and initializations//
+    float max = MIN;
+    float read;
+    for(int i=0; i<large_num; i++) {
+        wait(sensor_set);
+        read = distanceL.read();
+        if(read > max) {
+            max = read;
+        }//End of if
+        else {
+            wait(MIN);
+        }//End of else
+    }//End of for
+    return(max);
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////get_Rsensor_min///////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//Function returns the min value of the right sensor when called//
+float get_Rsensor_min()
+{
+    //Declarations and initializations//
+    float min = MAX;
+    float read;
+    for(int i=0; i<large_num; i++) {
+        wait(sensor_set);
+        read = distanceR.read();
+        if(read < min) {
+            min = read;
+        }//End of if
+        else {
+            wait(MIN);
+        }//End of else
+    }//End of for
+    return(min);
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////get_Rsensor_max/////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+float get_Rsensor_max()
+{
+    //Declarations and initializations//
+    float max = MIN;
+    float read;
+    for(int i=0; i<large_num; i++) {
+        wait(sensor_set);
+        read = distanceR.read();
+        if(read > max) {
+            max = read;
+        }//End of if
+        else {
+            wait(MIN);
+        }//End of else
+    }//End of for
+    return(max);
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////move_one_right//////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//Function takes current position and moves one to the right
+void move_one_right(int position)
+{
+    //Declarations and initializations//
+    int current_coil = abs(position % seven);
+    //xbee.printf("\r\nCurrent Coil:\t%d",current_coil);
+    switch(current_coil) {
+        case 0:
+            linear6 = 1;
+            linear5 = 1;
+            linear4 = 1;
+            linear3 = 1;
+            linear2 = 1;
+            linear1 = 1;
+            linear0 = 0;    //Fire Coil 1//
+            break;
+        case 1:
+            linear6 = 0;    //Fire Coil 7//
+            linear5 = 1;
+            linear4 = 1;
+            linear3 = 1;
+            linear2 = 1;
+            linear1 = 1;
+            linear0 = 1;
+            break;
+        case 2:
+            linear6 = 1;
+            linear5 = 0;    //Fire Coil 6//
+            linear4 = 1;
+            linear3 = 1;
+            linear2 = 1;
+            linear1 = 1;
+            linear0 = 1;
+            break;
+        case 3:
+            linear6 = 1;
+            linear5 = 1;
+            linear4 = 0;    //Fire Coil 5//
+            linear3 = 1;
+            linear2 = 1;
+            linear1 = 1;
+            linear0 = 1;
+            break;
+        case 4:
+            linear6 = 1;
+            linear5 = 1;
+            linear4 = 1;
+            linear3 = 0;    //Fire Coil 4//
+            linear2 = 1;
+            linear1 = 1;
+            linear0 = 1;
+            break;
+        case 5:
+            linear6 = 1;
+            linear5 = 1;
+            linear4 = 1;
+            linear3 = 1;
+            linear2 = 0;    //Fire Coil 3//
+            linear1 = 1;
+            linear0 = 1;
+            break;
+        case 6:
+            linear6 = 1;
+            linear5 = 1;
+            linear4 = 1;
+            linear3 = 1;
+            linear2 = 1;
+            linear1 = 0;    //Fire Coil 2//
+            linear0 = 1;
+            break;
+        default:
+            wait(MIN);
+    }//End of switch
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////move_one_left//////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//Function takes current position and moves one to the left
+void move_one_left(int position)
+{
+    //Declarations and initializations//
+    int current_coil = position % seven;
+    //xbee.printf("\r\nCurrent Coil:\t%d",current_coil);
+    switch(current_coil) {
+        case 0:
+            linear6 = 1;
+            linear5 = 0;    //Fire Coil 6//
+            linear4 = 1;
+            linear3 = 1;
+            linear2 = 1;
+            linear1 = 1;
+            linear0 = 1;
+            break;
+        case 1:
+            linear6 = 1;
+            linear5 = 1;
+            linear4 = 0;    //Fire Coil 5//
+            linear3 = 1;
+            linear2 = 1;
+            linear1 = 1;
+            linear0 = 1;
+            break;
+        case 2:
+            linear6 = 1;
+            linear5 = 1;
+            linear4 = 1;
+            linear3 = 0;    //Fire Coil 4//
+            linear2 = 1;
+            linear1 = 1;
+            linear0 = 1;
+            break;
+        case 3:
+            linear6 = 1;
+            linear5 = 1;
+            linear4 = 1;
+            linear3 = 1;
+            linear2 = 0;    //Fire Coil 3//
+            linear1 = 1;
+            linear0 = 1;
+            break;
+        case 4:
+            linear6 = 1;
+            linear5 = 1;
+            linear4 = 1;
+            linear3 = 1;
+            linear2 = 1;
+            linear1 = 0;   //Fire Coil 2//
+            linear0 = 1;
+            break;
+        case 5:
+            linear6 = 1;
+            linear5 = 1;
+            linear4 = 1;
+            linear3 = 1;
+            linear2 = 1;
+            linear1 = 1;
+            linear0 = 0;    //Fire Coil 1//
+            break;
+        case 6:
+            linear6 = 0;    //Fire Coil 7//
+            linear5 = 1;
+            linear4 = 1;
+            linear3 = 1;
+            linear2 = 1;
+            linear1 = 1;
+            linear0 = 1;
+            break;
+        default:
+            wait(MIN);
+    }//End of switch
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////get_position//////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+//Function reads current position on track and returns the mod 7//
+//Function uses calibration data to determin current position//
+int get_position()
+{
+    //Declrations and Initializaitons//
+    int position = -1;
+    int count = 0;
+    while(position == -1) {
+        wait(slow);
+        float left_sensor = distanceL.read();
+        float right_sensor = distanceR.read();
+        //xbee.printf("\r\nleft_sensor:%f",left_sensor);
+        //xbee.printf("\r\nright_sensor:%f",right_sensor);
+        //Use closest sensor//
+        if(left_sensor > right_sensor) {
+            //xbee.printf("\r\nleft > right");
+            //Look at Lsensor data//
+            for(int i=0; i<track_length; i++) {
+                if(left_sensor <= left_max[i] && left_sensor >= left_min[i]) {
+                    position = i;
+                    xbee.printf("\r\nPosition L1 %d",position);
+                    return position;
+                }//End of if//
+                else if(left_sensor < left_max[i] && left_sensor > left_max[i+one]) {
+                    position = i+one;
+                    xbee.printf("\r\nPosition L2 %d",position);
+                    return position;
+                }//End of else if//
+                else if(left_sensor < left_max[i] && left_sensor > left_min[i+one]) {
+                    position = i;
+                    xbee.printf("\r\nPosition L3 %d",position);
+                    return position;
+                }//End of else if//
+            }//End of for//
+        }//End of if//
+
+        else if(right_sensor >= left_sensor) {
+            xbee.printf("\r\nright > left");
+            //Look at Rsensor data//
+            for(int i=0; i<track_length; i++) {
+                if(right_sensor <= right_max[i] && right_sensor >= right_min[i]) {
+                    position = i;
+                    xbee.printf("\r\nPosition R1 %d",position);
+                    return position;
+                }//End of if//
+                else if(right_sensor > right_max[i] && right_sensor < right_max[i+one]) {
+                    position = i+one;
+                    xbee.printf("\r\nPosition R2 %d",position);
+                    return position;
+                }//End of else if//
+                else if(right_sensor > right_max[i] && right_sensor < right_min[i+one]) {
+                    position = i;
+                    xbee.printf("\r\nPosition R3 %d",position);
+                    return position;
+                }//End of else if//
+            }//End of for//
+        }//End of else if//
+        count++;
+        if(count > five) {
+            return(-2);
+        }//End of if//
+    }//End of while(position....
+    return position;
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+////////////////////////////////CALIBRATE//////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+/*
+-Calibrate Motor
+1. Move all the way to the LEFT side of the track.
+2. Get max and mins from both distance sensors.
+3. Store the max and mins in various arrays.
+4. Move one position to the RIGHT and repeat for entire track.
+5. Once the entire track has been recorded export to a txt file on the mbed.
+Format for txt file:
+Position #  :Left Low    :Left High   :Right Low   :Right High
+0           :####        :####        :####        :####
+1 (3 \t)    :#### (2 \t)...
+.
+.
+#EOF
+*/
+void calibrate_linear()
+{
+    //1.Move all the way to the LEFT side of the track//
+    move_all_left(six);
+    //2.Get Sensor Data//
+    for(int i=0; i<track_length; i++) {
+        //3.Store in various arrays
+        wait(slow);
+        left_min[i] = get_Lsensor_min();
+        left_max[i] = get_Lsensor_max();
+        right_min[i] = get_Rsensor_min();
+        right_max[i] = get_Rsensor_max();
+        led4 = !led4;
+        //4.Move to the right one//
+        move_one_right(i);
+    }//End of for
+
+    //5. Export data to a txt file on the mbed//
+    FILE *fp = fopen("/local/distance.txt", "w");  //Open "distance_data.txt" on the local file system for writing
+    fprintf(fp,"Position#\t Left Min\t Left Max\t Right Min\t Right Max\r\n");
+    for(int i=0; i<track_length; i++) {
+        fprintf(fp,"%d\t %f\t %f\t %f\t %f\r\n",i,left_min[i],left_max[i],right_min[i],right_max[i]);
+        /*
+        //Example File Handeling Code//
+        FILE *fp = fopen("/local/out.txt", "w");  // Open "out.txt" on the local file system for writing
+        fprintf(fp, "Hello World!");
+        fclose(fp);
+        */
+    }//End of for
+    fclose(fp);
+    //Export each variable to its own file//
+    //Write leftmin.txt file//
+    FILE *fp1 = fopen("/local/leftmin.txt", "w");
+    for(int i=0; i<track_length; i++) {
+        fprintf(fp1,"%f\r\n",left_min[i]);
+    }//End of for//
+    fclose(fp1);
+    //Write leftmax.txt file//
+    FILE *fp2 = fopen("/local/leftmax.txt", "w");
+    for(int i=0; i<track_length; i++) {
+        fprintf(fp2,"%f\r\n",left_max[i]);
+    }//End of for//
+    fclose(fp2);
+    //Write rightmin.txt file//
+    FILE *fp3 = fopen("/local/rightmin.txt", "w");
+    for(int i=0; i<track_length; i++) {
+        fprintf(fp3,"%f\r\n",right_min[i]);
+    }//End of for//
+    fclose(fp3);
+    //Write rightmax.txt file//
+    FILE *fp4 = fopen("/local/rightmax.txt", "w");
+    for(int i=0; i<track_length; i++) {
+        fprintf(fp4,"%f\r\n",right_max[i]);
+    }//End of for//
+    fclose(fp4);
+
+    //Set an LED high so we know calibration is complete//
+    led1 = 1;
+    //move_all_left(six);
+    calibrate_rot();
+    move_all_left(six);
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+////////////////////////////read_file//////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//read_file reads the text files containing calibration data
+void read_file()
+{
+    char line[80];
+    int i = 0;
+    FILE *fr1;
+    fr1 = fopen ("/local/leftmin.txt", "rt");
+    while(fgets(line, 80, fr1) != NULL) {
+        sscanf (line, "%f", &left_min[i]);
+        i++;
+    }//End of while
+    fclose(fr1);
+
+    i = 0;
+    FILE *fr2;
+    fr2 = fopen ("/local/leftmax.txt", "rt");
+    while(fgets(line, 80, fr2) != NULL) {
+        sscanf (line, "%f", &left_max[i]);
+        i++;
+    }//End of while
+    fclose(fr2);
+
+    i = 0;
+    FILE *fr3;
+    fr3 = fopen ("/local/rightmin.txt", "rt");
+    while(fgets(line, 80, fr3) != NULL) {
+        sscanf (line, "%f", &right_min[i]);
+        i++;
+    }//End of while
+    fclose(fr3);
+
+    i = 0;
+    FILE *fr4;
+    fr4 = fopen ("/local/rightmax.txt", "rt");
+    while(fgets(line, 80, fr4) != NULL) {
+        sscanf (line, "%f", &right_max[i]);
+        i++;
+    }//End of while
+    fclose(fr4);
+    
+    i = 0;
+    FILE *fr5;
+    fr5 = fopen ("/local/rotary.txt","rt");
+    while(fgets(line, 80,fr5) != NULL){
+        sscanf (line, "%f", &rotary_threshold[i]);
+        i++;    
+    }//End of while
+    
+    i = 0;
+    FILE *fr6;
+    fr6 = fopen ("/local/threash.txt","rt");
+    while(fgets(line, 80, fr6) != NULL){
+        sscanf (line, "%f", &threash);
+        i++;    
+    }//End of while
+    
+    
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+//////////////////////////////move_linear//////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//move_linear accepts a desired locaiton and moves the forcer accordingly//
+//Returns 4 on normal exit... prompting the user for a new position//
+int move_linear(int desired_location)
+{
+    int current_location = get_position();
+    int difference = current_location - desired_location;
+    int count = 0;
+    xbee.printf("\r\nInside move_linear function");
+    xbee.printf("\r\nCurrent_location %d", current_location);
+    if(desired_location == -1) {
+        return -1;
+    }//End of if
+    while(current_location != desired_location) {
+        difference = current_location - desired_location;
+        xbee.printf("\r\nDifference %d",difference);
+        while(difference > 0) {
+            if(count > four) {
+                for(int i=0; i<difference; i++) {
+                    move_one_left(current_location-one);
+                    current_location--;
+                }//End of for
+            }//End of if//
+            //Move LEFT//
+            xbee.printf("\r\nMoving Left");
+            led2 = 1;
+            wait(medium);
+            for(int i=0; i<difference; i++) {
+                move_one_left(current_location);
+                current_location--;
+                wait(fast);
+            }//End of for
+            current_location = get_position();
+            difference = current_location - desired_location;
+            led2 = 0;
+            count++;
+            if(current_location == -2) {
+                return(four);
+            }//End of if//
+        }//End of while(greater than zero)//
+
+        while(difference < 0) {
+            if(count > four) {
+                for(int i=0; i<(abs(difference)); i++) {
+                    move_one_right(current_location+one);
+                    current_location++;
+                }//End of for//
+            }//End of if//
+            //Move RIGHT//
+            xbee.printf("\r\nMoving Right");
+            led3 = 1;
+            wait(medium);
+            for(int i=0; i<(abs(difference)); i++) {
+                move_one_right(current_location);
+                current_location++;
+                wait(fast);
+            }//End of for
+            current_location = get_position();
+            difference = current_location - desired_location;
+            led3 = 0;
+            count++;
+            if(current_location == -2) {
+                return(four);
+            }//End of if//
+        }//End of while(difference less than 0)//
+    }//End of while(current not desired)//
+    return(four);
+}//End of function//
+
+///////////////////////////////////////////////////////////////////////////////
+////////////////////////////error_check////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//Function does scanf error checking//
+//It clears the keyboard buffer incase anything other than numbers a pressed//
+int error_check()
+{
+    char not_number;
+    int number;
+    int flag;
+    while ((flag = xbee.scanf("%d", &number)) != EOF) {
+        if (flag != 1) {
+            not_number = xbee.getc();
+#ifdef DEBUG
+            xbee.printf("\r\ndegub:%c in input stream, discarding", not_number);
+#endif
+        }//End of if
+        else {
+            printf("\r\nRETURN = %d",number);
+            return(number);
+        }//End of else//
+    }//End of while((flag...
+    return(number);
+}//End of function//
+
+///////////////////////////////////////////////////////////////////////////////
+////////////////////////////////display_mode///////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//Function set up to run display mode options//
+void display_mode()
+{
+    int option = -1;
+    int exit = 0;
+    //char input = 1;
+    int linear_auto = 3;
+    int linear_oscill = 3;
+    int combined = 3;
+    int high_speed = 3;
+    int rotary_auto = 3;
+    int set_up = 0;
+
+    while(exit != one) {
+        switch (option) {
+
+///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////DISPLAY OPTIONS///////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+            case 1:
+                //LINEAR AUTO PROGRAM//
+                for(int j=0; j<linear_auto; j++) {
+                    for(int i=0; i<12; i++) {
+                        move_all_left(abs(five-i));
+                        move_all_right(abs(five-i));
+                    }//End of for//
+                }//End of for//
+                option = -1;
+                break;
+
+            case 2:
+                //LINEAR OSCILLATION//
+                for(int j=0; j<linear_oscill; j++) {
+                    for(int i=0; i<12; i++) {
+                        move_all_leftBobby(abs(five-i));
+                        move_all_rightBobby(abs(five-i));
+                    }//End of for//
+                }//End of for//
+                option = -1;
+                break;
+
+            case 3:
+                //COMBINED//
+                for(int i=0; i<combined; i++) {
+                    //1.Linear//
+                    move_all_right(five);
+                    linear0 =! linear0;   //Coil 1
+                    wait(fast);
+                    linear0 =! linear0;
+                    linear6 =! linear6;   //Coil 7
+                    wait(fast);
+                    linear6 =! linear6;
+                    linear5 =! linear5;   //Coil 6
+                    wait(fast);
+                    linear5 =! linear5;
+                    linear4 =! linear4;   //Coil 5
+                    wait(fast);
+                    linear4 =! linear4;
+                    linear3 =! linear3;   //Coil 4
+                    wait(fast);
+                    linear3 =! linear3;
+                    wait(0.10);
+                    //2.Rotate//
+                    rotate_all_cw(eight, rot_slow);
+                    wait(0.10);
+                    rotate_all_ccw(eight, rot_slow);
+                    //3.Cork Screw//
+                    cork_screw();
+                    wait(1.00);
+                    //move_all_right(six);
+                    //wait(0.10);
+                    //4.Repeat//
+                }//End of for loop
+                option = -1;
+                break;
+
+            case 4:
+                //HIGH SPEED ROTARY//
+                rotary0 = 1;
+                rotary1 = 1;
+                rotary2 = 1;
+                rotary3 = 1;
+                rotary4 = 1;
+                rotary5 = 1;
+                for(int i=0; i<high_speed; i++) {
+                    rotary_speed();
+                }//End of for//
+                option = -1;
+                break;
+            case 5:
+                //ROTARY AUTO PROGRAM//
+                for(int i=0; i<rotary_auto; i++) {
+                    rotate_all_ccw(six, rot_fast);
+                    rotate_all_cw(six, rot_fast);
+                }//End of for//
+                option = -1;
+                break;
+            case 6:
+                fast_rotary_cw();
+                option = -1;
+                break;            
+            case 7:
+                //SMALL FORCER ROTARY AUTO PROGRAM//
+                rotary0 = 1;
+                rotary1 = 1;
+                rotary2 = 1;
+                rotary3 = 1;
+                rotary4 = 1;
+                rotary5 = 1;
+                for(int i=0; i<high_speed; i++) {
+                    small_rotary_speed();
+                }//End of for//
+                option = -1;
+            break;
+            case 9:
+                //SET UP CASE//
+                xbee.printf("\r\n****Display Mode Set UP****");
+                xbee.printf("\r\nChoose a program and press <Enter>.");
+                xbee.printf("\r\n1. Linear Auto Program");
+                xbee.printf("\r\n2. Linear Oscillation");
+                xbee.printf("\r\n3. Combined Operation");
+                xbee.printf("\r\n4. High Speed Rotary");
+                xbee.printf("\r\n5. Rotary Auto Program");
+                scroll_up(22);
+                set_up = error_check();
+                switch(set_up) {
+                    case 1:
+                        //Edit LINEAR AUTO PROGRAM//
+                        xbee.printf("\r\nHow many times would you like to run Linear Auto Program?");
+                        scroll_up(27);
+                        linear_auto = error_check();
+                        break;
+                    case 2:
+                        //Edit LINEAR OSCILLATION//
+                        xbee.printf("\r\nHow many times would you like to run Linear Oscillation?");
+                        scroll_up(27);
+                        linear_oscill = error_check();
+                        break;
+                    case 3:
+                        //Edit COMBINED OPERATION//
+                        xbee.printf("\r\nHow many times would you like to run Combined Operation?");
+                        scroll_up(27);
+                        combined = error_check();
+                        break;
+                    case 4:
+                        //Edit HIGH SPEED ROTARY//
+                        xbee.printf("\r\nHow many times would you like to run High Speed Rotary?");
+                        scroll_up(27);
+                        high_speed = error_check();
+                        break;
+                    case 5:
+                        //Edit ROTARY AUTO PROGRAM//
+                        xbee.printf("\r\nHow many times would you like to run Rotary Auto Program?");
+                        scroll_up(27);
+                        rotary_auto = error_check();
+                        break;
+                }//End of switch(setup)
+                option = -1;
+                break;
+                
+            case 0:
+                //Return to the main menu//
+                exit = one;
+                break;
+            default:
+                option = -1;
+                scroll_up(30);
+                xbee.printf("\r\n\n****Display Mode****");
+                xbee.printf("\r\nTo run LINEAR AUTO PROGRAM press 1 and \r\n<Enter>.");
+                xbee.printf("\r\nTo run LINEAR OSCILLATION press 2 and \r\n<Enter>.");
+                xbee.printf("\r\nTo run COMBINED OPERATION press 3 and \r\n<Enter>.");
+                xbee.printf("\r\nTo run HIGH SPEED ROTARY press 4 and \r\n<Enter>.");
+                xbee.printf("\r\nTo run ROTARY AUTO PROGRAM press 5 and \r\n<Enter>.");
+                xbee.printf("\r\nTo run SMALL FORCER SPEED RUN press 6 and \r\n<Enter>.");
+                //xbee.printf("\r\nTo run SMALL FORCER AUTO ROTARY press 7 and \r\n<Enter>.");
+                xbee.printf("\r\nFor SET UP press 9 and \r\n<Enter>.");
+                xbee.printf("\r\nTo return to the previous menu press 0 and \r\n<Enter>.");
+                scroll_up(12);
+                option = error_check();
+                break;
+        }//End of switch//
+    }//End of while//
+    return;
+}//End of function//
+
+///////////////////////////////////////////////////////////////////////////////
+////////////////////////////move_all_leftBobby/////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//This function accepts an interger value and moves the forcer to the left//
+//The interger number of coil sets//
+void move_all_leftBobby(int set)
+{
+//Declartions and initialization//
+    linear0 = 1;         //Coil1    Mod0
+    linear1 = 1;         //Coil2    Mod1
+    linear2 = 1;         //Coil3    Mod2
+    linear3 = 1;         //Coil4    Mod3
+    linear4 = 1;         //Coil5    Mod4
+    linear5 = 1;         //Coil6    Mod5
+    linear6 = 1;         //Coil7    Mod6
+
+    //LEFT//
+    for(int i=0; i<set; i++) {
+        linear4 =! linear4;   //Coil 5
+        wait(fast);
+        linear4 =! linear4;
+        linear5 =! linear5;   //Coil 6
+        wait(fast);
+        linear5 =! linear5;
+        linear6 =! linear6;   //Coil 7
+        wait(fast);
+        linear6 =! linear6;
+        linear0 =! linear0;   //Coil 1
+        wait(fast);
+        linear0 =! linear0;
+        linear1 =! linear1;   //Coil 2
+        wait(fast);
+        linear1 =! linear1;
+        linear2 =! linear2;   //Coil 3
+        wait(fast);
+        linear2 =! linear2;
+        linear3 =! linear3;   //Coil 4
+        wait(fast);
+        linear3 =! linear3;
+    }//End of For loop
+
+    linear4 =! linear4;   //Coil 5
+    wait(fast);
+    linear4 =! linear4;
+    linear5 =! linear5;   //Coil 6
+    wait(fast);
+    linear5 =! linear5;
+    linear6 =! linear6;   //Coil 7
+    wait(fast);
+    linear6 =! linear6;
+    linear0 =! linear0;   //Coil 1
+    wait(fast);
+    linear0 =! linear0;
+    //linear1 =! linear1;   //Coil 2
+    //wait(fast);
+    //linear1 =! linear1;
+
+    return;
+}//End of Funciton
+
+///////////////////////////////////////////////////////////////////////////////
+////////////////////////////move_all_rightBobby////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//This function accepts an interger value and moves the forcer to the right//
+//The interger number of coil sets//
+void move_all_rightBobby(int set)
+{
+//Declartions and initialization//
+    linear0 = 1;         //Coil1    Mod0
+    linear1 = 1;         //Coil2    Mod1
+    linear2 = 1;         //Coil3    Mod2
+    linear3 = 1;         //Coil4    Mod3
+    linear4 = 1;         //Coil5    Mod4
+    linear5 = 1;         //Coil6    Mod5
+    linear6 = 1;         //Coil7    Mod6
+
+    //RIGHT//
+    for(int i=0; i<set; i++) {
+        linear0 =! linear0;   //Coil 1
+        wait(fast);
+        linear0 =! linear0;
+        linear6 =! linear6;   //Coil 7
+        wait(fast);
+        linear6 =! linear6;
+        linear5 =! linear5;   //Coil 6
+        wait(fast);
+        linear5 =! linear5;
+        linear4 =! linear4;   //Coil 5
+        wait(fast);
+        linear4 =! linear4;
+        linear3 =! linear3;   //Coil 4
+        wait(fast);
+        linear3 =! linear3;
+        linear2 =! linear2;   //Coil 3
+        wait(fast);
+        linear2 =! linear2;
+        linear1 =! linear1;   //Coil 2
+        wait(fast);
+        linear1 =! linear1;
+    }//End of For loop
+
+    linear0 =! linear0;   //Coil 1
+    wait(fast);
+    linear0 =! linear0;
+    linear6 =! linear6;   //Coil 7
+    wait(fast);
+    linear6 =! linear6;
+    linear5 =! linear5;   //Coil 6
+    wait(fast);
+    linear5 =! linear5;
+    linear4 =! linear4;   //Coil 5
+    wait(fast);
+    linear4 =! linear4;
+    //linear3 =! linear3;   //Coil 4
+    //wait(fast);
+    //linear3 =! linear3;
+
+
+    return;
+}//End of Funciton
+
+///////////////////////////////////////////////////////////////////////////////
+//////////////////////////////scroll_up()//////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//Function accepts an integer and scrolls the text on the serial terminal that
+//Number of spaces//
+void scroll_up(int space)
+{
+    for(int i=0; i<space; i++) {
+        xbee.printf("\r\n");
+    }//End of for
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////cork_screw()////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//Function moves linear and rotary at the same time... from right to left//////
+void cork_screw()
+{
+rotary0 = 1;
+rotary1 = 1;
+rotary2 = 1;
+rotary3 = 1;
+rotary4 = 1;
+rotary5 = 1;
+    int length = track_length;
+    //for(int i=0; i<track_length; i++) {
+        move_one_left(abs(length--));
+        rotary0 = !rotary0;
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary1 = !rotary1;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary2 = !rotary2;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary3 = !rotary3;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary4 = !rotary4;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary5 = !rotary5;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary0 = !rotary0;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary1 = !rotary1;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary2 = !rotary2;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary3 = !rotary3;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary4 = !rotary4;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary5 = !rotary5;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary0 = !rotary0;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary1 = !rotary1;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary2 = !rotary2;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary3 = !rotary3;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary4 = !rotary4;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary5 = !rotary5;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary0 = !rotary0;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary1 = !rotary1;
+        move_one_left(abs(length--));
+        wait(fast);
+        move_one_left(abs(length--));
+        wait(fast);
+        rotary2 = !rotary2;
+        move_one_left(abs(length--));
+        wait(fast);
+        /*move_one_left(abs(length--));
+        wait(fast);
+        rotary3 = !rotary3;
+        move_one_left(abs(length--)); // */
+    //}//End of for//
+}//End of function//
+
+///////////////////////////////////////////////////////////////////////////////
+/////////////////////////rotate_all_cw(int )///////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+void rotate_all_cw(int set, float speed)
+{
+rotary0 = 1;
+rotary1 = 1;
+rotary2 = 1;
+rotary3 = 1;
+rotary4 = 1;
+rotary5 = 1;
+    for(int i=0; i<set; i++) {
+        rotary0 = !rotary0;
+        wait(speed);
+        rotary1 = !rotary1;
+        wait(speed);
+        rotary2 = !rotary2;
+        wait(speed);
+        rotary3 = !rotary3;
+        wait(speed);
+        rotary4 = !rotary4;
+        wait(speed);
+        rotary5 = !rotary5;
+        wait(speed);
+    }//End of for
+}//End of function//
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////rotate_all_ccw(int s)///////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//Function rotate the forcer
+void rotate_all_ccw(int set, float speed)
+{
+rotary0 = 1;
+rotary1 = 1;
+rotary2 = 1;
+rotary3 = 1;
+rotary4 = 1;
+rotary5 = 1;
+    for(int i=0; i<set; i++) {
+        rotary5 = !rotary5;
+        wait(speed);
+        rotary4 = !rotary4;
+        wait(speed);
+        rotary3 = !rotary3;
+        wait(speed);
+        rotary2 = !rotary2;
+        wait(speed);
+        rotary1 = !rotary1;
+        wait(speed);
+        rotary0 = !rotary0;
+        wait(speed);
+    }//End of for
+}//End of function//
+
+///////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////rotary_speed();//////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//rotary_speed() rotates the forcer faster and faster//
+void rotary_speed()
+{
+    float time = 0.160;
+    float step = 0.010;
+    int a = 0;
+    int cycle = 16;
+    int change = 0;
+    int turns = 4;
+    int maxint = .08;
+
+    while(a<2) {
+        for(int i=cycle; i>0; i--) {
+            if(time == maxint) {
+                turns = 80;
+            } else if(time != maxint) {
+                turns = 4;
+            }
+            if(change == 0) {
+                if(i > cycle/2) {
+                    rotate_all_cw(turns,time);
+                    time = time - step;
+                }//End of if
+                if(i < ((cycle/2) + 1 ) && i > 0) {
+                    rotate_all_cw(turns,time);
+                    time = time + step;
+                }//End of if
+            } else if(change==1) {
+                if(i > cycle/2) {
+
+                    rotate_all_ccw(turns,time);
+                    time = time - step;
+                }//End of if
+                if(i < ((cycle/2) + 1 ) && i > 0) {
+                    rotate_all_ccw(turns,time);
+                    time = time + step;
+                }//End of if
+            }//End of else if//
+        }//End of for//
+        change = !change;
+        a++;
+    }//End of while
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////fast_rotary_cw()////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//Special function for little forcer
+void fast_rotary_cw(){
+    rotate_all_cw(400, 0.01);
+}//End of Function//    
+
+///////////////////////////////////////////////////////////////////////////////
+////////////////////////////////small_rotary_speed();//////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//small_rotary_speed() rotates the small forcer faster and faster//
+void small_rotary_speed()
+{
+    float time = 0.080;
+    float step = 0.005;
+    int a = 0;
+    int cycle = 32;
+    int change = 0;
+    int turns = 8;
+    int maxint = 0.010;
+
+    while(a<2) {
+        for(int i=cycle; i>0; i--) {
+            if(time == maxint) {
+                turns = 400;
+            } else if(time != maxint) {
+                turns = 8;
+            }
+            if(change == 0) {
+                if(i > cycle/2) {
+                    rotate_all_cw(turns,time);
+                    time = time - step;
+                }//End of if
+                if(i < ((cycle/2) + 1 ) && i > 0) {
+                    rotate_all_cw(turns,time);
+                    time = time + step;
+                }//End of if
+            } else if(change==1) {
+                if(i > cycle/2) {
+                    rotate_all_ccw(turns,time);
+                    time = time - step;
+                }//End of if
+                if(i < ((cycle/2) + 1 ) && i > 0) {
+                    rotate_all_ccw(turns,time);
+                    time = time + step;
+                }//End of if
+            }//End of else if//
+        }//End of for//
+        change = !change;
+        a++;
+    }//End of while
+}//End of function
+///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////rot_one_cw()//////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//Function analyzes current state of digital I/O for rotary and increments cw//
+void rot_one_cw(){
+    if(rotary0 == 0 && rotary1 == 0 && rotary2 == 0 && rotary3 == 0 && rotary4 == 0 && rotary5 == 0){
+        rotary0 = 0;
+        rotary1 = 0;
+        rotary2 = 0;
+        rotary3 = 0;
+        rotary4 = 0;
+        rotary5 = 1;
+    }
+    else if(rotary0 == 1 && rotary1 == 0 && rotary2 == 0 && rotary3 == 0 && rotary4 == 0 && rotary5 == 0){
+        rotary0 = 1;
+        rotary1 = 1;
+        rotary2 = 0;
+        rotary3 = 0;
+        rotary4 = 0;
+        rotary5 = 0;
+    }
+    else if(rotary0 == 1 && rotary1 == 1 && rotary2 == 0 && rotary3 == 0 && rotary4 == 0 && rotary5 == 0){
+        rotary0 = 1;
+        rotary1 = 1;
+        rotary2 = 1;
+        rotary3 = 0;
+        rotary4 = 0;
+        rotary5 = 0;
+    }
+    else if(rotary0 == 1 && rotary1 == 1 && rotary2 == 1 && rotary3 == 0 && rotary4 == 0 && rotary5 == 0){
+        rotary0 = 1;
+        rotary1 = 1;
+        rotary2 = 1;
+        rotary3 = 1;
+        rotary4 = 0;
+        rotary5 = 0;
+    }
+    else if(rotary0 == 1 && rotary1 == 1 && rotary2 == 1 && rotary3 == 1 && rotary4 == 0 && rotary5 == 0){
+        rotary0 = 1;
+        rotary1 = 1;
+        rotary2 = 1;
+        rotary3 = 1;
+        rotary4 = 1;
+        rotary5 = 0;
+    }
+    else if(rotary0 == 1 && rotary1 == 1 && rotary2 == 1 && rotary3 == 1 && rotary4 == 1 && rotary5 == 0){
+        rotary0 = 1;
+        rotary1 = 1;
+        rotary2 = 1;
+        rotary3 = 1;
+        rotary4 = 1;
+        rotary5 = 1;
+    }
+    else if(rotary0 == 1 && rotary1 == 1 && rotary2 == 1 && rotary3 == 1 && rotary4 == 1 && rotary5 == 1){
+        rotary0 = 0;
+        rotary1 = 1;
+        rotary2 = 1;
+        rotary3 = 1;
+        rotary4 = 1;
+        rotary5 = 1;
+    }
+    else if(rotary0 == 0 && rotary1 == 1 && rotary2 == 1 && rotary3 == 1 && rotary4 == 1 && rotary5 == 1){
+        rotary0 = 0;
+        rotary1 = 0;
+        rotary2 = 1;
+        rotary3 = 1;
+        rotary4 = 1;
+        rotary5 = 1;
+    }
+    else if(rotary0 == 0 && rotary1 == 0 && rotary2 == 1 && rotary3 == 1 && rotary4 == 1 && rotary5 == 1){
+        rotary0 = 0;
+        rotary1 = 0;
+        rotary2 = 0;
+        rotary3 = 1;
+        rotary4 = 1;
+        rotary5 = 1;
+    }
+    else if(rotary0 == 0 && rotary1 == 0 && rotary2 == 0 && rotary3 == 1 && rotary4 == 1 && rotary5 == 1){
+        rotary0 = 0;
+        rotary1 = 0;
+        rotary2 = 0;
+        rotary3 = 0;
+        rotary4 = 1;
+        rotary5 = 1;
+    }
+    else if(rotary0 == 0 && rotary1 == 0 && rotary2 == 0 && rotary3 == 0 && rotary4 == 1 && rotary5 == 1){
+        rotary0 = 0;
+        rotary1 = 0;
+        rotary2 = 0;
+        rotary3 = 0;
+        rotary4 = 0;
+        rotary5 = 1;
+    }                                 
+    else if(rotary0 == 0 && rotary1 == 0 && rotary2 == 0 && rotary3 == 0 && rotary4 == 0 && rotary5 == 1){
+        rotary0 = 0;
+        rotary1 = 0;
+        rotary2 = 0;
+        rotary3 = 0;
+        rotary4 = 0;
+        rotary5 = 0;
+    }
+    rot_pos_dec();
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+////////////////////////////rot_one_ccw()//////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//Function analyzes current state of rotary digital I/O and increments ccw//
+void rot_one_ccw(){
+    if(rotary0 == 0 && rotary1 == 0 && rotary2 == 0 && rotary3 == 0 && rotary4 == 0 && rotary5 == 0){
+        rotary0 = 0;
+        rotary1 = 0;
+        rotary2 = 0;
+        rotary3 = 0;
+        rotary4 = 0;
+        rotary5 = 1;
+    }
+    else if(rotary0 == 1 && rotary1 == 0 && rotary2 == 0 && rotary3 == 0 && rotary4 == 0 && rotary5 == 0){
+        rotary0 = 0;
+        rotary1 = 0;
+        rotary2 = 0;
+        rotary3 = 0;
+        rotary4 = 0;
+        rotary5 = 0;
+    }
+    else if(rotary0 == 1 && rotary1 == 1 && rotary2 == 0 && rotary3 == 0 && rotary4 == 0 && rotary5 == 0){
+        rotary0 = 1;
+        rotary1 = 0;
+        rotary2 = 0;
+        rotary3 = 0;
+        rotary4 = 0;
+        rotary5 = 0;
+    }
+    else if(rotary0 == 1 && rotary1 == 1 && rotary2 == 1 && rotary3 == 0 && rotary4 == 0 && rotary5 == 0){
+        rotary0 = 1;
+        rotary1 = 1;
+        rotary2 = 0;
+        rotary3 = 0;
+        rotary4 = 0;
+        rotary5 = 0;
+    }
+    else if(rotary0 == 1 && rotary1 == 1 && rotary2 == 1 && rotary3 == 1 && rotary4 == 0 && rotary5 == 0){
+        rotary0 = 1;
+        rotary1 = 1;
+        rotary2 = 1;
+        rotary3 = 0;
+        rotary4 = 0;
+        rotary5 = 0;
+    }
+    else if(rotary0 == 1 && rotary1 == 1 && rotary2 == 1 && rotary3 == 1 && rotary4 == 1 && rotary5 == 0){
+        rotary0 = 1;
+        rotary1 = 1;
+        rotary2 = 1;
+        rotary3 = 1;
+        rotary4 = 0;
+        rotary5 = 0;
+    }
+    else if(rotary0 == 1 && rotary1 == 1 && rotary2 == 1 && rotary3 == 1 && rotary4 == 1 && rotary5 == 1){
+        rotary0 = 1;
+        rotary1 = 1;
+        rotary2 = 1;
+        rotary3 = 1;
+        rotary4 = 1;
+        rotary5 = 0;
+    }
+    else if(rotary0 == 0 && rotary1 == 1 && rotary2 == 1 && rotary3 == 1 && rotary4 == 1 && rotary5 == 1){
+        rotary0 = 1;
+        rotary1 = 1;
+        rotary2 = 1;
+        rotary3 = 1;
+        rotary4 = 1;
+        rotary5 = 1;
+    }
+    else if(rotary0 == 0 && rotary1 == 0 && rotary2 == 1 && rotary3 == 1 && rotary4 == 1 && rotary5 == 1){
+        rotary0 = 0;
+        rotary1 = 1;
+        rotary2 = 1;
+        rotary3 = 1;
+        rotary4 = 1;
+        rotary5 = 1;
+    }
+    else if(rotary0 == 0 && rotary1 == 0 && rotary2 == 0 && rotary3 == 1 && rotary4 == 1 && rotary5 == 1){
+        rotary0 = 0;
+        rotary1 = 0;
+        rotary2 = 1;
+        rotary3 = 1;
+        rotary4 = 1;
+        rotary5 = 1;
+    }
+    else if(rotary0 == 0 && rotary1 == 0 && rotary2 == 0 && rotary3 == 0 && rotary4 == 1 && rotary5 == 1){
+        rotary0 = 0;
+        rotary1 = 0;
+        rotary2 = 0;
+        rotary3 = 1;
+        rotary4 = 1;
+        rotary5 = 1;
+    }                                 
+    else if(rotary0 == 0 && rotary1 == 0 && rotary2 == 0 && rotary3 == 0 && rotary4 == 0 && rotary5 == 1){
+        rotary0 = 0;
+        rotary1 = 0;
+        rotary2 = 0;
+        rotary3 = 0;
+        rotary4 = 1;
+        rotary5 = 1;
+    }
+    rot_pos_inc();    
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////calibrate_rot()/////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//Function rotates cw 24 times gathering return data from photo resistors//
+//Then it sets the threashold (global variable)//
+void calibrate_rot(){   
+    float sum = 0; 
+    rotary0 = 1;
+    rotary1 = 1;
+    rotary2 = 1;
+    rotary3 = 1;
+    rotary4 = 1;
+    rotary5 = 1;    
+    for(int i=0;i<rot_pos;i++){    
+        rotary_threshold[i] = rot_indication.read();
+        rot_one_cw();        
+    }//End of for    
+    //Print rotary_threshold[i] to file//
+    FILE *fp5= fopen("/local/rotary.txt", "w");
+    for(int i=0;i<rot_pos;i++) {
+        fprintf(fp5,"%f\r\n",rotary_threshold[i]);
+    }//End of for//
+    fclose(fp5);
+    //Calculate Threash//    
+    for(int i=0;i<rot_pos;i++){
+        sum = sum + rotary_threshold[i];
+    }//End of for
+    //Print Threash to file//
+    threash = sum/rot_pos;
+    FILE *fp6= fopen("/local/threash.txt", "w");
+        fprintf(fp6,"%f\r\n",threash);
+    fclose(fp6);    
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+/////////////////////////get_user_angle()//////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//This function accepts an int and returns an int... the int value represents//
+//a desired angle...this returns the nearest angle within 15 degrees//
+int get_user_angle(int desired_angle){
+    int angle = -1;
+        if(desired_angle <= 0){
+            angle = 0;
+        }
+        else if(desired_angle > 0 && desired_angle < (0+7.5)){
+            angle = 0;
+        }
+        else if(desired_angle >= (0+7.5) && desired_angle <= 15){
+            angle = 15;
+        }
+        else if(desired_angle > 15 && desired_angle < (15+7.5)){
+            angle = 15;
+        }
+        else if(desired_angle >= (15+7.5) && desired_angle <= 30){
+            angle = 30;
+        }
+        else if(desired_angle > 30 && desired_angle < (30+7.5)){
+            angle = 30;
+        }
+        else if(desired_angle >= (30+7.5) && desired_angle <= 45){
+            angle = 45;
+        }
+        else if(desired_angle > 45 && desired_angle < (45+7.5)){
+            angle = 45;
+        }
+        else if(desired_angle >= (45+7.5) && desired_angle <= 60){
+            angle = 60;
+        }
+        else if(desired_angle > 60 && desired_angle < (60+7.5)){
+            angle = 60;
+        }
+        else if(desired_angle >= (60+7.5) && desired_angle <= 75){
+            angle = 75;
+        }   
+        else if(desired_angle > 75 && desired_angle < (75+7.5)){
+            angle = 75;
+        }
+        else if(desired_angle >= (75+7.5) && desired_angle <= 90){
+            angle = 90;
+        }
+        else if(desired_angle > 90 && desired_angle < (90+7.5)){
+            angle = 90;
+        }
+        else if(desired_angle >= (90+7.5) && desired_angle <= 105){
+            angle = 105;
+        }
+        else if(desired_angle > 105 && desired_angle < (105+7.5)){
+            angle = 105;
+        }
+        else if(desired_angle >= (105+7.5) && desired_angle <= 120){
+            angle = 120;
+        }
+        else if(desired_angle > 120 && desired_angle < (120+7.5)){
+            angle = 120;
+        }
+        else if(desired_angle >= (120+7.5) && desired_angle <= 135){
+            angle = 135;
+        }
+        else if(desired_angle > 135 && desired_angle < (135+7.5)){
+            angle = 135;
+        }
+        else if(desired_angle >= (135+7.5) && desired_angle <= 150){
+            angle = 150;
+        }
+        else if(desired_angle > 150 && desired_angle < (150+7.5)){
+            angle = 150;
+        }
+        else if(desired_angle >= (150+7.5) && desired_angle <= 165){
+            angle = 165;
+        }
+        else if(desired_angle > 165 && desired_angle < (165+7.5)){
+            angle = 165;
+        }
+        else if(desired_angle >= (165+7.5) && desired_angle <= 180){
+            angle = 180;
+        }
+        else if(desired_angle > 180 && desired_angle < (180+7.5)){
+            angle = 180;
+        }
+        else if(desired_angle >= (180+7.5) && desired_angle <= 195){
+            angle = 195;
+        }
+        else if(desired_angle > 195 && desired_angle < (195+7.5)){
+            angle = 195;
+        }
+        else if(desired_angle >= (195+7.5) && desired_angle <= 210){
+            angle = 210;
+        }
+        else if(desired_angle > 210 && desired_angle < (210+7.5)){
+            angle = 210;
+        }
+        else if(desired_angle >= (210+7.5) && desired_angle <= 225){
+            angle = 225;
+        }
+        else if(desired_angle > 225 && desired_angle < (225+7.5)){
+            angle = 225;
+        }
+        else if(desired_angle >= (225+7.5) && desired_angle <= 240){
+            angle = 240;
+        }
+        else if(desired_angle > 240 && desired_angle < (240+7.5)){
+            angle = 240;
+        }
+        else if(desired_angle >= (240+7.5) && desired_angle <= 255){
+            angle = 255;
+        }
+        else if(desired_angle > 255 && desired_angle < (255+7.5)){
+            angle = 255;
+        }
+        else if(desired_angle >= (255+7.5) && desired_angle <= 270){
+            angle = 270;
+        }
+        else if(desired_angle > 270 && desired_angle < (270+7.5)){
+            angle = 270;
+        }
+        else if(desired_angle >= (270+7.5) && desired_angle <= 285){
+            angle = 285;
+        }
+        else if(desired_angle > 285 && desired_angle < (285+7.5)){
+            angle = 285;
+        }
+        else if(desired_angle >= (285+7.5) && desired_angle <= 300){
+            angle = 300;
+        }
+        else if(desired_angle > 300 && desired_angle < (300+7.5)){
+            angle = 300;
+        }   
+        else if(desired_angle >= (300+7.5) && desired_angle <= 315){
+            angle = 315;
+        }
+        else if(desired_angle > 315 && desired_angle < (315+7.5)){
+            angle = 315;
+        }
+        else if(desired_angle >= (315+7.5) && desired_angle <= 330){
+            angle = 330;
+        }
+        else if(desired_angle > 330 && desired_angle < (330+7.5)){
+            angle = 330;
+        }
+        else if(desired_angle >= (330+7.5) && desired_angle <= 345){
+            angle = 345;
+        }
+        else if(desired_angle > 345 && desired_angle < (345+7.5)){
+            angle = 345;
+        }
+        else if(desired_angle >= (345+7.5) && desired_angle <= 360){
+            angle = 0;
+        }
+        else if(desired_angle > 360){
+            angle = 0;
+        }
+        else{
+            xbee.printf("\r\nAngle input was not understandable");        
+        }
+    return(angle);
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////go_to_angle()///////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//Function accepts an angle then rotates the forcer to said angle//
+void go_to_angle(int angle){
+    while(rot_position != angle){
+        if(rot_position - angle == 0){
+            return;
+        }//End of if
+        else if(rot_position - angle > 0){
+            rot_one_cw();            
+        }//End of else if
+        else if(rot_position - angle < 0){
+            rot_one_ccw();
+        }//End of else if
+    }
+    return;
+}//End of function
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////rot_pos_inc()///////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+void rot_pos_inc(){
+    if(zero.read() > threash){
+        rot_position = 0;
+        return;
+    }//End of if//
+    else if(zero.read() < threash){
+        rot_position = rot_position + rot_step;
+    }//End of else if//    
+}//End of fucntion
+
+///////////////////////////////////////////////////////////////////////////////
+////////////////////////////rot_pos_dec()//////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+void rot_pos_dec(){
+        if(zero.read() > threash){
+        rot_position = 0;
+        return;
+    }//End of if//
+    else if(zero.read() < threash){
+        rot_position = rot_position - rot_step;
+    }//End of else if//     
+}//End of function
\ No newline at end of file