20180223 ULTIMATE FINAL
Dependencies: BLE_API X_NUCLEO_IDB0XA1 X_NUCLEO_IHM02A1 mbed
Fork of Motor_Ble_v1201820223FINAL by
main.cpp@12:407779f755d0, 2018-02-23 (annotated)
- Committer:
- yong304
- Date:
- Fri Feb 23 08:52:13 2018 +0000
- Revision:
- 12:407779f755d0
- Parent:
- 11:6deabd374c96
- Child:
- 13:d7aa688cd990
20180223FINAL
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
apalmieri | 0:aae2d6c2a9eb | 1 | /* mbed Microcontroller Library |
apalmieri | 0:aae2d6c2a9eb | 2 | * Copyright (c) 2006-2013 ARM Limited |
apalmieri | 0:aae2d6c2a9eb | 3 | * |
apalmieri | 0:aae2d6c2a9eb | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
apalmieri | 0:aae2d6c2a9eb | 5 | * you may not use this file except in compliance with the License. |
apalmieri | 0:aae2d6c2a9eb | 6 | * You may obtain a copy of the License at |
apalmieri | 0:aae2d6c2a9eb | 7 | * |
apalmieri | 0:aae2d6c2a9eb | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
apalmieri | 0:aae2d6c2a9eb | 9 | * |
apalmieri | 0:aae2d6c2a9eb | 10 | * Unless required by applicable law or agreed to in writing, software |
apalmieri | 0:aae2d6c2a9eb | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
apalmieri | 0:aae2d6c2a9eb | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
apalmieri | 0:aae2d6c2a9eb | 13 | * See the License for the specific language governing permissions and |
apalmieri | 0:aae2d6c2a9eb | 14 | * limitations under the License. |
apalmieri | 0:aae2d6c2a9eb | 15 | */ |
barry210110 | 7:126b141a8c86 | 16 | |
barry210110 | 7:126b141a8c86 | 17 | /* Includes ------------------------------------------------------------------*/ |
barry210110 | 7:126b141a8c86 | 18 | |
barry210110 | 7:126b141a8c86 | 19 | |
yong304 | 10:21eecb227c05 | 20 | |
barry210110 | 7:126b141a8c86 | 21 | /* Helper header files. */ |
barry210110 | 7:126b141a8c86 | 22 | #include "DevSPI.h" |
yong304 | 10:21eecb227c05 | 23 | void FWD(); |
yong304 | 10:21eecb227c05 | 24 | void BWD(); |
yong304 | 10:21eecb227c05 | 25 | void LEFT(); |
yong304 | 10:21eecb227c05 | 26 | void RIGHT(); |
yong304 | 11:6deabd374c96 | 27 | void SOFTSTOP(); |
barry210110 | 7:126b141a8c86 | 28 | /* Expansion Board specific header files. */ |
barry210110 | 7:126b141a8c86 | 29 | #include "XNucleoIHM02A1.h" |
apalmieri | 0:aae2d6c2a9eb | 30 | |
apalmieri | 0:aae2d6c2a9eb | 31 | #include "mbed.h" |
apalmieri | 0:aae2d6c2a9eb | 32 | #include "ble/BLE.h" |
apalmieri | 0:aae2d6c2a9eb | 33 | #include "LEDService.h" |
yong304 | 10:21eecb227c05 | 34 | |
barry210110 | 9:ef9b37e2464f | 35 | |
barry210110 | 7:126b141a8c86 | 36 | /* Definitions ---------------------------------------------------------------*/ |
apalmieri | 0:aae2d6c2a9eb | 37 | |
barry210110 | 7:126b141a8c86 | 38 | /* Number of movements per revolution. */ |
barry210110 | 7:126b141a8c86 | 39 | #define MPR_1 4 |
barry210110 | 7:126b141a8c86 | 40 | |
barry210110 | 7:126b141a8c86 | 41 | /* Number of steps. */ |
barry210110 | 7:126b141a8c86 | 42 | #define STEPS_1 (400 * 128) /* 1 revolution given a 400 steps motor configured at 1/128 microstep mode. */ |
barry210110 | 7:126b141a8c86 | 43 | #define STEPS_2 (STEPS_1 * 2) |
barry210110 | 7:126b141a8c86 | 44 | |
barry210110 | 7:126b141a8c86 | 45 | /* Delay in milliseconds. */ |
barry210110 | 7:126b141a8c86 | 46 | #define DELAY_1 1000 |
barry210110 | 7:126b141a8c86 | 47 | #define DELAY_2 2000 |
barry210110 | 7:126b141a8c86 | 48 | #define DELAY_3 5000 |
barry210110 | 7:126b141a8c86 | 49 | |
barry210110 | 9:ef9b37e2464f | 50 | #ifdef TARGET_STM32F401 |
barry210110 | 9:ef9b37e2464f | 51 | DevSPI dev_spi(PB_15, PB_14, PB_13); |
barry210110 | 9:ef9b37e2464f | 52 | #else |
barry210110 | 9:ef9b37e2464f | 53 | DevSPI dev_spi(PB_15, PB_14, PB_13); |
barry210110 | 9:ef9b37e2464f | 54 | #endif |
yong304 | 10:21eecb227c05 | 55 | |
barry210110 | 7:126b141a8c86 | 56 | /* Variables -----------------------------------------------------------------*/ |
barry210110 | 7:126b141a8c86 | 57 | |
barry210110 | 7:126b141a8c86 | 58 | /* Initialization parameters of the motors connected to the expansion board. */ |
barry210110 | 7:126b141a8c86 | 59 | L6470_init_t init[L6470DAISYCHAINSIZE] = { |
barry210110 | 7:126b141a8c86 | 60 | /* First Motor. */ |
barry210110 | 7:126b141a8c86 | 61 | { |
barry210110 | 7:126b141a8c86 | 62 | 9.0, /* Motor supply voltage in V. */ |
barry210110 | 7:126b141a8c86 | 63 | 400, /* Min number of steps per revolution for the motor. */ |
barry210110 | 7:126b141a8c86 | 64 | 1.7, /* Max motor phase voltage in A. */ |
barry210110 | 7:126b141a8c86 | 65 | 3.06, /* Max motor phase voltage in V. */ |
barry210110 | 7:126b141a8c86 | 66 | 300.0, /* Motor initial speed [step/s]. */ |
barry210110 | 7:126b141a8c86 | 67 | 500.0, /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */ |
barry210110 | 7:126b141a8c86 | 68 | 500.0, /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */ |
barry210110 | 7:126b141a8c86 | 69 | 992.0, /* Motor maximum speed [step/s]. */ |
barry210110 | 7:126b141a8c86 | 70 | 0.0, /* Motor minimum speed [step/s]. */ |
barry210110 | 7:126b141a8c86 | 71 | 602.7, /* Motor full-step speed threshold [step/s]. */ |
barry210110 | 7:126b141a8c86 | 72 | 3.06, /* Holding kval [V]. */ |
barry210110 | 7:126b141a8c86 | 73 | 3.06, /* Constant speed kval [V]. */ |
barry210110 | 7:126b141a8c86 | 74 | 3.06, /* Acceleration starting kval [V]. */ |
barry210110 | 7:126b141a8c86 | 75 | 3.06, /* Deceleration starting kval [V]. */ |
barry210110 | 7:126b141a8c86 | 76 | 61.52, /* Intersect speed for bemf compensation curve slope changing [step/s]. */ |
barry210110 | 7:126b141a8c86 | 77 | 392.1569e-6, /* Start slope [s/step]. */ |
barry210110 | 7:126b141a8c86 | 78 | 643.1372e-6, /* Acceleration final slope [s/step]. */ |
barry210110 | 7:126b141a8c86 | 79 | 643.1372e-6, /* Deceleration final slope [s/step]. */ |
barry210110 | 7:126b141a8c86 | 80 | 0, /* Thermal compensation factor (range [0, 15]). */ |
barry210110 | 7:126b141a8c86 | 81 | 3.06 * 1000 * 1.10, /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */ |
barry210110 | 7:126b141a8c86 | 82 | 3.06 * 1000 * 1.00, /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */ |
barry210110 | 7:126b141a8c86 | 83 | StepperMotor::STEP_MODE_1_128, /* Step mode selection. */ |
barry210110 | 7:126b141a8c86 | 84 | 0xFF, /* Alarm conditions enable. */ |
barry210110 | 7:126b141a8c86 | 85 | 0x2E88 /* Ic configuration. */ |
barry210110 | 7:126b141a8c86 | 86 | }, |
barry210110 | 7:126b141a8c86 | 87 | |
barry210110 | 7:126b141a8c86 | 88 | /* Second Motor. */ |
barry210110 | 7:126b141a8c86 | 89 | { |
barry210110 | 7:126b141a8c86 | 90 | 9.0, /* Motor supply voltage in V. */ |
barry210110 | 7:126b141a8c86 | 91 | 400, /* Min number of steps per revolution for the motor. */ |
barry210110 | 7:126b141a8c86 | 92 | 1.7, /* Max motor phase voltage in A. */ |
barry210110 | 7:126b141a8c86 | 93 | 3.06, /* Max motor phase voltage in V. */ |
barry210110 | 7:126b141a8c86 | 94 | 300.0, /* Motor initial speed [step/s]. */ |
barry210110 | 7:126b141a8c86 | 95 | 500.0, /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */ |
barry210110 | 7:126b141a8c86 | 96 | 500.0, /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */ |
barry210110 | 7:126b141a8c86 | 97 | 992.0, /* Motor maximum speed [step/s]. */ |
barry210110 | 7:126b141a8c86 | 98 | 0.0, /* Motor minimum speed [step/s]. */ |
barry210110 | 7:126b141a8c86 | 99 | 602.7, /* Motor full-step speed threshold [step/s]. */ |
barry210110 | 7:126b141a8c86 | 100 | 3.06, /* Holding kval [V]. */ |
barry210110 | 7:126b141a8c86 | 101 | 3.06, /* Constant speed kval [V]. */ |
barry210110 | 7:126b141a8c86 | 102 | 3.06, /* Acceleration starting kval [V]. */ |
barry210110 | 7:126b141a8c86 | 103 | 3.06, /* Deceleration starting kval [V]. */ |
barry210110 | 7:126b141a8c86 | 104 | 61.52, /* Intersect speed for bemf compensation curve slope changing [step/s]. */ |
barry210110 | 7:126b141a8c86 | 105 | 392.1569e-6, /* Start slope [s/step]. */ |
barry210110 | 7:126b141a8c86 | 106 | 643.1372e-6, /* Acceleration final slope [s/step]. */ |
barry210110 | 7:126b141a8c86 | 107 | 643.1372e-6, /* Deceleration final slope [s/step]. */ |
barry210110 | 7:126b141a8c86 | 108 | 0, /* Thermal compensation factor (range [0, 15]). */ |
barry210110 | 7:126b141a8c86 | 109 | 3.06 * 1000 * 1.10, /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */ |
barry210110 | 7:126b141a8c86 | 110 | 3.06 * 1000 * 1.00, /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */ |
barry210110 | 7:126b141a8c86 | 111 | StepperMotor::STEP_MODE_1_128, /* Step mode selection. */ |
barry210110 | 7:126b141a8c86 | 112 | 0xFF, /* Alarm conditions enable. */ |
barry210110 | 7:126b141a8c86 | 113 | 0x2E88 /* Ic configuration. */ |
barry210110 | 7:126b141a8c86 | 114 | } |
barry210110 | 7:126b141a8c86 | 115 | }; |
barry210110 | 7:126b141a8c86 | 116 | |
yong304 | 10:21eecb227c05 | 117 | |
yong304 | 10:21eecb227c05 | 118 | /* Motor Control Expansion Board. */ |
yong304 | 12:407779f755d0 | 119 | XNucleoIHM02A1* x_nucleo_ihm02a1 = new XNucleoIHM02A1(&init[0], &init[1], A4, A5, D4, A2, &dev_spi); |
barry210110 | 9:ef9b37e2464f | 120 | |
barry210110 | 7:126b141a8c86 | 121 | DigitalOut actuatedLED(LED2); |
barry210110 | 7:126b141a8c86 | 122 | const static char DEVICE_NAME[] = "mydevice"; // CHANGE NAME |
barry210110 | 7:126b141a8c86 | 123 | static const uint16_t uuid16_list[] = {LEDService::LED_SERVICE_UUID}; // GATT ATTRIBUTE UUID |
apalmieri | 0:aae2d6c2a9eb | 124 | |
apalmieri | 0:aae2d6c2a9eb | 125 | LEDService *ledServicePtr; |
apalmieri | 0:aae2d6c2a9eb | 126 | |
apalmieri | 0:aae2d6c2a9eb | 127 | void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) |
apalmieri | 0:aae2d6c2a9eb | 128 | { |
apalmieri | 0:aae2d6c2a9eb | 129 | (void)params; |
apalmieri | 3:e0efdb741bd4 | 130 | BLE::Instance().gap().startAdvertising(); // restart advertising |
apalmieri | 0:aae2d6c2a9eb | 131 | } |
apalmieri | 0:aae2d6c2a9eb | 132 | |
apalmieri | 0:aae2d6c2a9eb | 133 | /** |
apalmieri | 0:aae2d6c2a9eb | 134 | * This callback allows the LEDService to receive updates to the ledState Characteristic. |
apalmieri | 0:aae2d6c2a9eb | 135 | * |
apalmieri | 0:aae2d6c2a9eb | 136 | * @param[in] params |
apalmieri | 0:aae2d6c2a9eb | 137 | * Information about the characterisitc being updated. |
apalmieri | 0:aae2d6c2a9eb | 138 | */ |
apalmieri | 0:aae2d6c2a9eb | 139 | void onDataWrittenCallback(const GattWriteCallbackParams *params) { |
apalmieri | 0:aae2d6c2a9eb | 140 | if ((params->handle == ledServicePtr->getValueHandle()) && (params->len == 1)) { |
yong304 | 10:21eecb227c05 | 141 | |
yong304 | 11:6deabd374c96 | 142 | if ( *(params->data)== 0x41 ) |
barry210110 | 7:126b141a8c86 | 143 | { |
barry210110 | 7:126b141a8c86 | 144 | actuatedLED=1 ; |
yong304 | 11:6deabd374c96 | 145 | FWD(); |
yong304 | 11:6deabd374c96 | 146 | } |
yong304 | 11:6deabd374c96 | 147 | else if (*(params->data)== 0x42) |
yong304 | 11:6deabd374c96 | 148 | { |
yong304 | 12:407779f755d0 | 149 | actuatedLED=1 ; |
yong304 | 12:407779f755d0 | 150 | BWD(); |
yong304 | 11:6deabd374c96 | 151 | |
yong304 | 11:6deabd374c96 | 152 | } |
yong304 | 11:6deabd374c96 | 153 | else if (*(params->data)== 0x43) |
yong304 | 11:6deabd374c96 | 154 | { |
barry210110 | 7:126b141a8c86 | 155 | actuatedLED=1 ; |
yong304 | 12:407779f755d0 | 156 | RIGHT(); |
yong304 | 11:6deabd374c96 | 157 | |
yong304 | 11:6deabd374c96 | 158 | } |
yong304 | 11:6deabd374c96 | 159 | else if (*(params->data)== 0x44) |
yong304 | 11:6deabd374c96 | 160 | { |
yong304 | 10:21eecb227c05 | 161 | actuatedLED=1 ; |
yong304 | 10:21eecb227c05 | 162 | LEFT(); |
yong304 | 10:21eecb227c05 | 163 | } |
yong304 | 12:407779f755d0 | 164 | else if (*(params->data)== 0x45) |
yong304 | 12:407779f755d0 | 165 | { |
yong304 | 12:407779f755d0 | 166 | actuatedLED=0 ; |
yong304 | 12:407779f755d0 | 167 | SOFTSTOP(); |
yong304 | 12:407779f755d0 | 168 | } |
yong304 | 12:407779f755d0 | 169 | |
yong304 | 10:21eecb227c05 | 170 | |
barry210110 | 7:126b141a8c86 | 171 | |
apalmieri | 0:aae2d6c2a9eb | 172 | } |
barry210110 | 7:126b141a8c86 | 173 | |
apalmieri | 0:aae2d6c2a9eb | 174 | } |
apalmieri | 0:aae2d6c2a9eb | 175 | |
apalmieri | 0:aae2d6c2a9eb | 176 | /** |
apalmieri | 0:aae2d6c2a9eb | 177 | * This function is called when the ble initialization process has failled |
apalmieri | 0:aae2d6c2a9eb | 178 | */ |
barry210110 | 7:126b141a8c86 | 179 | int onBleInitError(BLE &ble, ble_error_t error) |
apalmieri | 0:aae2d6c2a9eb | 180 | { |
apalmieri | 0:aae2d6c2a9eb | 181 | /* Initialization error handling should go here */ |
apalmieri | 0:aae2d6c2a9eb | 182 | } |
apalmieri | 0:aae2d6c2a9eb | 183 | |
apalmieri | 0:aae2d6c2a9eb | 184 | /** |
apalmieri | 0:aae2d6c2a9eb | 185 | * Callback triggered when the ble initialization process has finished |
apalmieri | 0:aae2d6c2a9eb | 186 | */ |
apalmieri | 0:aae2d6c2a9eb | 187 | void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) |
apalmieri | 0:aae2d6c2a9eb | 188 | { |
apalmieri | 0:aae2d6c2a9eb | 189 | BLE& ble = params->ble; |
apalmieri | 0:aae2d6c2a9eb | 190 | ble_error_t error = params->error; |
apalmieri | 0:aae2d6c2a9eb | 191 | |
apalmieri | 0:aae2d6c2a9eb | 192 | if (error != BLE_ERROR_NONE) { |
apalmieri | 0:aae2d6c2a9eb | 193 | /* In case of error, forward the error handling to onBleInitError */ |
apalmieri | 0:aae2d6c2a9eb | 194 | onBleInitError(ble, error); |
yong304 | 10:21eecb227c05 | 195 | return; |
apalmieri | 0:aae2d6c2a9eb | 196 | } |
apalmieri | 0:aae2d6c2a9eb | 197 | |
apalmieri | 0:aae2d6c2a9eb | 198 | /* Ensure that it is the default instance of BLE */ |
apalmieri | 0:aae2d6c2a9eb | 199 | if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { |
apalmieri | 0:aae2d6c2a9eb | 200 | return; |
apalmieri | 0:aae2d6c2a9eb | 201 | } |
apalmieri | 0:aae2d6c2a9eb | 202 | |
apalmieri | 0:aae2d6c2a9eb | 203 | ble.gap().onDisconnection(disconnectionCallback); |
apalmieri | 0:aae2d6c2a9eb | 204 | ble.gattServer().onDataWritten(onDataWrittenCallback); |
apalmieri | 0:aae2d6c2a9eb | 205 | |
apalmieri | 0:aae2d6c2a9eb | 206 | bool initialValueForLEDCharacteristic = true; |
apalmieri | 3:e0efdb741bd4 | 207 | ledServicePtr = new LEDService(ble, initialValueForLEDCharacteristic); |
apalmieri | 0:aae2d6c2a9eb | 208 | |
apalmieri | 0:aae2d6c2a9eb | 209 | /* setup advertising */ |
apalmieri | 0:aae2d6c2a9eb | 210 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); |
apalmieri | 0:aae2d6c2a9eb | 211 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); |
apalmieri | 0:aae2d6c2a9eb | 212 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); |
apalmieri | 0:aae2d6c2a9eb | 213 | ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
apalmieri | 0:aae2d6c2a9eb | 214 | ble.gap().setAdvertisingInterval(1000); /* 1000ms. */ |
apalmieri | 0:aae2d6c2a9eb | 215 | ble.gap().startAdvertising(); |
barry210110 | 7:126b141a8c86 | 216 | |
apalmieri | 0:aae2d6c2a9eb | 217 | while (true) { |
apalmieri | 0:aae2d6c2a9eb | 218 | ble.waitForEvent(); |
apalmieri | 0:aae2d6c2a9eb | 219 | } |
apalmieri | 0:aae2d6c2a9eb | 220 | } |
apalmieri | 0:aae2d6c2a9eb | 221 | |
apalmieri | 0:aae2d6c2a9eb | 222 | int main(void) |
barry210110 | 7:126b141a8c86 | 223 | { |
barry210110 | 7:126b141a8c86 | 224 | |
apalmieri | 0:aae2d6c2a9eb | 225 | BLE &ble = BLE::Instance(); |
apalmieri | 0:aae2d6c2a9eb | 226 | |
barry210110 | 7:126b141a8c86 | 227 | ble.init(bleInitComplete); |
barry210110 | 7:126b141a8c86 | 228 | |
apalmieri | 0:aae2d6c2a9eb | 229 | } |
yong304 | 10:21eecb227c05 | 230 | |
yong304 | 10:21eecb227c05 | 231 | void FWD() |
yong304 | 10:21eecb227c05 | 232 | { |
barry210110 | 9:ef9b37e2464f | 233 | |
barry210110 | 7:126b141a8c86 | 234 | /* Building a list of motor control components. */ |
barry210110 | 7:126b141a8c86 | 235 | L6470 **motors = x_nucleo_ihm02a1->get_components(); |
yong304 | 11:6deabd374c96 | 236 | //otors[0]->set_home(); |
yong304 | 10:21eecb227c05 | 237 | |
yong304 | 10:21eecb227c05 | 238 | /* Getting the current position. */ |
yong304 | 11:6deabd374c96 | 239 | //t position = motors[0]->get_position(); |
yong304 | 10:21eecb227c05 | 240 | |
yong304 | 11:6deabd374c96 | 241 | /* Preparing each motor to perform a run at a specified speed. */ |
yong304 | 10:21eecb227c05 | 242 | for (int m = 0; m < L6470DAISYCHAINSIZE; m++) { |
yong304 | 11:6deabd374c96 | 243 | motors[m]->prepare_run(StepperMotor::FWD, 400); |
yong304 | 10:21eecb227c05 | 244 | } |
yong304 | 10:21eecb227c05 | 245 | |
yong304 | 10:21eecb227c05 | 246 | /* Performing the action on each motor at the same time. */ |
yong304 | 10:21eecb227c05 | 247 | x_nucleo_ihm02a1->perform_prepared_actions(); |
yong304 | 10:21eecb227c05 | 248 | |
yong304 | 10:21eecb227c05 | 249 | /* Waiting while active. */ |
yong304 | 10:21eecb227c05 | 250 | motors[0]->wait_while_active(); |
yong304 | 11:6deabd374c96 | 251 | motors[1]->wait_while_active(); |
yong304 | 10:21eecb227c05 | 252 | } |
yong304 | 10:21eecb227c05 | 253 | |
yong304 | 10:21eecb227c05 | 254 | void BWD() |
yong304 | 10:21eecb227c05 | 255 | { |
yong304 | 10:21eecb227c05 | 256 | |
yong304 | 10:21eecb227c05 | 257 | /* Building a list of motor control components. */ |
yong304 | 10:21eecb227c05 | 258 | L6470 **motors = x_nucleo_ihm02a1->get_components(); |
yong304 | 11:6deabd374c96 | 259 | // motors[0]->set_home(); |
barry210110 | 7:126b141a8c86 | 260 | |
barry210110 | 7:126b141a8c86 | 261 | /* Getting the current position. */ |
yong304 | 11:6deabd374c96 | 262 | // int position = motors[0]->get_position(); |
barry210110 | 7:126b141a8c86 | 263 | |
yong304 | 12:407779f755d0 | 264 | /* Preparing each motor to perform a run at a specified speed. */ |
yong304 | 10:21eecb227c05 | 265 | for (int m = 0; m < L6470DAISYCHAINSIZE; m++) { |
yong304 | 12:407779f755d0 | 266 | motors[m]->prepare_run(StepperMotor::BWD, 400); |
yong304 | 10:21eecb227c05 | 267 | } |
yong304 | 10:21eecb227c05 | 268 | |
yong304 | 10:21eecb227c05 | 269 | /* Performing the action on each motor at the same time. */ |
yong304 | 10:21eecb227c05 | 270 | x_nucleo_ihm02a1->perform_prepared_actions(); |
yong304 | 10:21eecb227c05 | 271 | |
yong304 | 10:21eecb227c05 | 272 | /* Waiting while active. */ |
yong304 | 10:21eecb227c05 | 273 | motors[0]->wait_while_active(); |
yong304 | 11:6deabd374c96 | 274 | motors[1]->wait_while_active(); |
yong304 | 10:21eecb227c05 | 275 | } |
yong304 | 10:21eecb227c05 | 276 | void LEFT() |
yong304 | 10:21eecb227c05 | 277 | { |
yong304 | 10:21eecb227c05 | 278 | |
yong304 | 10:21eecb227c05 | 279 | /* Building a list of motor control components. */ |
yong304 | 10:21eecb227c05 | 280 | L6470 **motors = x_nucleo_ihm02a1->get_components(); |
yong304 | 11:6deabd374c96 | 281 | // motors[0]->set_home(); |
yong304 | 10:21eecb227c05 | 282 | |
yong304 | 10:21eecb227c05 | 283 | /* Getting the current position. */ |
yong304 | 11:6deabd374c96 | 284 | // int position = motors[0]->get_position(); |
yong304 | 10:21eecb227c05 | 285 | |
yong304 | 10:21eecb227c05 | 286 | /* Preparing each motor to perform a run at a specified speed. */ |
yong304 | 12:407779f755d0 | 287 | motors[0]->prepare_run(StepperMotor::FWD, 400); |
yong304 | 12:407779f755d0 | 288 | motors[1]->prepare_run(StepperMotor::BWD, 400); |
barry210110 | 7:126b141a8c86 | 289 | |
yong304 | 10:21eecb227c05 | 290 | /* Performing the action on each motor at the same time. */ |
yong304 | 10:21eecb227c05 | 291 | x_nucleo_ihm02a1->perform_prepared_actions(); |
barry210110 | 7:126b141a8c86 | 292 | |
yong304 | 10:21eecb227c05 | 293 | /* Waiting while active. */ |
yong304 | 10:21eecb227c05 | 294 | motors[0]->wait_while_active(); |
yong304 | 11:6deabd374c96 | 295 | motors[1]->wait_while_active(); |
yong304 | 10:21eecb227c05 | 296 | } |
yong304 | 10:21eecb227c05 | 297 | void RIGHT() |
yong304 | 10:21eecb227c05 | 298 | { |
yong304 | 10:21eecb227c05 | 299 | |
yong304 | 10:21eecb227c05 | 300 | /* Building a list of motor control components. */ |
yong304 | 10:21eecb227c05 | 301 | L6470 **motors = x_nucleo_ihm02a1->get_components(); |
yong304 | 11:6deabd374c96 | 302 | // motors[0]->set_home(); |
yong304 | 10:21eecb227c05 | 303 | |
yong304 | 10:21eecb227c05 | 304 | /* Getting the current position. */ |
yong304 | 11:6deabd374c96 | 305 | // int position = motors[0]->get_position(); |
yong304 | 10:21eecb227c05 | 306 | |
yong304 | 10:21eecb227c05 | 307 | /* Preparing each motor to perform a run at a specified speed. */ |
yong304 | 12:407779f755d0 | 308 | motors[0]->prepare_run(StepperMotor::BWD, 400); |
yong304 | 12:407779f755d0 | 309 | motors[1]->prepare_run(StepperMotor::FWD, 400); |
yong304 | 10:21eecb227c05 | 310 | |
yong304 | 10:21eecb227c05 | 311 | /* Performing the action on each motor at the same time. */ |
yong304 | 10:21eecb227c05 | 312 | x_nucleo_ihm02a1->perform_prepared_actions(); |
barry210110 | 9:ef9b37e2464f | 313 | |
yong304 | 10:21eecb227c05 | 314 | /* Waiting while active. */ |
yong304 | 10:21eecb227c05 | 315 | motors[0]->wait_while_active(); |
yong304 | 11:6deabd374c96 | 316 | motors[1]->wait_while_active(); |
yong304 | 11:6deabd374c96 | 317 | } |
yong304 | 11:6deabd374c96 | 318 | void SOFTSTOP() |
yong304 | 11:6deabd374c96 | 319 | { |
yong304 | 11:6deabd374c96 | 320 | |
yong304 | 11:6deabd374c96 | 321 | /* Building a list of motor control components. */ |
yong304 | 11:6deabd374c96 | 322 | L6470 **motors = x_nucleo_ihm02a1->get_components(); |
yong304 | 11:6deabd374c96 | 323 | /* Preparing each motor to perform a hard stop. */ |
yong304 | 11:6deabd374c96 | 324 | for (int m = 0; m < L6470DAISYCHAINSIZE; m++) { |
yong304 | 11:6deabd374c96 | 325 | motors[m]->prepare_soft_stop(); |
yong304 | 11:6deabd374c96 | 326 | } |
yong304 | 11:6deabd374c96 | 327 | |
yong304 | 11:6deabd374c96 | 328 | /* Performing the action on each motor at the same time. */ |
yong304 | 11:6deabd374c96 | 329 | x_nucleo_ihm02a1->perform_prepared_actions(); |
yong304 | 11:6deabd374c96 | 330 | |
yong304 | 11:6deabd374c96 | 331 | } |