Team DIANA / Mbed OS Arm_linear_can
Committer:
stebonicelli
Date:
Sat Apr 06 09:36:33 2019 +0000
Revision:
4:a5add1353920
Parent:
3:4f09afd29a27
Child:
5:39910e745cf6
fixed commands

Who changed what in which revision?

UserRevisionLine numberNew 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);
stebonicelli 4:a5add1353920 94 if (pose==1) motor_go_bwd();
stebonicelli 4:a5add1353920 95 if (pose==0) motor_stop();
stebonicelli 4:a5add1353920 96 if (pose==2) 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