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@3:4f09afd29a27, 2019-03-27 (annotated)
- Committer:
- stebonicelli
- Date:
- Wed Mar 27 08:25:29 2019 +0000
- Revision:
- 3:4f09afd29a27
- Parent:
- 2:96ee24b5f266
- Child:
- 4:a5add1353920
can frame decode system
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 | 3:4f09afd29a27 | 77 | CAN can1(PB_8, PB_9); // RX, TX |
| stebonicelli | 1:10f557e7216d | 78 | |
| gidiana | 0:0da0fd430e20 | 79 | CANMessage messageIn; |
| gidiana | 0:0da0fd430e20 | 80 | CANMessage messageOut; |
| gidiana | 0:0da0fd430e20 | 81 | |
| gidiana | 2:96ee24b5f266 | 82 | |
| stebonicelli | 1:10f557e7216d | 83 | int filter = can1.filter(0x030, 0x4FF, CANStandard); |
| stebonicelli | 1:10f557e7216d | 84 | |
| stebonicelli | 1:10f557e7216d | 85 | void canrx() |
| gidiana | 0:0da0fd430e20 | 86 | { |
| stebonicelli | 1:10f557e7216d | 87 | while(1) |
| stebonicelli | 1:10f557e7216d | 88 | { |
| stebonicelli | 1:10f557e7216d | 89 | if(can1.read(messageIn, filter)) |
| gidiana | 0:0da0fd430e20 | 90 | { |
| gidiana | 2:96ee24b5f266 | 91 | pose = messageIn.data[0] + (messageIn.data[1] << 8) + (messageIn.data[2] << 16) + (messageIn.data[3] << 24); |
| gidiana | 2:96ee24b5f266 | 92 | printf("CAN: mess %d\n\r", pose); |
| stebonicelli | 1:10f557e7216d | 93 | printf("CANaacc: id %x \n\r ",messageIn.id); |
| gidiana | 2:96ee24b5f266 | 94 | if (pose==0) motor_go_bwd(); |
| gidiana | 2:96ee24b5f266 | 95 | if (pose==50) motor_stop(); |
| gidiana | 2:96ee24b5f266 | 96 | if (pose==100) motor_go_fwd(); |
| gidiana | 2:96ee24b5f266 | 97 | else motor_stop(); |
| gidiana | 0:0da0fd430e20 | 98 | } |
| stebonicelli | 1:10f557e7216d | 99 | |
| stebonicelli | 3:4f09afd29a27 | 100 | wait(0.05); |
| stebonicelli | 1:10f557e7216d | 101 | } |
| gidiana | 0:0da0fd430e20 | 102 | } |
| gidiana | 0:0da0fd430e20 | 103 | |
| stebonicelli | 1:10f557e7216d | 104 | |
| stebonicelli | 1:10f557e7216d | 105 | |
| stebonicelli | 1:10f557e7216d | 106 | /* Main ----------------------------------------------------------------------*/ |
| gidiana | 0:0da0fd430e20 | 107 | |
| gidiana | 0:0da0fd430e20 | 108 | int main() |
| gidiana | 0:0da0fd430e20 | 109 | { |
| stebonicelli | 1:10f557e7216d | 110 | // Motor Initialization |
| stebonicelli | 1:10f557e7216d | 111 | motor_stop(); |
| stebonicelli | 1:10f557e7216d | 112 | |
| gidiana | 2:96ee24b5f266 | 113 | //end0.rise(&end0_int_handler); |
| gidiana | 2:96ee24b5f266 | 114 | //end0.fall(&end0_released); |
| gidiana | 2:96ee24b5f266 | 115 | //end1.rise(&end1_int_handler); |
| gidiana | 2:96ee24b5f266 | 116 | //end1.fall(&motor_set_home); |
| stebonicelli | 1:10f557e7216d | 117 | |
| stebonicelli | 1:10f557e7216d | 118 | button.rise(&button_int_handler); |
| stebonicelli | 1:10f557e7216d | 119 | |
| stebonicelli | 1:10f557e7216d | 120 | printf("DONE: Motor Init\n\r"); |
| stebonicelli | 1:10f557e7216d | 121 | |
| stebonicelli | 1:10f557e7216d | 122 | // CAN Initialization |
| stebonicelli | 1:10f557e7216d | 123 | canrxa.start(canrx); |
| gidiana | 0:0da0fd430e20 | 124 | |
| stebonicelli | 1:10f557e7216d | 125 | printf("DONE: CAN Init\n\r"); |
| stebonicelli | 1:10f557e7216d | 126 | |
| stebonicelli | 1:10f557e7216d | 127 | |
| stebonicelli | 1:10f557e7216d | 128 | printf("Running!\n\r"); |
| stebonicelli | 1:10f557e7216d | 129 | |
| gidiana | 2:96ee24b5f266 | 130 | // motor_enable = 0; |
| gidiana | 2:96ee24b5f266 | 131 | // motor_dir = 0; |
| stebonicelli | 1:10f557e7216d | 132 | |
| stebonicelli | 1:10f557e7216d | 133 | while(true) |
| stebonicelli | 1:10f557e7216d | 134 | { |
| stebonicelli | 1:10f557e7216d | 135 | wait(1000); |
| stebonicelli | 1:10f557e7216d | 136 | } |
| stebonicelli | 1:10f557e7216d | 137 | } |
| gidiana | 0:0da0fd430e20 | 138 | |
| stebonicelli | 1:10f557e7216d | 139 |