Joystick controlando 3 motores

Dependencies:   mbed X_NUCLEO_IHM01A1

Revision:
31:3aae82e6353c
Parent:
29:526970c1d998
Child:
32:74a4c733c11b
--- a/main.cpp	Mon Mar 13 17:47:32 2017 +0000
+++ b/main.cpp	Wed Apr 24 14:14:04 2019 +0000
@@ -1,42 +1,3 @@
-/**
- ******************************************************************************
- * @file    main.cpp
- * @author  Davide Aliprandi, STMicroelectronics
- * @version V1.0.0
- * @date    October 14th, 2015
- * @brief   mbed test application for the STMicroelectronics X-NUCLEO-IHM01A1
- *          Motor Control Expansion Board: control of 2 motors.
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *   2. Redistributions in binary form must reproduce the above copyright notice,
- *      this list of conditions and the following disclaimer in the documentation
- *      and/or other materials provided with the distribution.
- *   3. Neither the name of STMicroelectronics nor the names of its contributors
- *      may be used to endorse or promote products derived from this software
- *      without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-
 /* Includes ------------------------------------------------------------------*/
 
 /* mbed specific header files. */
@@ -52,7 +13,8 @@
 /* Definitions ---------------------------------------------------------------*/
 
 /* Number of steps. */
-#define STEPS 3200
+#define STEPS 2400
+
 
 /* Delay in milliseconds. */
 #define DELAY_1 2000
@@ -65,6 +27,12 @@
 #define SPEED_1 2400
 #define SPEED_2 1200
 
+/* Joystick */
+
+#define T_MS 500                                 // Define the time between reads
+#define VRx A0                                   // Define the input pin for VRx pin
+#define VRy A1                                   // Define the input pin for VRy pin
+#define SW D5                                    // Define the input pin for SW pin
 
 /* Variables -----------------------------------------------------------------*/
 
@@ -72,13 +40,7 @@
 L6474 *motor1;
 L6474 *motor2;
 
