Team DIANA / Mbed OS Arm_linear_can
Committer:
gidiana
Date:
Sat Apr 06 14:50:41 2019 +0000
Revision:
5:39910e745cf6
Parent:
4:a5add1353920
fix

Who changed what in which revision?

UserRevisionLine numberNew 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