Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@5:39910e745cf6, 2019-04-06 (annotated)
- Committer:
- gidiana
- Date:
- Sat Apr 06 14:50:41 2019 +0000
- Revision:
- 5:39910e745cf6
- Parent:
- 4:a5add1353920
fix
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| stebonicelli | 1:10f557e7216d | 1 | #include "mbed.h" |
| stebonicelli | 1:10f557e7216d | 2 | |
| gidiana | 5:39910e745cf6 | 3 | #define MOTOR_ENABLE_PIN D7 |
| gidiana | 5:39910e745cf6 | 4 | #define MOTOR_DIR_PIN D8 |
| stebonicelli | 1:10f557e7216d | 5 | |
| stebonicelli | 1:10f557e7216d | 6 | // Utility |
| stebonicelli | 1:10f557e7216d | 7 | InterruptIn button(USER_BUTTON, PullUp); |
| stebonicelli | 1:10f557e7216d | 8 | DigitalOut led(LED1); |
| stebonicelli | 1:10f557e7216d | 9 | |
| stebonicelli | 1:10f557e7216d | 10 | // Motor Control |
| stebonicelli | 1:10f557e7216d | 11 | DigitalOut motor_enable(MOTOR_ENABLE_PIN); |
| stebonicelli | 1:10f557e7216d | 12 | DigitalOut motor_dir(MOTOR_DIR_PIN); |
| stebonicelli | 1:10f557e7216d | 13 | |
| stebonicelli | 1:10f557e7216d | 14 | InterruptIn end0(PC_12, PullUp); |
| stebonicelli | 1:10f557e7216d | 15 | InterruptIn end1(PC_11, PullUp); |
| stebonicelli | 1:10f557e7216d | 16 | InterruptIn enc(PC_10, PullUp); |
| gidiana | 0:0da0fd430e20 | 17 | |
| stebonicelli | 1:10f557e7216d | 18 | int current_pose = 0; |
| stebonicelli | 1:10f557e7216d | 19 | int pose = 0; |
| stebonicelli | 1:10f557e7216d | 20 | |
| stebonicelli | 1:10f557e7216d | 21 | void motor_go_fwd() |
| stebonicelli | 1:10f557e7216d | 22 | { |
| stebonicelli | 1:10f557e7216d | 23 | motor_enable = 1; |
| stebonicelli | 1:10f557e7216d | 24 | motor_dir = 1; |
| gidiana | 5:39910e745cf6 | 25 | printf("gofwd\r\n"); |
| stebonicelli | 1:10f557e7216d | 26 | } |
| stebonicelli | 1:10f557e7216d | 27 | |
| stebonicelli | 1:10f557e7216d | 28 | void motor_go_bwd() |
| stebonicelli | 1:10f557e7216d | 29 | { |
| stebonicelli | 1:10f557e7216d | 30 | motor_enable = 1; |
| stebonicelli | 1:10f557e7216d | 31 | motor_dir = 0; |
| gidiana | 5:39910e745cf6 | 32 | printf("gobwd\r\n"); |
| stebonicelli | 1:10f557e7216d | 33 | } |
| stebonicelli | 1:10f557e7216d | 34 | |
| stebonicelli | 1:10f557e7216d | 35 | void motor_stop() |
| stebonicelli | 1:10f557e7216d | 36 | { |
| stebonicelli | 1:10f557e7216d | 37 | motor_enable = 0; |
| stebonicelli | 1:10f557e7216d | 38 | motor_dir = 0; |
| gidiana | 5:39910e745cf6 | 39 | printf("stop\r\n"); |
| stebonicelli | 1:10f557e7216d | 40 | } |
| gidiana | 0:0da0fd430e20 | 41 | |
| stebonicelli | 1:10f557e7216d | 42 | void motor_set_home() |
| stebonicelli | 1:10f557e7216d | 43 | { |
| stebonicelli | 1:10f557e7216d | 44 | printf("END1: Released\n\r"); |
| stebonicelli | 1:10f557e7216d | 45 | motor_stop(); |
| stebonicelli | 1:10f557e7216d | 46 | |
| stebonicelli | 1:10f557e7216d | 47 | current_pose = 0; |
| stebonicelli | 1:10f557e7216d | 48 | pose = 0; |
| stebonicelli | 1:10f557e7216d | 49 | } |
| stebonicelli | 1:10f557e7216d | 50 | |
| stebonicelli | 1:10f557e7216d | 51 | void button_int_handler() |
| stebonicelli | 1:10f557e7216d | 52 | { |
| stebonicelli | 1:10f557e7216d | 53 | printf("BUTTON: Pressed\n\r"); |
| stebonicelli | 1:10f557e7216d | 54 | motor_go_fwd(); |
| stebonicelli | 1:10f557e7216d | 55 | } |
| gidiana | 0:0da0fd430e20 | 56 | |
| stebonicelli | 1:10f557e7216d | 57 | void end0_int_handler() |
| stebonicelli | 1:10f557e7216d | 58 | { |
| stebonicelli | 1:10f557e7216d | 59 | motor_stop(); |
| stebonicelli | 1:10f557e7216d | 60 | printf("END0: Pressed\n\r"); |
| stebonicelli | 1:10f557e7216d | 61 | motor_go_fwd(); |
| stebonicelli | 1:10f557e7216d | 62 | } |
| stebonicelli | 1:10f557e7216d | 63 | |
| stebonicelli | 1:10f557e7216d | 64 | void end0_released() |
| stebonicelli | 1:10f557e7216d | 65 | { |
| stebonicelli | 1:10f557e7216d | 66 | motor_stop(); |
| stebonicelli | 1:10f557e7216d | 67 | printf("END0: Released\n\r"); |
| stebonicelli | 1:10f557e7216d | 68 | } |
| gidiana | 0:0da0fd430e20 | 69 | |
| stebonicelli | 1:10f557e7216d | 70 | void end1_int_handler() |
| stebonicelli | 1:10f557e7216d | 71 | { |
| stebonicelli | 1:10f557e7216d | 72 | motor_stop(); |
| stebonicelli | 1:10f557e7216d | 73 | printf("END1: Pressed\n\r"); |
| stebonicelli | 1:10f557e7216d | 74 | motor_go_bwd(); |
| stebonicelli | 1:10f557e7216d | 75 | } |
| gidiana | 0:0da0fd430e20 | 76 | |
| stebonicelli | 1:10f557e7216d | 77 | // CAN |
| stebonicelli | 1:10f557e7216d | 78 | Thread canrxa; |
| gidiana | 0:0da0fd430e20 | 79 | |
| gidiana | 5:39910e745cf6 | 80 | CAN can1(PB_5, PB_6); // RX, TX |
| stebonicelli | 1:10f557e7216d | 81 | |
| gidiana | 0:0da0fd430e20 | 82 | CANMessage messageIn; |
| gidiana | 0:0da0fd430e20 | 83 | CANMessage messageOut; |
| gidiana | 0:0da0fd430e20 | 84 | |
| gidiana | 2:96ee24b5f266 | 85 | |
| stebonicelli | 1:10f557e7216d | 86 | int filter = can1.filter(0x030, 0x4FF, CANStandard); |
| stebonicelli | 1:10f557e7216d | 87 | |
| stebonicelli | 1:10f557e7216d | 88 | void canrx() |
| gidiana | 0:0da0fd430e20 | 89 | { |
| stebonicelli | 1:10f557e7216d | 90 | while(1) |
| stebonicelli | 1:10f557e7216d | 91 | { |
| gidiana | 5:39910e745cf6 | 92 | if(can1.read(messageIn, filter)&&messageIn.id==0x030) |
| gidiana | 0:0da0fd430e20 | 93 | { |
| gidiana | 2:96ee24b5f266 | 94 | pose = messageIn.data[0] + (messageIn.data[1] << 8) + (messageIn.data[2] << 16) + (messageIn.data[3] << 24); |
| gidiana | 2:96ee24b5f266 | 95 | printf("CAN: mess %d\n\r", pose); |
| stebonicelli | 1:10f557e7216d | 96 | printf("CANaacc: id %x \n\r ",messageIn.id); |
| stebonicelli | 4:a5add1353920 | 97 | if (pose==0) motor_stop(); |
| gidiana | 5:39910e745cf6 | 98 | else if (pose==1) motor_go_bwd(); |
| gidiana | 5:39910e745cf6 | 99 | else if (pose==2) motor_go_fwd(); |
| gidiana | 5:39910e745cf6 | 100 | |
| gidiana | 5:39910e745cf6 | 101 | //else motor_stop(); |
| gidiana | 0:0da0fd430e20 | 102 | } |
| stebonicelli | 1:10f557e7216d | 103 | |
| stebonicelli | 3:4f09afd29a27 | 104 | wait(0.05); |
| stebonicelli | 1:10f557e7216d | 105 | } |
| gidiana | 0:0da0fd430e20 | 106 | } |
| gidiana | 0:0da0fd430e20 | 107 | |
| stebonicelli | 1:10f557e7216d | 108 | |
| stebonicelli | 1:10f557e7216d | 109 | |
| stebonicelli | 1:10f557e7216d | 110 | /* Main ----------------------------------------------------------------------*/ |
| gidiana | 0:0da0fd430e20 | 111 | |
| gidiana | 0:0da0fd430e20 | 112 | int main() |
| gidiana | 0:0da0fd430e20 | 113 | { |
| gidiana | 5:39910e745cf6 | 114 | can1.frequency(125000); |
| stebonicelli | 1:10f557e7216d | 115 | // Motor Initialization |
| gidiana | 5:39910e745cf6 | 116 | // motor_stop(); |
| stebonicelli | 1:10f557e7216d | 117 | |
| gidiana | 2:96ee24b5f266 | 118 | //end0.rise(&end0_int_handler); |
| gidiana | 2:96ee24b5f266 | 119 | //end0.fall(&end0_released); |
| gidiana | 2:96ee24b5f266 | 120 | //end1.rise(&end1_int_handler); |
| gidiana | 2:96ee24b5f266 | 121 | //end1.fall(&motor_set_home); |
| stebonicelli | 1:10f557e7216d | 122 | |
| stebonicelli | 1:10f557e7216d | 123 | button.rise(&button_int_handler); |
| stebonicelli | 1:10f557e7216d | 124 | |
| stebonicelli | 1:10f557e7216d | 125 | printf("DONE: Motor Init\n\r"); |
| stebonicelli | 1:10f557e7216d | 126 | |
| stebonicelli | 1:10f557e7216d | 127 | // CAN Initialization |
| stebonicelli | 1:10f557e7216d | 128 | canrxa.start(canrx); |
| gidiana | 0:0da0fd430e20 | 129 | |
| stebonicelli | 1:10f557e7216d | 130 | printf("DONE: CAN Init\n\r"); |
| stebonicelli | 1:10f557e7216d | 131 | |
| stebonicelli | 1:10f557e7216d | 132 | |
| stebonicelli | 1:10f557e7216d | 133 | printf("Running!\n\r"); |
| stebonicelli | 1:10f557e7216d | 134 | |
| gidiana | 2:96ee24b5f266 | 135 | // motor_enable = 0; |
| gidiana | 2:96ee24b5f266 | 136 | // motor_dir = 0; |
| stebonicelli | 1:10f557e7216d | 137 | |
| stebonicelli | 1:10f557e7216d | 138 | while(true) |
| stebonicelli | 1:10f557e7216d | 139 | { |
| stebonicelli | 1:10f557e7216d | 140 | wait(1000); |
| stebonicelli | 1:10f557e7216d | 141 | } |
| stebonicelli | 1:10f557e7216d | 142 | } |
| gidiana | 0:0da0fd430e20 | 143 | |
| stebonicelli | 1:10f557e7216d | 144 |