-
-/* Main ----------------------------------------------------------------------*/
-
-int main()
-{
-    /*----- Initialization. -----*/
-
+int main(){   
     /* Initializing SPI bus. */
     DevSPI dev_spi(D11, D12, D13);
 
@@ -92,213 +54,61 @@
         exit(EXIT_FAILURE);
     }
 
-    /* Printing to the console. */
-    printf("Motor Control Application Example for 2 Motors\r\n\n");
-
-
-    /*----- Moving. -----*/
-
-    /* Printing to the console. */
-    printf("--> Moving forward: M1 %d steps, M2 %d steps.\r\n", STEPS >> 1, STEPS);
-
-    /* Moving N steps in the forward direction. */
-    motor1->move(StepperMotor::FWD, STEPS >> 1);
-    motor2->move(StepperMotor::FWD, STEPS);
-
-    /* Waiting while the motor is active. */
-    motor1->wait_while_active();
-    motor2->wait_while_active();
-
-    /* Getting current position. */
-    int position1 = motor1->get_position();
-    int position2 = motor2->get_position();
-    
-    /* Printing to the console. */
-    printf("    Position: M1 %d, M2 %d.\r\n", position1, position2);
-
-    /* Waiting 2 seconds. */
-    wait_ms(DELAY_1);
-
-    
-    /*----- Moving. -----*/
-    
-    /* Printing to the console. */
-    printf("--> Moving backward: M1 %d steps, M2 %d steps.\r\n", STEPS >> 1, STEPS);
-
-    
-    /* Moving N steps in the backward direction. */
-    motor1->move(StepperMotor::BWD, STEPS >> 1);
-    motor2->move(StepperMotor::BWD, STEPS);
-    
-    /* Waiting while the motor is active. */
-    motor1->wait_while_active();
-    motor2->wait_while_active();
-
-    /* Getting current position. */
-    position1 = motor1->get_position();
-    position2 = motor2->get_position();
+    AnalogIn x_axis(VRx);                       // Create the analog x movement object
+    AnalogIn y_axis(VRy);                       // Create the analog y movement object
+    DigitalIn button(SW, PullUp);               // Create the digital button object and setup internall pull-up resistor
+ 
+    while(1)
+    {   
+        printf("\n");
+        printf("\n X axis: %f", x_axis.read()); // Show the value of the X axis (0.0 to 1.0)
+//        x = x_axis.read();
+        printf("\n Y axis: %f", y_axis.read()); // Show the value of the Y axis (0.0 to 1.0)
+//        y = y_axis.read();
+        printf("\n Button: %d", button.read()); // Show the button status (0 is pressed, 1 is not pressed)
+        
+        wait_ms(T_MS);                          // Wait time between reads
+        printf("Motor Control Application Example for 2 Motors\r\n\n");
     
-    /* Printing to the console. */
-    printf("    Position: M1 %d, M2 %d.\r\n", position1, position2);
-    printf("--> Setting Home.\r\n");
-
-    /* Setting the current position to be the home position. */
-    motor1->set_home();
-    motor2->set_home();
-
-    /* Waiting 2 seconds. */
-    wait_ms(DELAY_1);
-
-
-    /*----- Going to a specified position. -----*/
-
-    /* Printing to the console. */
-    printf("--> Going to position: M1 %d, M2 %d.\r\n", STEPS, STEPS >> 1);
     
-    /* Requesting to go to a specified position. */
-    motor1->go_to(STEPS);
-    motor2->go_to(STEPS >> 1);
-    
-    /* Waiting while the motor is active. */
-    motor1->wait_while_active();
-    motor2->wait_while_active();
-
-    /* Getting current position. */
-    position1 = motor1->get_position();
-    position2 = motor2->get_position();
-    
-    /* Printing to the console. */
-    printf("    Position: M1 %d, M2 %d.\r\n", position1, position2);
-    
-    /* Waiting 2 seconds. */
-    wait_ms(DELAY_1);
-
-    
-    /*----- Going Home. -----*/
-
-    /* Printing to the console. */
-    printf("--> Going Home.\r\n");
-    
-    /* Requesting to go to home. */
-    motor1->go_home();
-    motor2->go_home();
-    
-    /* Waiting while the motor is active. */
-    motor1->wait_while_active();
-    motor2->wait_while_active();
-
-    /* Getting current position. */
-    position1 = motor1->get_position();
-    position2 = motor2->get_position();
-
-    /* Printing to the console. */
-    printf("    Position: M1 %d, M2 %d.\r\n", position1, position2);
-
-    /* Waiting 2 seconds. */
-    wait_ms(DELAY_1);
+        /*----- Movendo pra frente -----*/
 
-
-    /*----- Running. -----*/
-
-    /* Printing to the console. */
-    printf("--> M1 running backward, M2 running forward.\r\n");
-
-    /* Requesting to run backward. */
-    motor1->run(StepperMotor::BWD);
-    motor2->run(StepperMotor::FWD);
-
-    /* Waiting until delay has expired. */
-    wait_ms(DELAY_2);
-
-    /* Getting current speed. */
-    int speed1 = motor1->get_speed();
-    int speed2 = motor2->get_speed();
-
-    /* Printing to the console. */
-    printf("    Speed: M1 %d, M2 %d.\r\n", speed1, speed2);
-
-    /*----- Increasing the speed while running. -----*/
-
-    /* Printing to the console. */
-    printf("--> Increasing the speed while running.\r\n");
-
-    /* Increasing the speed. */
-    motor1->set_max_speed(SPEED_1);
-    motor2->set_max_speed(SPEED_1);
-
-    /* Waiting until delay has expired. */
-    wait_ms(DELAY_2);
-
-    /* Getting current speed. */
-    speed1 = motor1->get_speed();
-    speed2 = motor2->get_speed();
-
-    /* Printing to the console. */
-    printf("    Speed: M1 %d, M2 %d.\r\n", speed1, speed2);
-
-
-    /*----- Decreasing the speed while running. -----*/
-
-    /* Printing to the console. */
-    printf("--> Decreasing the speed while running.\r\n");
-
-    /* Decreasing the speed. */
-    motor1->set_max_speed(SPEED_2);
-    motor2->set_max_speed(SPEED_2);
-
-    /* Waiting until delay has expired. */
-    wait_ms(DELAY_3);
-
-    /* Getting current speed. */
-    speed1 = motor1->get_speed();
-    speed2 = motor2->get_speed();
-
-    /* Printing to the console. */
-    printf("    Speed: M1 %d, M2 %d.\r\n", speed1, speed2);
-
-
-    /*----- Requiring hard-stop while running. -----*/
-
-    /* Printing to the console. */
-    printf("--> Requiring hard-stop while running.\r\n");
-
-    /* Requesting to immediatly stop. */
-    motor1->hard_stop();
-    motor2->hard_stop();
-
-    /* Waiting while the motor is active. */
-    motor1->wait_while_active();
-    motor2->wait_while_active();
-
-    /* Waiting 2 seconds. */
-    wait_ms(DELAY_1);
-
-
-    /*----- Infinite Loop. -----*/
-
-    /* Printing to the console. */
-    printf("--> Infinite Loop...\r\n");
-
-    /* Setting the current position to be the home position. */
-    motor1->set_home();
-    motor2->set_home();
-
-    /* Infinite Loop. */
-    while(true) {
-        /* Requesting to go to a specified position. */
-        motor1->go_to(STEPS >> 1);
-        motor2->go_to(- (STEPS >> 1));
-
-        /* Waiting while the motor is active. */
-        motor1->wait_while_active();
-        motor2->wait_while_active();
-
-        /* Requesting to go to a specified position. */
-        motor1->go_to(- (STEPS >> 1));
-        motor2->go_to(STEPS >> 1);
-
-        /* Waiting while the motor is active. */
-        motor1->wait_while_active();
-        motor2->wait_while_active();
+        /* Printing to the console. */
+        printf("--> Moving forward: M1 %d steps, M2 %d steps.\r\n", STEPS >> 1, STEPS);
+        if (x_axis.read()>0.6){
+            /* Moving N steps in the forward direction. */
+            motor1->run(StepperMotor::FWD);
+            motor1->wait_while_active();
+            }
+        else if (y_axis.read()>0.6){
+            motor2->run(StepperMotor::FWD);
+            motor2->wait_while_active();
+            }
+    
+        int position1 = motor1->get_position();
+        int position2 = motor2->get_position();
+        printf("    Position: M1 %d, M2 %d.\r\n", position1, position2);
+    
+        /*----- Movendo pra trás -----*/
+    
+        if (x_axis.read()<0.4){
+            /* Moving N steps in the backward direction. */
+            printf("--> Moving X backward: M1 %d steps, M2 %d steps.\r\n", STEPS >> 1, STEPS);
+            motor1->run(StepperMotor::BWD);
+            }
+        else if (y_axis.read()<0.4){
+            printf("--> Moving Y backward: M1 %d steps, M2 %d steps.\r\n", STEPS >> 1, STEPS);
+            motor2->run(StepperMotor::BWD);
+            }
+        else{
+            soft_stop()
+            }
+    
+        /* Getting current position. */
+        position1 = motor1->get_position();
+        position2 = motor2->get_position();
+        
+        /* Printing to the console. */
+        printf("    Position: M1 %d, M2 %d.\r\n", position1, position2);
     }
-}
+}
\ No newline at end of file