Test
Dependencies: X_NUCLEO_IHM02A1 mbed
Fork of HelloWorld_IHM02A1 by
Revision 20:64b4bb57c3c6, committed 2018-05-10
- Comitter:
- Robby
- Date:
- Thu May 10 02:12:07 2018 +0000
- Parent:
- 19:eeb4796d6a03
- Commit message:
- Test
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r eeb4796d6a03 -r 64b4bb57c3c6 main.cpp --- a/main.cpp Fri Apr 08 13:02:44 2016 +0000 +++ b/main.cpp Thu May 10 02:12:07 2018 +0000 @@ -48,6 +48,8 @@ /* Expansion Board specific header files. */ #include "x_nucleo_ihm02a1_class.h" +/* String libraries for splitting commands*/ +#include <string.h> /* Definitions ---------------------------------------------------------------*/ @@ -55,7 +57,7 @@ #define MPR_1 4 /* Number of steps. */ -#define STEPS_1 (400 * 128) /* 1 revolution given a 400 steps motor configured at 1/128 microstep mode. */ +#define STEPS_1 (200 * 128) /* 1 revolution given a 400 steps motor configured at 1/128 microstep mode. */ #define STEPS_2 (STEPS_1 * 2) /* Delay in milliseconds. */ @@ -66,6 +68,9 @@ /* Variables -----------------------------------------------------------------*/ +/* Serial port to USB*/ +Serial pc(USBTX,USBRX);//tx, rx + /* Motor Control Expansion Board. */ X_NUCLEO_IHM02A1 *x_nucleo_ihm02a1; @@ -74,16 +79,16 @@ { /* First Motor. */ { - 9.0, /* Motor supply voltage in V. */ - 400, /* Min number of steps per revolution for the motor. */ - 1.7, /* Max motor phase voltage in A. */ - 3.06, /* Max motor phase voltage in V. */ - 300.0, /* Motor initial speed [step/s]. */ - 500.0, /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */ - 500.0, /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */ - 992.0, /* Motor maximum speed [step/s]. */ + 12.0, /* Motor supply voltage in V. */ + 200, /* Min number of steps per revolution for the motor. */ + 0.5, /* Max motor phase voltage in A. */ + 5.06, /* Max motor phase voltage in V. */ + 200.0, /* Motor initial speed [step/s]. */ + 300.0, /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */ + 300.0, /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */ + 400.0, /* Motor maximum speed [step/s]. */ 0.0, /* Motor minimum speed [step/s]. */ - 602.7, /* Motor full-step speed threshold [step/s]. */ + 800, /* Motor full-step speed threshold [step/s]. */ 3.06, /* Holding kval [V]. */ 3.06, /* Constant speed kval [V]. */ 3.06, /* Acceleration starting kval [V]. */ @@ -102,16 +107,16 @@ /* Second Motor. */ { - 9.0, /* Motor supply voltage in V. */ - 400, /* Min number of steps per revolution for the motor. */ - 1.7, /* Max motor phase voltage in A. */ - 3.06, /* Max motor phase voltage in V. */ - 300.0, /* Motor initial speed [step/s]. */ - 500.0, /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */ - 500.0, /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */ - 992.0, /* Motor maximum speed [step/s]. */ + 12.0, /* Motor supply voltage in V. */ + 200, /* Min number of steps per revolution for the motor. */ + 0.5, /* Max motor phase voltage in A. */ + 5.06, /* Max motor phase voltage in V. */ + 200.0, /* Motor initial speed [step/s]. */ + 300.0, /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */ + 300.0, /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */ + 400.0, /* Motor maximum speed [step/s]. */ 0.0, /* Motor minimum speed [step/s]. */ - 602.7, /* Motor full-step speed threshold [step/s]. */ + 800, /* Motor full-step speed threshold [step/s]. */ 3.06, /* Holding kval [V]. */ 3.06, /* Constant speed kval [V]. */ 3.06, /* Acceleration starting kval [V]. */ @@ -128,297 +133,501 @@ 0x2E88 /* Ic configuration. */ } }; + +DigitalIn enable(PA_8); +/* Building a list of motor control components. */ +//L6470 **motors = x_nucleo_ihm02a1->GetComponents(); +L6470 **motors; +void highZ(){ + /* Preparing each motor to set High Impedance State. */ + for (int m = 0; m < L6470DAISYCHAINSIZE; m++) + motors[m]->PrepareHardHiZ(); + + /* Performing the action on each motor at the same time. */ + x_nucleo_ihm02a1->PerformPreparedActions(); +} + +void hardStop(int motor){ + // /*----- Hard Stop. -----*/ +// + /* Printing to the console. */ +// pc.printf("--> Hard Stop.\r\n"); + + /* Preparing each motor to perform a hard stop. */ +// for (int m = 0; m < L6470DAISYCHAINSIZE; m++) + motors[motor]->PrepareHardStop(); + + /* Performing the action on each motor at the same time. */ + x_nucleo_ihm02a1->PerformPreparedActions(); + + highZ(); + /* Waiting. */ +// wait_ms(DELAY_2); +} + +void stopAllMotors(){ + /* Preparing each motor to perform a hard stop. */ + for (int m = 0; m < L6470DAISYCHAINSIZE; m++) + motors[m]->PrepareHardStop(); + + /* Performing the action on each motor at the same time. */ + x_nucleo_ihm02a1->PerformPreparedActions(); + + highZ(); +} + +void setHome(int motor){ + motors[motor]->SetHome(); +} + +int getPosition(int motor){ + int position = motors[motor]->GetPosition(); + return position; +} + +void moveSteps(int motor, int steps){ + + if(steps < 0) + motors[motor]->Move(StepperMotor::BWD, steps*-1); + else + motors[motor]->Move(StepperMotor::FWD, steps); + motors[motor]->WaitWhileActive(); + hardStop(motor); +} + +void runAtSpeed(int motor, int speed){ + if(speed < 0) + motors[motor]->PrepareRun(StepperMotor::BWD, speed*-1); + else if(speed > 0) + motors[motor]->PrepareRun(StepperMotor::FWD, speed); + else{ + hardStop(motor); + return; + } + /* Performing the action on each motor at the same time. */ + x_nucleo_ihm02a1->PerformPreparedActions(); +} + +void moveInSync(int steps){ + if(steps < 0){ + motors[0]->PrepareMove(StepperMotor::BWD, steps*-1); + motors[1]->PrepareMove(StepperMotor::BWD, steps*-1); + } + else if(steps > 0){ + motors[0]->PrepareMove(StepperMotor::FWD, steps); + motors[1]->PrepareMove(StepperMotor::FWD, steps); + } + x_nucleo_ihm02a1->PerformPreparedActions(); + motors[0]->WaitWhileActive(); + motors[1]->WaitWhileActive(); +} + +void goXRHome(int speed){ + //while not pushing button move motor to the left? + motors[0]->PrepareRun(StepperMotor::BWD, speed); + motors[1]->PrepareRun(StepperMotor::BWD, speed); + + x_nucleo_ihm02a1->PerformPreparedActions(); + +// while( + wait_ms(5000); + + stopAllMotors(); +} + +void goHome(int motor, int speed){ + //while not pushing button move motor to the left? + motors[motor]->PrepareRun(StepperMotor::BWD, speed); + + x_nucleo_ihm02a1->PerformPreparedActions(); + +// while( + wait_ms(5000); + + stopAllMotors(); +} + +void readSerial(){ + char rx_line[10]; +// while(pc.readable()){ + pc.scanf("%s", rx_line); + //pc.printf("Spoken %s \r\n", rx_line); + + char cmd[10], cmdv[10], cmdv2[10]; + int values = sscanf(rx_line, "%[^','],%[^','],%s",cmd, cmdv, cmdv2); + //pc.printf("%d\r\n",values); + int cmd_value = atoi(cmdv); + int cmd_value2 = atoi(cmdv2); + //pc.printf("%s\r\n%d\r\n%d\r\n", cmd, cmd_value, cmd_value2); + + char c = cmd[0]; + //pc.printf("%c", c); + int pos; + int pos2; + switch(c){ + case 'a': + + return; + case 'b': + //set home + setHome(cmd_value); + pos = getPosition(cmd_value); + pc.printf("%c,%d,%d\r\n",c,cmd_value,pos); + return; + case 'c': + //get position + pos = getPosition(cmd_value); + pc.printf("%c,%d,%d\r\n",c,cmd_value,pos); + return; + case 'd': + + break; + case 'e': + //move steps + moveSteps(cmd_value, cmd_value2); + pos = getPosition(cmd_value); + pc.printf("%c,%d,%d\r\n",c,cmd_value,pos); + return; + case 'f': + //run at a given speed or change to run until hit bump + runAtSpeed(cmd_value, cmd_value2); + break; + case 'g': + //Halt + stopAllMotors(); + break; + case 'h': + //move X to home (and R cause connected) + goXRHome(cmd_value2); + pos = getPosition(0); + pos2 = getPosition(1); + pc.printf("%c,%d,%d\r\n",c,pos,pos2); + return; + case 'i': + //move X numebr of steps and R cause connected + moveInSync(cmd_value); + pos = getPosition(0); + pos2 = getPosition(1); + pc.printf("%c,%d,%d\r\n",c,pos,pos2); + return; + case 'j': + //go home + goHome(cmd_value, cmd_value2); + pos = getPosition(cmd_value); + pc.printf("%c,%d,%d\r\n",c,cmd_value,pos); + return; + default: + //N/A command + pc.printf("Do not understand commands: %s with value %d\r\n", cmd, cmd_value); + return; + } + pc.printf("complete\r\n"); +} /* Main ----------------------------------------------------------------------*/ int main() { - /*----- Initialization. -----*/ - /* Initializing SPI bus. */ - DevSPI dev_spi(D11, D12, D3); - + DevSPI dev_spi(D11, D12, D13); + /* Initializing Motor Control Expansion Board. */ x_nucleo_ihm02a1 = new X_NUCLEO_IHM02A1(&init[0], &init[1], A4, A5, D4, A2, &dev_spi); - - /* Building a list of motor control components. */ - L6470 **motors = x_nucleo_ihm02a1->GetComponents(); - - /* Printing to the console. */ - printf("Motor Control Application Example for 2 Motors\r\n\n"); - - - /*----- Setting home and marke positions, getting positions, and going to positions. -----*/ - - /* Printing to the console. */ - printf("--> Setting home position.\r\n"); - - /* Setting the home position. */ - motors[0]->SetHome(); - - /* Waiting. */ - wait_ms(DELAY_1); - - /* Getting the current position. */ - int position = motors[0]->GetPosition(); - - /* Printing to the console. */ - printf("--> Getting the current position: %d\r\n", position); - - /* Waiting. */ - wait_ms(DELAY_1); - - /* Printing to the console. */ - printf("--> Moving forward %d steps.\r\n", STEPS_1); - - /* Moving. */ - motors[0]->Move(StepperMotor::FWD, STEPS_1); - - /* Waiting while active. */ - motors[0]->WaitWhileActive(); - - /* Getting the current position. */ - position = motors[0]->GetPosition(); - /* Printing to the console. */ - printf("--> Getting the current position: %d\r\n", position); - - /* Printing to the console. */ - printf("--> Marking the current position.\r\n"); - - /* Marking the current position. */ - motors[0]->SetMark(); - - /* Waiting. */ - wait_ms(DELAY_1); - - /* Printing to the console. */ - printf("--> Moving backward %d steps.\r\n", STEPS_2); - - /* Moving. */ - motors[0]->Move(StepperMotor::BWD, STEPS_2); - - /* Waiting while active. */ - motors[0]->WaitWhileActive(); - - /* Waiting. */ - wait_ms(DELAY_1); - - /* Getting the current position. */ - position = motors[0]->GetPosition(); - - /* Printing to the console. */ - printf("--> Getting the current position: %d\r\n", position); - - /* Waiting. */ - wait_ms(DELAY_1); - - /* Printing to the console. */ - printf("--> Going to marked position.\r\n"); - - /* Going to marked position. */ - motors[0]->GoMark(); - - /* Waiting while active. */ - motors[0]->WaitWhileActive(); - - /* Waiting. */ - wait_ms(DELAY_1); - - /* Getting the current position. */ - position = motors[0]->GetPosition(); - - /* Printing to the console. */ - printf("--> Getting the current position: %d\r\n", position); - - /* Waiting. */ - wait_ms(DELAY_1); - - /* Printing to the console. */ - printf("--> Going to home position.\r\n"); - - /* Going to home position. */ - motors[0]->GoHome(); - - /* Waiting while active. */ - motors[0]->WaitWhileActive(); - - /* Waiting. */ - wait_ms(DELAY_1); - - /* Getting the current position. */ - position = motors[0]->GetPosition(); - - /* Printing to the console. */ - printf("--> Getting the current position: %d\r\n", position); - - /* Waiting. */ - wait_ms(DELAY_1); - - /* Printing to the console. */ - printf("--> Halving the microsteps.\r\n"); - - /* Halving the microsteps. */ - init[0].step_sel = (init[0].step_sel > 0 ? init[0].step_sel - 1 : init[0].step_sel); - if (!motors[0]->SetStepMode((StepperMotor::step_mode_t) init[0].step_sel)) - printf(" Step Mode not allowed.\r\n"); - - /* Waiting. */ - wait_ms(DELAY_1); - - /* Printing to the console. */ - printf("--> Setting home position.\r\n"); - - /* Setting the home position. */ - motors[0]->SetHome(); - - /* Waiting. */ - wait_ms(DELAY_1); - - /* Getting the current position. */ - position = motors[0]->GetPosition(); - - /* Printing to the console. */ - printf("--> Getting the current position: %d\r\n", position); + motors = x_nucleo_ihm02a1->GetComponents(); - /* Waiting. */ - wait_ms(DELAY_1); - - /* Printing to the console. */ - printf("--> Moving forward %d steps.\r\n", STEPS_1); - - /* Moving. */ - motors[0]->Move(StepperMotor::FWD, STEPS_1); - - /* Waiting while active. */ - motors[0]->WaitWhileActive(); - - /* Getting the current position. */ - position = motors[0]->GetPosition(); + pc.attach(readSerial); + pc.printf("ready\r\n"); + + while(1){ + } - /* Printing to the console. */ - printf("--> Getting the current position: %d\r\n", position); - - /* Printing to the console. */ - printf("--> Marking the current position.\r\n"); - - /* Marking the current position. */ - motors[0]->SetMark(); - - /* Waiting. */ - wait_ms(DELAY_2); - - - /*----- Running together for a certain amount of time. -----*/ - - /* Printing to the console. */ - printf("--> Running together for %d seconds.\r\n", DELAY_3 / 1000); - - /* Preparing each motor to perform a run at a specified speed. */ - for (int m = 0; m < L6470DAISYCHAINSIZE; m++) - motors[m]->PrepareRun(StepperMotor::BWD, 400); - - /* Performing the action on each motor at the same time. */ - x_nucleo_ihm02a1->PerformPreparedActions(); - - /* Waiting. */ - wait_ms(DELAY_3); - - - /*----- Increasing the speed while running. -----*/ - - /* Preparing each motor to perform a run at a specified speed. */ - for (int m = 0; m < L6470DAISYCHAINSIZE; m++) - motors[m]->PrepareGetSpeed(); - - /* Performing the action on each motor at the same time. */ - uint32_t* results = x_nucleo_ihm02a1->PerformPreparedActions(); - - /* Printing to the console. */ - printf(" Speed: M1 %d, M2 %d.\r\n", results[0], results[1]); - - /* Printing to the console. */ - printf("--> Doublig the speed while running again for %d seconds.\r\n", DELAY_3 / 1000); - - /* Preparing each motor to perform a run at a specified speed. */ - for (int m = 0; m < L6470DAISYCHAINSIZE; m++) - motors[m]->PrepareRun(StepperMotor::BWD, results[m] << 1); - - /* Performing the action on each motor at the same time. */ - results = x_nucleo_ihm02a1->PerformPreparedActions(); - - /* Waiting. */ - wait_ms(DELAY_3); - - /* Preparing each motor to perform a run at a specified speed. */ - for (int m = 0; m < L6470DAISYCHAINSIZE; m++) - motors[m]->PrepareGetSpeed(); - - /* Performing the action on each motor at the same time. */ - results = x_nucleo_ihm02a1->PerformPreparedActions(); - - /* Printing to the console. */ - printf(" Speed: M1 %d, M2 %d.\r\n", results[0], results[1]); - - /* Waiting. */ - wait_ms(DELAY_1); - - - /*----- Hard Stop. -----*/ - - /* Printing to the console. */ - printf("--> Hard Stop.\r\n"); - - /* Preparing each motor to perform a hard stop. */ - for (int m = 0; m < L6470DAISYCHAINSIZE; m++) - motors[m]->PrepareHardStop(); - - /* Performing the action on each motor at the same time. */ - x_nucleo_ihm02a1->PerformPreparedActions(); - - /* Waiting. */ - wait_ms(DELAY_2); - - - /*----- Doing a full revolution on each motor, one after the other. -----*/ - - /* Printing to the console. */ - printf("--> Doing a full revolution on each motor, one after the other.\r\n"); - - /* Doing a full revolution on each motor, one after the other. */ - for (int m = 0; m < L6470DAISYCHAINSIZE; m++) - for (int i = 0; i < MPR_1; i++) - { - /* Computing the number of steps. */ - int steps = (int) (((int) init[m].fullstepsperrevolution * pow(2.0f, init[m].step_sel)) / MPR_1); - - /* Moving. */ - motors[m]->Move(StepperMotor::FWD, steps); - - /* Waiting while active. */ - motors[m]->WaitWhileActive(); - - /* Waiting. */ - wait_ms(DELAY_1); - } - - /* Waiting. */ - wait_ms(DELAY_2); - - - /*----- High Impedance State. -----*/ - - /* Printing to the console. */ - printf("--> High Impedance State.\r\n"); - - /* Preparing each motor to set High Impedance State. */ - for (int m = 0; m < L6470DAISYCHAINSIZE; m++) - motors[m]->PrepareHardHiZ(); - - /* Performing the action on each motor at the same time. */ - x_nucleo_ihm02a1->PerformPreparedActions(); - - /* Waiting. */ - wait_ms(DELAY_2); + ///*----- Initialization. -----*/ +// +// /* Initializing SPI bus. */ +// DevSPI dev_spi(D11, D12, D13); +// +// /* Initializing Motor Control Expansion Board. */ +// x_nucleo_ihm02a1 = new X_NUCLEO_IHM02A1(&init[0], &init[1], A4, A5, D4, A2, &dev_spi); +// +// /* Building a list of motor control components. */ +// L6470 **motors = x_nucleo_ihm02a1->GetComponents(); +// +// /* Printing to the console. */ +// pc.printf("Motor Control Application Example for 2 Motors\r\n\n"); +// +// +// /*----- Setting home and marke positions, getting positions, and going to positions. -----*/ +// +// /* Printing to the console. */ +// pc.printf("--> Setting home position.\r\n"); +// +// /* Setting the home position. */ +// motors[0]->SetHome(); +// +// /* Waiting. */ +// wait_ms(DELAY_1); +// +// /* Getting the current position. */ +// int position = motors[0]->GetPosition(); +// +// /* Printing to the console. */ +// pc.printf("--> Getting the current position: %d\r\n", position); +// +// /* Waiting. */ +// wait_ms(DELAY_1); +// +// /* Printing to the console. */ +// pc.printf("--> Moving forward %d steps.\r\n", STEPS_1); +// +// /* Moving. */ +// motors[0]->Move(StepperMotor::FWD, STEPS_1); +// +// /* Waiting while active. */ +// motors[0]->WaitWhileActive(); +// +// /* Getting the current position. */ +// position = motors[0]->GetPosition(); +// +// /* Printing to the console. */ +// pc.printf("--> Getting the current position: %d\r\n", position); +// +// /* Printing to the console. */ +// pc.printf("--> Marking the current position.\r\n"); +// +// /* Marking the current position. */ +// motors[0]->SetMark(); +// +// /* Waiting. */ +// wait_ms(DELAY_1); +// +// /* Printing to the console. */ +// pc.printf("--> Moving backward %d steps.\r\n", STEPS_2); +// +// /* Moving. */ + //motors[0]->Move(StepperMotor::BWD, STEPS_2); +// +// /* Waiting while active. */ +// motors[0]->WaitWhileActive(); +// +// /* Waiting. */ +// wait_ms(DELAY_1); +// +// /* Getting the current position. */ +// position = motors[0]->GetPosition(); +// +// /* Printing to the console. */ +// pc.printf("--> Getting the current position: %d\r\n", position); +// +// /* Waiting. */ +// wait_ms(DELAY_1); +// +// /* Printing to the console. */ +// pc.printf("--> Going to marked position.\r\n"); +// +// /* Going to marked position. */ +// motors[0]->GoMark(); +// +// /* Waiting while active. */ +// motors[0]->WaitWhileActive(); +// +// /* Waiting. */ +// wait_ms(DELAY_1); +// +// /* Getting the current position. */ +// position = motors[0]->GetPosition(); +// +// /* Printing to the console. */ +// pc.printf("--> Getting the current position: %d\r\n", position); +// +// /* Waiting. */ +// wait_ms(DELAY_1); +// +// /* Printing to the console. */ +// pc.printf("--> Going to home position.\r\n"); +// +// /* Going to home position. */ +// motors[0]->GoHome(); +// +// /* Waiting while active. */ +// motors[0]->WaitWhileActive(); +// +// /* Waiting. */ +// wait_ms(DELAY_1); +// +// /* Getting the current position. */ +// position = motors[0]->GetPosition(); +// +// /* Printing to the console. */ +// pc.printf("--> Getting the current position: %d\r\n", position); +// +// /* Waiting. */ +// wait_ms(DELAY_1); +// +// /* Printing to the console. */ +// pc.printf("--> Halving the microsteps.\r\n"); +// +// /* Halving the microsteps. */ +// init[0].step_sel = (init[0].step_sel > 0 ? init[0].step_sel - 1 : init[0].step_sel); +// if (!motors[0]->SetStepMode((StepperMotor::step_mode_t) init[0].step_sel)) +// pc.printf(" Step Mode not allowed.\r\n"); +// +// /* Waiting. */ +// wait_ms(DELAY_1); +// +// /* Printing to the console. */ +// pc.printf("--> Setting home position.\r\n"); +// +// /* Setting the home position. */ +// motors[0]->SetHome(); +// +// /* Waiting. */ +// wait_ms(DELAY_1); +// +// /* Getting the current position. */ +// position = motors[0]->GetPosition(); +// +// /* Printing to the console. */ +// pc.printf("--> Getting the current position: %d\r\n", position); +// +// /* Waiting. */ +// wait_ms(DELAY_1); +// +// /* Printing to the console. */ +// pc.printf("--> Moving forward %d steps.\r\n", STEPS_1); +// +// /* Moving. */ +// motors[0]->Move(StepperMotor::FWD, STEPS_1); +// +// /* Waiting while active. */ +// motors[0]->WaitWhileActive(); +// +// /* Getting the current position. */ +// position = motors[0]->GetPosition(); +// +// /* Printing to the console. */ +// pc.printf("--> Getting the current position: %d\r\n", position); +// +// /* Printing to the console. */ +// pc.printf("--> Marking the current position.\r\n"); +// +// /* Marking the current position. */ +// motors[0]->SetMark(); +// +// /* Waiting. */ +// wait_ms(DELAY_2); +// +// +// /*----- Running together for a certain amount of time. -----*/ +// +// /* Printing to the console. */ +// pc.printf("--> Running together for %d seconds.\r\n", DELAY_3 / 1000); +// +// /* Preparing each motor to perform a run at a specified speed. */ +// for (int m = 0; m < L6470DAISYCHAINSIZE; m++) +// motors[m]->PrepareRun(StepperMotor::BWD, 400); +// +// /* Performing the action on each motor at the same time. */ +// x_nucleo_ihm02a1->PerformPreparedActions(); +// +// /* Waiting. */ +// wait_ms(DELAY_3); +// +// +// /*----- Increasing the speed while running. -----*/ +// +// /* Preparing each motor to perform a run at a specified speed. */ +// for (int m = 0; m < L6470DAISYCHAINSIZE; m++) +// motors[m]->PrepareGetSpeed(); +// +// /* Performing the action on each motor at the same time. */ +// uint32_t* results = x_nucleo_ihm02a1->PerformPreparedActions(); +// +// /* Printing to the console. */ +// pc.printf(" Speed: M1 %d, M2 %d.\r\n", results[0], results[1]); +// +// /* Printing to the console. */ +// pc.printf("--> Doublig the speed while running again for %d seconds.\r\n", DELAY_3 / 1000); +// +// /* Preparing each motor to perform a run at a specified speed. */ +// for (int m = 0; m < L6470DAISYCHAINSIZE; m++) +// motors[m]->PrepareRun(StepperMotor::BWD, results[m] << 1); +// +// /* Performing the action on each motor at the same time. */ +// results = x_nucleo_ihm02a1->PerformPreparedActions(); +// +// /* Waiting. */ +// wait_ms(DELAY_3); +// +// /* Preparing each motor to perform a run at a specified speed. */ +// for (int m = 0; m < L6470DAISYCHAINSIZE; m++) +// motors[m]->PrepareGetSpeed(); +// +// /* Performing the action on each motor at the same time. */ +// results = x_nucleo_ihm02a1->PerformPreparedActions(); +// +// /* Printing to the console. */ +// pc.printf(" Speed: M1 %d, M2 %d.\r\n", results[0], results[1]); +// +// /* Waiting. */ +// wait_ms(DELAY_1); +// +// +// /*----- Hard Stop. -----*/ +// +// /* Printing to the console. */ +// pc.printf("--> Hard Stop.\r\n"); +// +// /* Preparing each motor to perform a hard stop. */ +// for (int m = 0; m < L6470DAISYCHAINSIZE; m++) +// motors[m]->PrepareHardStop(); +// +// /* Performing the action on each motor at the same time. */ +// x_nucleo_ihm02a1->PerformPreparedActions(); +// +// /* Waiting. */ +// wait_ms(DELAY_2); +// +// +// /*----- Doing a full revolution on each motor, one after the other. -----*/ +// +// /* Printing to the console. */ +// pc.printf("--> Doing a full revolution on each motor, one after the other.\r\n"); +// +// /* Doing a full revolution on each motor, one after the other. */ +// for (int m = 0; m < L6470DAISYCHAINSIZE; m++) +// for (int i = 0; i < MPR_1; i++) +// { +// /* Computing the number of steps. */ +// int steps = (int) (((int) init[m].fullstepsperrevolution * pow(2.0f, init[m].step_sel)) / MPR_1); +// +// /* Moving. */ +// motors[m]->Move(StepperMotor::FWD, steps); +// +// /* Waiting while active. */ +// motors[m]->WaitWhileActive(); +// +// /* Waiting. */ +// wait_ms(DELAY_1); +// } +// +// /* Waiting. */ +// wait_ms(DELAY_2); +// +// +// /*----- High Impedance State. -----*/ +// +// /* Printing to the console. */ +// pc.printf("--> High Impedance State.\r\n"); +// +// /* Preparing each motor to set High Impedance State. */ +// for (int m = 0; m < L6470DAISYCHAINSIZE; m++) +// motors[m]->PrepareHardHiZ(); +// +// /* Performing the action on each motor at the same time. */ +// x_nucleo_ihm02a1->PerformPreparedActions(); +// +// /* Waiting. */ +// wait_ms(DELAY_2); } \ No newline at end of file