program which tests the CAR project (concerning the CAN bus)
main.cpp@1:8446a0d14877, 2015-08-31 (annotated)
- Committer:
- mariob
- Date:
- Mon Aug 31 22:27:29 2015 +0000
- Revision:
- 1:8446a0d14877
- Parent:
- 0:8097eeede645
program which tests the CAR project (concerning the CAN comunication)
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| mariob | 0:8097eeede645 | 1 | #include "mbed.h" |
| mariob | 0:8097eeede645 | 2 | |
| mariob | 0:8097eeede645 | 3 | #include "net.hpp" |
| mariob | 0:8097eeede645 | 4 | |
| mariob | 0:8097eeede645 | 5 | /* |
| mariob | 0:8097eeede645 | 6 | Ticker ticker; |
| mariob | 0:8097eeede645 | 7 | DigitalOut led1(LED1); |
| mariob | 0:8097eeede645 | 8 | DigitalOut led2(LED2); |
| mariob | 0:8097eeede645 | 9 | CAN can1(p9, p10); |
| mariob | 0:8097eeede645 | 10 | CAN can2(p30, p29); |
| mariob | 0:8097eeede645 | 11 | char counter = 0; |
| mariob | 0:8097eeede645 | 12 | |
| mariob | 0:8097eeede645 | 13 | void send() { |
| mariob | 0:8097eeede645 | 14 | printf("send()\r\n"); |
| mariob | 0:8097eeede645 | 15 | if(can1.write(CANMessage(1337, &counter, 1))) { |
| mariob | 0:8097eeede645 | 16 | printf("wloop()\r\n"); |
| mariob | 0:8097eeede645 | 17 | counter++; |
| mariob | 0:8097eeede645 | 18 | printf("Message sent: %d\r\n", counter); |
| mariob | 0:8097eeede645 | 19 | } |
| mariob | 0:8097eeede645 | 20 | led1 = !led1; |
| mariob | 0:8097eeede645 | 21 | } |
| mariob | 0:8097eeede645 | 22 | */ |
| mariob | 0:8097eeede645 | 23 | |
| mariob | 0:8097eeede645 | 24 | |
| mariob | 0:8097eeede645 | 25 | Ticker ticker; |
| mariob | 0:8097eeede645 | 26 | |
| mariob | 0:8097eeede645 | 27 | DigitalOut led_body(LED1); |
| mariob | 0:8097eeede645 | 28 | DigitalOut led_engine(LED2); |
| mariob | 0:8097eeede645 | 29 | DigitalOut led_time(LED3); |
| mariob | 1:8446a0d14877 | 30 | DigitalOut led_driver(LED4); |
| mariob | 0:8097eeede645 | 31 | |
| mariob | 0:8097eeede645 | 32 | CAN can(p9, p10); |
| mariob | 0:8097eeede645 | 33 | |
| mariob | 0:8097eeede645 | 34 | can_cmd_body_t can_cmd_body; |
| mariob | 1:8446a0d14877 | 35 | can_cmd_engine_t can_cmd_engine; |
| mariob | 1:8446a0d14877 | 36 | can_cmd_driver_t can_cmd_driver; |
| mariob | 1:8446a0d14877 | 37 | can_cmd_time_t can_cmd_time; |
| mariob | 0:8097eeede645 | 38 | |
| mariob | 0:8097eeede645 | 39 | int counter = 0; |
| mariob | 1:8446a0d14877 | 40 | int echo = 0; |
| mariob | 0:8097eeede645 | 41 | |
| mariob | 1:8446a0d14877 | 42 | #define BODY_ 4 |
| mariob | 1:8446a0d14877 | 43 | #define ENGINE_ 2 |
| mariob | 1:8446a0d14877 | 44 | #define DRIVER_ 5 |
| mariob | 1:8446a0d14877 | 45 | #define TIME_ 11 |
| mariob | 0:8097eeede645 | 46 | |
| mariob | 0:8097eeede645 | 47 | void send() { |
| mariob | 1:8446a0d14877 | 48 | //printf("send()\r\n"); |
| mariob | 0:8097eeede645 | 49 | |
| mariob | 0:8097eeede645 | 50 | static int body_n_sent = 0; |
| mariob | 1:8446a0d14877 | 51 | static int engine_n_sent = 0; |
| mariob | 1:8446a0d14877 | 52 | static int driver_n_sent = 0; |
| mariob | 1:8446a0d14877 | 53 | static int time_n_sent = 0; |
| mariob | 0:8097eeede645 | 54 | |
| mariob | 0:8097eeede645 | 55 | counter++; |
| mariob | 0:8097eeede645 | 56 | |
| mariob | 0:8097eeede645 | 57 | if ((counter%BODY_)==0) { |
| mariob | 0:8097eeede645 | 58 | can_cmd_body.payload.msg.light_r = (body_n_sent&0x0001)==0x0001; |
| mariob | 0:8097eeede645 | 59 | can_cmd_body.payload.msg.light_l = (body_n_sent&0x0002)==0x0002; |
| mariob | 0:8097eeede645 | 60 | can_cmd_body.payload.msg.light_c = (body_n_sent&0x0004)==0x0004; |
| mariob | 0:8097eeede645 | 61 | if(can.write(CANMessage(CAN_CMD_BODY_ID, (char*)(can_cmd_body.payload.buf), 4))) |
| mariob | 1:8446a0d14877 | 62 | led_body = !led_body;//printf("BODY OK\r\n"); |
| mariob | 0:8097eeede645 | 63 | else |
| mariob | 0:8097eeede645 | 64 | printf("BODY NOT OK\r\n"); |
| mariob | 1:8446a0d14877 | 65 | |
| mariob | 0:8097eeede645 | 66 | body_n_sent++; |
| mariob | 0:8097eeede645 | 67 | } |
| mariob | 1:8446a0d14877 | 68 | |
| mariob | 1:8446a0d14877 | 69 | if ((counter%ENGINE_)==0) { |
| mariob | 1:8446a0d14877 | 70 | can_cmd_engine.payload.msg.steering = engine_n_sent; |
| mariob | 1:8446a0d14877 | 71 | can_cmd_engine.payload.msg.power = engine_n_sent+2; |
| mariob | 1:8446a0d14877 | 72 | can_cmd_engine.payload.msg.direction = engine_n_sent%2; |
| mariob | 1:8446a0d14877 | 73 | can_cmd_engine.payload.msg.breaking = (engine_n_sent%2)?0:1; |
| mariob | 1:8446a0d14877 | 74 | if(can.write(CANMessage(CAN_CMD_ENGINE_ID, (char*)(can_cmd_engine.payload.buf), 4))) |
| mariob | 1:8446a0d14877 | 75 | led_engine = !led_engine;//printf("ENGINE OK\r\n"); |
| mariob | 1:8446a0d14877 | 76 | else |
| mariob | 1:8446a0d14877 | 77 | printf("ENGINE NOT OK\r\n"); |
| mariob | 1:8446a0d14877 | 78 | |
| mariob | 1:8446a0d14877 | 79 | engine_n_sent++; |
| mariob | 1:8446a0d14877 | 80 | } |
| mariob | 1:8446a0d14877 | 81 | |
| mariob | 1:8446a0d14877 | 82 | if ((counter%DRIVER_)==0) { |
| mariob | 1:8446a0d14877 | 83 | can_cmd_driver.payload.msg.cmd = 0x0A0A; |
| mariob | 1:8446a0d14877 | 84 | echo = counter; |
| mariob | 1:8446a0d14877 | 85 | can_cmd_driver.payload.msg.data = counter; |
| mariob | 1:8446a0d14877 | 86 | if(can.write(CANMessage(CAN_CMD_DRIVER_ID, (char*)(can_cmd_driver.payload.buf), 8))) |
| mariob | 1:8446a0d14877 | 87 | led_driver = !led_driver;//printf("DRIVER OK\r\n"); |
| mariob | 1:8446a0d14877 | 88 | else |
| mariob | 1:8446a0d14877 | 89 | printf("DRIVER NOT OK\r\n"); |
| mariob | 1:8446a0d14877 | 90 | |
| mariob | 1:8446a0d14877 | 91 | driver_n_sent++; |
| mariob | 1:8446a0d14877 | 92 | } |
| mariob | 1:8446a0d14877 | 93 | |
| mariob | 1:8446a0d14877 | 94 | if ((counter%TIME_)==0) { |
| mariob | 1:8446a0d14877 | 95 | can_cmd_time.payload.msg.time = time(NULL); |
| mariob | 1:8446a0d14877 | 96 | if(can.write(CANMessage(CAN_CMD_TIME_ID, (char*)(can_cmd_time.payload.buf), 4))) |
| mariob | 1:8446a0d14877 | 97 | led_time = !led_time;//printf("TIME OK\r\n"); |
| mariob | 1:8446a0d14877 | 98 | else |
| mariob | 1:8446a0d14877 | 99 | printf("TIME NOT OK\r\n"); |
| mariob | 1:8446a0d14877 | 100 | |
| mariob | 1:8446a0d14877 | 101 | time_n_sent++; |
| mariob | 1:8446a0d14877 | 102 | } |
| mariob | 0:8097eeede645 | 103 | |
| mariob | 0:8097eeede645 | 104 | } |
| mariob | 0:8097eeede645 | 105 | |
| mariob | 0:8097eeede645 | 106 | |
| mariob | 0:8097eeede645 | 107 | int main() { |
| mariob | 0:8097eeede645 | 108 | /* |
| mariob | 0:8097eeede645 | 109 | printf("main()\r\n"); |
| mariob | 0:8097eeede645 | 110 | ticker.attach(&send, 1); |
| mariob | 0:8097eeede645 | 111 | CANMessage msg; |
| mariob | 0:8097eeede645 | 112 | while(1) { |
| mariob | 0:8097eeede645 | 113 | printf("loop()\r\n"); |
| mariob | 0:8097eeede645 | 114 | if(can2.read(msg)) { |
| mariob | 0:8097eeede645 | 115 | printf("Message received: %d\r\n", msg.data[0]); |
| mariob | 0:8097eeede645 | 116 | led2 = !led2; |
| mariob | 0:8097eeede645 | 117 | } |
| mariob | 0:8097eeede645 | 118 | wait(0.2); |
| mariob | 0:8097eeede645 | 119 | } |
| mariob | 0:8097eeede645 | 120 | */ |
| mariob | 0:8097eeede645 | 121 | |
| mariob | 0:8097eeede645 | 122 | printf("main()\r\n"); |
| mariob | 1:8446a0d14877 | 123 | ticker.attach(&send, 0.5); |
| mariob | 1:8446a0d14877 | 124 | set_time(0); |
| mariob | 0:8097eeede645 | 125 | CANMessage msg; |
| mariob | 0:8097eeede645 | 126 | while(1) { |
| mariob | 0:8097eeede645 | 127 | if(can.read(msg)) { |
| mariob | 1:8446a0d14877 | 128 | switch(msg.id) { |
| mariob | 1:8446a0d14877 | 129 | case CAN_CMD_BODY_ID: |
| mariob | 1:8446a0d14877 | 130 | can_sts_body_payload_t x; |
| mariob | 1:8446a0d14877 | 131 | x.buf[0] = msg.data[0]; x.buf[1] = msg.data[1]; x.buf[2] = msg.data[2]; x.buf[3] = msg.data[3]; |
| mariob | 1:8446a0d14877 | 132 | x.buf[4] = msg.data[4]; x.buf[5] = msg.data[5]; x.buf[6] = msg.data[6]; x.buf[7] = msg.data[7]; |
| mariob | 1:8446a0d14877 | 133 | printf("Message received: %d %d %d %d\r\n", x.buf[0], x.msg.eye_back_l, x.msg.eye_back_r, x.msg.eye_front); |
| mariob | 1:8446a0d14877 | 134 | break; |
| mariob | 1:8446a0d14877 | 135 | case CAN_STS_DRIVER_ID: |
| mariob | 1:8446a0d14877 | 136 | can_sts_driver_payload_t y; |
| mariob | 1:8446a0d14877 | 137 | y.buf[0] = msg.data[0]; y.buf[1] = msg.data[1]; y.buf[2] = msg.data[2]; y.buf[3] = msg.data[3]; |
| mariob | 1:8446a0d14877 | 138 | if (y.msg.data == echo) |
| mariob | 1:8446a0d14877 | 139 | printf("ECHO %d\r\n", y.msg.data); |
| mariob | 1:8446a0d14877 | 140 | else |
| mariob | 1:8446a0d14877 | 141 | printf("NO ECHO %d\r\n", y.msg.data); |
| mariob | 1:8446a0d14877 | 142 | break; |
| mariob | 1:8446a0d14877 | 143 | } |
| mariob | 0:8097eeede645 | 144 | } |
| mariob | 0:8097eeede645 | 145 | wait(1.0); |
| mariob | 0:8097eeede645 | 146 | } |
| mariob | 0:8097eeede645 | 147 | } |
Mario Bambagini