Smartphone app control stepper motors via bluetooth low energy(BLE) on stm32F401RE x IHM02A1 x IDB05A1.

Dependencies:   BLE_API X_NUCLEO_IDB0XA1 X_NUCLEO_IHM02A1 mbed

Fork of BLE_LED_IDB0XA1_demo by NEHSROBOT

Files at this revision

API Documentation at this revision

Comitter:
yong304
Date:
Fri Feb 23 08:12:54 2018 +0000
Parent:
10:21eecb227c05
Commit message:
20180223

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 21eecb227c05 -r 6deabd374c96 main.cpp
--- a/main.cpp	Tue Feb 06 07:51:55 2018 +0000
+++ b/main.cpp	Fri Feb 23 08:12:54 2018 +0000
@@ -24,6 +24,7 @@
 void BWD();
 void LEFT();
 void RIGHT();
+void SOFTSTOP();
 /* Expansion Board specific header files. */
 #include "XNucleoIHM02A1.h"
 
@@ -115,7 +116,7 @@
 
 
 /* Motor Control Expansion Board. */
-XNucleoIHM02A1* x_nucleo_ihm02a1 = new XNucleoIHM02A1(&init[0], &init[1], A4, A5, D4, A2, &dev_spi);
+XNucleoIHM02A1* x_nucleo_ihm02a1 = new XNucleoIHM02A1(&init[0], &init[1], A4, A5, D4, D10, &dev_spi);
 
 DigitalOut actuatedLED(LED2);
 const static char     DEVICE_NAME[] = "mydevice";    //   CHANGE NAME
@@ -138,21 +139,29 @@
 void onDataWrittenCallback(const GattWriteCallbackParams *params) {
     if ((params->handle == ledServicePtr->getValueHandle()) && (params->len == 1)) {
         
-        if (  *(params->data)== 0x00 ) 
+        if (  *(params->data)== 0x41 ) 
         {    
-            actuatedLED=0      ;
-            wait(0.5)            ;
             actuatedLED=1      ;
-            wait(0.5)            ;
+            FWD();
+        }
+        else if (*(params->data)== 0x42)  
+        { 
             actuatedLED=0      ;
-            wait(0.5)            ;
+            //SOFTSTOP();
+
+        }
+        else if (*(params->data)== 0x43)  
+        { 
             actuatedLED=1      ;
-            wait(0.5)            ;
+            //FWD();
+
+
+        }
+        else if (*(params->data)== 0x44)  
+        { 
             actuatedLED=0      ;
-            wait(0.5)            ;
-            actuatedLED=1      ;
-            wait(0.5)            ;
-            actuatedLED=0      ;
+            wait(0.1)          ;
+            BWD();
         }
         else if (*(params->data)== 0x01)  
         { 
@@ -237,14 +246,14 @@
 
     /* Building a list of motor control components. */
     L6470 **motors = x_nucleo_ihm02a1->get_components();
-    motors[0]->set_home(); 
+   //otors[0]->set_home(); 
 
     /* Getting the current position. */
-    int position = motors[0]->get_position();
+    //t position = motors[0]->get_position();
 
-        /* Preparing each motor to perform a run at a specified speed. */
+    /* 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);
+        motors[m]->prepare_run(StepperMotor::FWD, 400);
     }
 
     /* Performing the action on each motor at the same time. */
@@ -252,6 +261,7 @@
     
     /* Waiting while active. */
     motors[0]->wait_while_active();
+    motors[1]->wait_while_active();
 }
 
 void BWD()
@@ -259,10 +269,10 @@
 
     /* Building a list of motor control components. */
     L6470 **motors = x_nucleo_ihm02a1->get_components();
-    motors[0]->set_home(); 
+ // motors[0]->set_home(); 
 
     /* Getting the current position. */
-    int position = motors[0]->get_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++) {
@@ -274,16 +284,17 @@
     
     /* Waiting while active. */
     motors[0]->wait_while_active();
+    motors[1]->wait_while_active();
 }
 void LEFT()
 {
 
     /* Building a list of motor control components. */
     L6470 **motors = x_nucleo_ihm02a1->get_components();
-    motors[0]->set_home(); 
+ // motors[0]->set_home(); 
 
     /* Getting the current position. */
-    int position = motors[0]->get_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);
@@ -294,16 +305,17 @@
     
     /* Waiting while active. */
     motors[0]->wait_while_active();
+    motors[1]->wait_while_active();
 }
 void RIGHT()
 {
 
     /* Building a list of motor control components. */
     L6470 **motors = x_nucleo_ihm02a1->get_components();
-    motors[0]->set_home(); 
+ // motors[0]->set_home(); 
 
     /* Getting the current position. */
-    int position = motors[0]->get_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);
@@ -314,4 +326,19 @@
     
     /* Waiting while active. */
     motors[0]->wait_while_active();
-}
\ No newline at end of file
+    motors[1]->wait_while_active();
+}
+void SOFTSTOP()
+{
+    
+    /* Building a list of motor control components. */
+    L6470 **motors = x_nucleo_ihm02a1->get_components();
+    /* Preparing each motor to perform a hard stop. */
+    for (int m = 0; m < L6470DAISYCHAINSIZE; m++) {
+        motors[m]->prepare_soft_stop();
+    }
+
+    /* Performing the action on each motor at the same time. */
+    x_nucleo_ihm02a1->perform_prepared_actions();
+
+    }
\ No newline at end of file