20180223

Dependencies:   BLE_API X_NUCLEO_IDB0XA1 X_NUCLEO_IHM02A1 mbed

Fork of Motor_Ble_v1 by NEHSROBOT

Revision:
10:21eecb227c05
Parent:
9:ef9b37e2464f
Child:
11:6deabd374c96
--- a/main.cpp	Sun Feb 04 06:55:45 2018 +0000
+++ b/main.cpp	Tue Feb 06 07:51:55 2018 +0000
@@ -17,17 +17,20 @@
  /* Includes ------------------------------------------------------------------*/
 
 
+
 /* Helper header files. */
 #include "DevSPI.h"
-
-
+void FWD();
+void BWD();
+void LEFT();
+void RIGHT();
 /* Expansion Board specific header files. */
 #include "XNucleoIHM02A1.h"
 
 #include "mbed.h"
 #include "ble/BLE.h"
 #include "LEDService.h"
-#include "BlueNRGDevice.h"
+
 
 /* Definitions ---------------------------------------------------------------*/
 
@@ -42,18 +45,15 @@
 #define DELAY_1 1000
 #define DELAY_2 2000
 #define DELAY_3 5000
-void call3();
 
 #ifdef TARGET_STM32F401
     DevSPI dev_spi(PB_15, PB_14, PB_13);
 #else
     DevSPI dev_spi(PB_15, PB_14, PB_13);
 #endif
-
+ 
 /* Variables -----------------------------------------------------------------*/
 
-/* Motor Control Expansion Board. */
-
 /* Initialization parameters of the motors connected to the expansion board. */
 L6470_init_t init[L6470DAISYCHAINSIZE] = {
     /* First Motor. */
@@ -113,7 +113,9 @@
     }
 };
 
-XNucleoIHM02A1 *x_nucleo_ihm02a1= new XNucleoIHM02A1(&init[0], &init[1], A4, A5, D4, A2, &dev_spi);
+
+/* Motor Control Expansion Board. */
+XNucleoIHM02A1* x_nucleo_ihm02a1 = new XNucleoIHM02A1(&init[0], &init[1], A4, A5, D4, A2, &dev_spi);
 
 DigitalOut actuatedLED(LED2);
 const static char     DEVICE_NAME[] = "mydevice";    //   CHANGE NAME
@@ -127,7 +129,6 @@
     BLE::Instance().gap().startAdvertising(); // restart advertising
 }
 
-
 /**
  * This callback allows the LEDService to receive updates to the ledState Characteristic.
  *
@@ -136,20 +137,9 @@
  */
 void onDataWrittenCallback(const GattWriteCallbackParams *params) {
     if ((params->handle == ledServicePtr->getValueHandle()) && (params->len == 1)) {
- 
+        
         if (  *(params->data)== 0x00 ) 
         {    
-            actuatedLED=1     ;
-           call3();
-              
-            actuatedLED=0     ;wait(0.5)            ;
-            actuatedLED=1     ;wait(0.5)            ;
-            actuatedLED=0     ;wait(0.5)            ;
-
-              
-        }
-        else if (*(params->data)== 0x01)  
-        { 
             actuatedLED=0      ;
             wait(0.5)            ;
             actuatedLED=1      ;
@@ -159,26 +149,29 @@
             actuatedLED=1      ;
             wait(0.5)            ;
             actuatedLED=0      ;
-            
-        }
-        else if (*(params->data)== 0x02)  {
-            actuatedLED=1      ;
-            wait(0.5)            ;
-            actuatedLED=0      ;
-            wait(0.5)            ;
-            actuatedLED=1      ;
-        }
-          else if (*(params->data)== 0x03)  {
-           actuatedLED=1      ;
-            wait(0.5)            ;
-            actuatedLED=0      ;
             wait(0.5)            ;
             actuatedLED=1      ;
             wait(0.5)            ;
             actuatedLED=0      ;
-            wait(0.5)            ;
+        }
+        else if (*(params->data)== 0x01)  
+        { 
+            actuatedLED=1      ;
+            FWD();
+        }
+        else if (*(params->data)== 0x02)  {
             actuatedLED=1      ;
+            BWD();
         }
+        else if (*(params->data)== 0x03)  {
+            actuatedLED=1      ;
+            RIGHT();
+        }
+        else if (*(params->data)== 0x04)  {
+            actuatedLED=1      ;
+            LEFT();
+        }
+           
    
     }
  
@@ -203,7 +196,7 @@
     if (error != BLE_ERROR_NONE) {
         /* In case of error, forward the error handling to onBleInitError */
         onBleInitError(ble, error);
-       return;
+        return;
     }
 
     /* Ensure that it is the default instance of BLE */
@@ -238,24 +231,87 @@
     ble.init(bleInitComplete); 
  
 }
