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@1:10f557e7216d, 2019-02-08 (annotated)
- Committer:
- stebonicelli
- Date:
- Fri Feb 08 15:24:48 2019 +0000
- Revision:
- 1:10f557e7216d
- Parent:
- 0:0da0fd430e20
- Child:
- 2:96ee24b5f266
First
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 | |
| stebonicelli | 1:10f557e7216d | 3 | #define MOTOR_ENABLE_PIN PA_8 |
| stebonicelli | 1:10f557e7216d | 4 | #define MOTOR_DIR_PIN PA_9 |
| 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; |
| stebonicelli | 1:10f557e7216d | 25 | } |
| stebonicelli | 1:10f557e7216d | 26 | |
| stebonicelli | 1:10f557e7216d | 27 | void motor_go_bwd() |
| stebonicelli | 1:10f557e7216d | 28 | { |
| stebonicelli | 1:10f557e7216d | 29 | motor_enable = 1; |
| stebonicelli | 1:10f557e7216d | 30 | motor_dir = 0; |
| stebonicelli | 1:10f557e7216d | 31 | } |
| stebonicelli | 1:10f557e7216d | 32 | |
| stebonicelli | 1:10f557e7216d | 33 | void motor_stop() |
| stebonicelli | 1:10f557e7216d | 34 | { |
| stebonicelli | 1:10f557e7216d | 35 | motor_enable = 0; |
| stebonicelli | 1:10f557e7216d | 36 | motor_dir = 0; |
| stebonicelli | 1:10f557e7216d | 37 | } |
| gidiana | 0:0da0fd430e20 | 38 | |
| stebonicelli | 1:10f557e7216d | 39 | void motor_set_home() |
| stebonicelli | 1:10f557e7216d | 40 | { |
| stebonicelli | 1:10f557e7216d | 41 | printf("END1: Released\n\r"); |
| stebonicelli | 1:10f557e7216d | 42 | motor_stop(); |
| stebonicelli | 1:10f557e7216d | 43 | |
| stebonicelli | 1:10f557e7216d | 44 | current_pose = 0; |
| stebonicelli | 1:10f557e7216d | 45 | pose = 0; |
| stebonicelli | 1:10f557e7216d | 46 | } |
| stebonicelli | 1:10f557e7216d | 47 | |
| stebonicelli | 1:10f557e7216d | 48 | void button_int_handler() |
| stebonicelli | 1:10f557e7216d | 49 | { |
| stebonicelli | 1:10f557e7216d | 50 | printf("BUTTON: Pressed\n\r"); |
| stebonicelli | 1:10f557e7216d | 51 | motor_go_fwd(); |
| stebonicelli | 1:10f557e7216d | 52 | } |
| gidiana | 0:0da0fd430e20 | 53 | |
| stebonicelli | 1:10f557e7216d | 54 | void end0_int_handler() |
| stebonicelli | 1:10f557e7216d | 55 | { |
| stebonicelli | 1:10f557e7216d | 56 | motor_stop(); |
| stebonicelli | 1:10f557e7216d | 57 | printf("END0: Pressed\n\r"); |
| stebonicelli | 1:10f557e7216d | 58 | motor_go_fwd(); |
| stebonicelli | 1:10f557e7216d | 59 | } |
| stebonicelli | 1:10f557e7216d | 60 | |
| stebonicelli | 1:10f557e7216d | 61 | void end0_released() |
| stebonicelli | 1:10f557e7216d | 62 | { |
| stebonicelli | 1:10f557e7216d | 63 | motor_stop(); |
| stebonicelli | 1:10f557e7216d | 64 | printf("END0: Released\n\r"); |
| stebonicelli | 1:10f557e7216d | 65 | } |
| gidiana | 0:0da0fd430e20 | 66 | |
| stebonicelli | 1:10f557e7216d | 67 | void end1_int_handler() |
| stebonicelli | 1:10f557e7216d | 68 | { |
| stebonicelli | 1:10f557e7216d | 69 | motor_stop(); |
| stebonicelli | 1:10f557e7216d | 70 | printf("END1: Pressed\n\r"); |
| stebonicelli | 1:10f557e7216d | 71 | motor_go_bwd(); |
| stebonicelli | 1:10f557e7216d | 72 | } |
| gidiana | 0:0da0fd430e20 | 73 | |
| stebonicelli | 1:10f557e7216d | 74 | // CAN |
| stebonicelli | 1:10f557e7216d | 75 | Thread canrxa; |
| gidiana | 0:0da0fd430e20 | 76 | |
| stebonicelli | 1:10f557e7216d | 77 | CAN can1(PA_11, PA_12); // RX, TX |
| stebonicelli | 1:10f557e7216d | 78 | |
| gidiana | 0:0da0fd430e20 | 79 | CANMessage messageIn; |
| gidiana | 0:0da0fd430e20 | 80 | CANMessage messageOut; |
| gidiana | 0:0da0fd430e20 | 81 | |
| stebonicelli | 1:10f557e7216d | 82 | int filter = can1.filter(0x030, 0x4FF, CANStandard); |
| stebonicelli | 1:10f557e7216d | 83 | |
| stebonicelli | 1:10f557e7216d | 84 | void canrx() |
| gidiana | 0:0da0fd430e20 | 85 | { |
| stebonicelli | 1:10f557e7216d | 86 | while(1) |
| stebonicelli | 1:10f557e7216d | 87 | { |
| stebonicelli | 1:10f557e7216d | 88 | if(can1.read(messageIn, filter)) |
| gidiana | 0:0da0fd430e20 | 89 | { |
| stebonicelli | 1:10f557e7216d | 90 | printf("CAN: mess %d\n\r", (messageIn.data[0] + (messageIn.data[1] << 8) + (messageIn.data[2] << 16) + (messageIn.data[3] << 24))); |
| stebonicelli | 1:10f557e7216d | 91 | printf("CANaacc: id %x \n\r ",messageIn.id); |
| gidiana | 0:0da0fd430e20 | 92 | } |
| stebonicelli | 1:10f557e7216d | 93 | |
| stebonicelli | 1:10f557e7216d | 94 | wait(100); |
| stebonicelli | 1:10f557e7216d | 95 | } |
| gidiana | 0:0da0fd430e20 | 96 | } |
| gidiana | 0:0da0fd430e20 | 97 | |
| stebonicelli | 1:10f557e7216d | 98 | |
| stebonicelli | 1:10f557e7216d | 99 | |
| stebonicelli | 1:10f557e7216d | 100 | /* Main ----------------------------------------------------------------------*/ |
| gidiana | 0:0da0fd430e20 | 101 | |
| gidiana | 0:0da0fd430e20 | 102 | int main() |
| gidiana | 0:0da0fd430e20 | 103 | { |
| stebonicelli | 1:10f557e7216d | 104 | // Motor Initialization |
| stebonicelli | 1:10f557e7216d | 105 | motor_stop(); |
| stebonicelli | 1:10f557e7216d | 106 | |
| stebonicelli | 1:10f557e7216d | 107 | end0.rise(&end0_int_handler); |
| stebonicelli | 1:10f557e7216d | 108 | end0.fall(&end0_released); |
| stebonicelli | 1:10f557e7216d | 109 | end1.rise(&end1_int_handler); |
| stebonicelli | 1:10f557e7216d | 110 | end1.fall(&motor_set_home); |
| stebonicelli | 1:10f557e7216d | 111 | |
| stebonicelli | 1:10f557e7216d | 112 | button.rise(&button_int_handler); |
| stebonicelli | 1:10f557e7216d | 113 | |
| stebonicelli | 1:10f557e7216d | 114 | printf("DONE: Motor Init\n\r"); |
| stebonicelli | 1:10f557e7216d | 115 | |
| stebonicelli | 1:10f557e7216d | 116 | // CAN Initialization |
| stebonicelli | 1:10f557e7216d | 117 | canrxa.start(canrx); |
| gidiana | 0:0da0fd430e20 | 118 | |
| stebonicelli | 1:10f557e7216d | 119 | printf("DONE: CAN Init\n\r"); |
| stebonicelli | 1:10f557e7216d | 120 | |
| stebonicelli | 1:10f557e7216d | 121 | |
| stebonicelli | 1:10f557e7216d | 122 | printf("Running!\n\r"); |
| stebonicelli | 1:10f557e7216d | 123 | |
| stebonicelli | 1:10f557e7216d | 124 | motor_enable = 1; |
| stebonicelli | 1:10f557e7216d | 125 | motor_dir = 0; |
| stebonicelli | 1:10f557e7216d | 126 | |
| stebonicelli | 1:10f557e7216d | 127 | while(true) |
| stebonicelli | 1:10f557e7216d | 128 | { |
| stebonicelli | 1:10f557e7216d | 129 | wait(1000); |
| stebonicelli | 1:10f557e7216d | 130 | } |
| stebonicelli | 1:10f557e7216d | 131 | } |
| gidiana | 0:0da0fd430e20 | 132 | |
| stebonicelli | 1:10f557e7216d | 133 |