program which tests the CAR project (concerning the CAN bus)

Dependencies:   mbed

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?

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