+  
+void FWD()
+{
 
-void call3()
-{
     /* Building a list of motor control components. */
     L6470 **motors = x_nucleo_ihm02a1->get_components();
-   motors[0]->set_home(); 
-    /* Waiting. */
-    wait_ms(DELAY_1);
+    motors[0]->set_home(); 
+
+    /* Getting the current position. */
+    int position = motors[0]->get_position();
+
+        /* Preparing each motor to perform a run at a specified speed. */
+    for (int m = 0; m < L6470DAISYCHAINSIZE; m++) {
+        motors[m]->prepare_move(StepperMotor::FWD, 25600);
+    }
+
+    /* Performing the action on each motor at the same time. */
+    x_nucleo_ihm02a1->perform_prepared_actions();
+    
+    /* Waiting while active. */
+    motors[0]->wait_while_active();
+}
+
+void BWD()
+{
+
+    /* Building a list of motor control components. */
+    L6470 **motors = x_nucleo_ihm02a1->get_components();
+    motors[0]->set_home(); 
 
     /* Getting the current position. */
     int position = motors[0]->get_position();
 
-    /* Waiting. */
-    wait_ms(DELAY_1);
+        /* Preparing each motor to perform a run at a specified speed. */
+    for (int m = 0; m < L6470DAISYCHAINSIZE; m++) {
+        motors[m]->prepare_move(StepperMotor::BWD, 25600);
+    }
+
+    /* Performing the action on each motor at the same time. */
+    x_nucleo_ihm02a1->perform_prepared_actions();
+    
+    /* Waiting while active. */
+    motors[0]->wait_while_active();
+}
+void LEFT()
+{
+
+    /* Building a list of motor control components. */
+    L6470 **motors = x_nucleo_ihm02a1->get_components();
+    motors[0]->set_home(); 
+
+    /* Getting the current position. */
+    int position = motors[0]->get_position();
+
+        /* Preparing each motor to perform a run at a specified speed. */
+    motors[0]->prepare_move(StepperMotor::FWD, 25600);
+    motors[1]->prepare_move(StepperMotor::BWD, 25600);
 
-    /* Moving. */
-    motors[0]->move(StepperMotor::FWD, STEPS_1);
+    /* Performing the action on each motor at the same time. */
+    x_nucleo_ihm02a1->perform_prepared_actions();
     
-    }
+    /* Waiting while active. */
+    motors[0]->wait_while_active();
+}
+void RIGHT()
+{
+
+    /* Building a list of motor control components. */
+    L6470 **motors = x_nucleo_ihm02a1->get_components();
+    motors[0]->set_home(); 
+
+    /* Getting the current position. */
+    int position = motors[0]->get_position();
+
+        /* Preparing each motor to perform a run at a specified speed. */
+    motors[1]->prepare_move(StepperMotor::FWD, 25600);
+    motors[0]->prepare_move(StepperMotor::BWD, 25600);
+
+    /* Performing the action on each motor at the same time. */
+    x_nucleo_ihm02a1->perform_prepared_actions();
     
-
+    /* Waiting while active. */
+    motors[0]->wait_while_active();
+}
\ No newline at end of file