for CAN communication between two mbeds

Committer:
YSB
Date:
Sat Jul 20 04:33:02 2013 +0000
Revision:
0:6e7d11ed7dc8
TITANIKU CAN LIBRARY

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YSB 0:6e7d11ed7dc8 1 #include "myCAN.h"
YSB 0:6e7d11ed7dc8 2 #include "IDDATA.h"
YSB 0:6e7d11ed7dc8 3
YSB 0:6e7d11ed7dc8 4 myCAN::myCAN(PinName rd,PinName td) : CAN(rd,td)
YSB 0:6e7d11ed7dc8 5 {
YSB 0:6e7d11ed7dc8 6 frequency(CAN_BAUD);
YSB 0:6e7d11ed7dc8 7 attach(this, &myCAN::rxHandler);
YSB 0:6e7d11ed7dc8 8
YSB 0:6e7d11ed7dc8 9 time[0]='0';
YSB 0:6e7d11ed7dc8 10 time[1]='0';
YSB 0:6e7d11ed7dc8 11 time[2]=':';
YSB 0:6e7d11ed7dc8 12 time[3]='0';
YSB 0:6e7d11ed7dc8 13 time[4]='0';
YSB 0:6e7d11ed7dc8 14 time[5]=':';
YSB 0:6e7d11ed7dc8 15 time[6]='0';
YSB 0:6e7d11ed7dc8 16 time[7]='0';
YSB 0:6e7d11ed7dc8 17 time[8]='\0';
YSB 0:6e7d11ed7dc8 18
YSB 0:6e7d11ed7dc8 19 latitude[0]='0';
YSB 0:6e7d11ed7dc8 20 latitude[1]='0';
YSB 0:6e7d11ed7dc8 21 latitude[2]='0';
YSB 0:6e7d11ed7dc8 22 latitude[3]='0';
YSB 0:6e7d11ed7dc8 23 latitude[4]=',';
YSB 0:6e7d11ed7dc8 24 latitude[5]='0';
YSB 0:6e7d11ed7dc8 25 latitude[6]='0';
YSB 0:6e7d11ed7dc8 26 latitude[7]='0';
YSB 0:6e7d11ed7dc8 27 latitude[8]='0';
YSB 0:6e7d11ed7dc8 28 latitude[9]='\0';
YSB 0:6e7d11ed7dc8 29
YSB 0:6e7d11ed7dc8 30 longitude[0]='0';
YSB 0:6e7d11ed7dc8 31 longitude[1]='0';
YSB 0:6e7d11ed7dc8 32 longitude[2]='0';
YSB 0:6e7d11ed7dc8 33 longitude[3]='0';
YSB 0:6e7d11ed7dc8 34 longitude[4]='0';
YSB 0:6e7d11ed7dc8 35 longitude[5]=',';
YSB 0:6e7d11ed7dc8 36 longitude[6]='0';
YSB 0:6e7d11ed7dc8 37 longitude[7]='0';
YSB 0:6e7d11ed7dc8 38 longitude[8]='0';
YSB 0:6e7d11ed7dc8 39 longitude[9]='0';
YSB 0:6e7d11ed7dc8 40 longitude[10]='\0';
YSB 0:6e7d11ed7dc8 41 }
YSB 0:6e7d11ed7dc8 42
YSB 0:6e7d11ed7dc8 43 void myCAN::send(char user)
YSB 0:6e7d11ed7dc8 44 {
YSB 0:6e7d11ed7dc8 45 if(user == MISSION) {
YSB 0:6e7d11ed7dc8 46 write(CANMessage(MISSION_STATUS,CANdata[MISSION_STATUS]));
YSB 0:6e7d11ed7dc8 47 } else if(user == LOGGER) {
YSB 0:6e7d11ed7dc8 48 write(CANMessage(GPS_TIME,CANdata[GPS_TIME]));
YSB 0:6e7d11ed7dc8 49 write(CANMessage(GPS_LAT_1,CANdata[GPS_LAT_1]));
YSB 0:6e7d11ed7dc8 50 write(CANMessage(GPS_LAT_2,CANdata[GPS_LAT_2]));
YSB 0:6e7d11ed7dc8 51 write(CANMessage(GPS_LON_1,CANdata[GPS_LON_1]));
YSB 0:6e7d11ed7dc8 52 write(CANMessage(GPS_LON_2,CANdata[GPS_LON_2]));
YSB 0:6e7d11ed7dc8 53 write(CANMessage(SCP1000_PRES_TEMP,CANdata[SCP1000_PRES_TEMP]));
YSB 0:6e7d11ed7dc8 54 write(CANMessage(ADXL345_XYZ,CANdata[ADXL345_XYZ]));
YSB 0:6e7d11ed7dc8 55 write(CANMessage(ITG3200_XYZ,CANdata[ITG3200_XYZ]));
YSB 0:6e7d11ed7dc8 56 } else {}
YSB 0:6e7d11ed7dc8 57 }
YSB 0:6e7d11ed7dc8 58
YSB 0:6e7d11ed7dc8 59 void myCAN::rxHandler(void)
YSB 0:6e7d11ed7dc8 60 {
YSB 0:6e7d11ed7dc8 61 if(read(msg)){
YSB 0:6e7d11ed7dc8 62 for(int i=0; i<8; i++) {
YSB 0:6e7d11ed7dc8 63 CANdata[msg.id][i]=msg.data[i];
YSB 0:6e7d11ed7dc8 64 }
YSB 0:6e7d11ed7dc8 65 }
YSB 0:6e7d11ed7dc8 66 }
YSB 0:6e7d11ed7dc8 67
YSB 0:6e7d11ed7dc8 68 void myCAN::make_logger_senddata(char* time,int NoS,char* latitude,char* longitude,int a_z,int temp,int pres)
YSB 0:6e7d11ed7dc8 69 {
YSB 0:6e7d11ed7dc8 70 for(int i=0; i<8; i++) {
YSB 0:6e7d11ed7dc8 71 CANdata[GPS_TIME][i] = time[i];
YSB 0:6e7d11ed7dc8 72 }
YSB 0:6e7d11ed7dc8 73 CANdata[GPS_LAT_2][1] = NoS;
YSB 0:6e7d11ed7dc8 74
YSB 0:6e7d11ed7dc8 75 for(int i=0; i<8; i++) {
YSB 0:6e7d11ed7dc8 76 CANdata[GPS_LAT_1][i] = latitude[i];
YSB 0:6e7d11ed7dc8 77 }
YSB 0:6e7d11ed7dc8 78 for(int i=0; i<1; i++) {
YSB 0:6e7d11ed7dc8 79 CANdata[GPS_LAT_2][i] = latitude[i+8];
YSB 0:6e7d11ed7dc8 80 }
YSB 0:6e7d11ed7dc8 81
YSB 0:6e7d11ed7dc8 82 for(int i=0; i<8; i++) {
YSB 0:6e7d11ed7dc8 83 CANdata[GPS_LON_1][i] = longitude[i];
YSB 0:6e7d11ed7dc8 84 }
YSB 0:6e7d11ed7dc8 85 for(int i=0; i<2; i++) {
YSB 0:6e7d11ed7dc8 86 CANdata[GPS_LON_2][i] = longitude[i+8];
YSB 0:6e7d11ed7dc8 87 }
YSB 0:6e7d11ed7dc8 88
YSB 0:6e7d11ed7dc8 89 CANdata[SCP1000_PRES_TEMP][0]=(char)((temp & 0xF0)>>4);
YSB 0:6e7d11ed7dc8 90 CANdata[SCP1000_PRES_TEMP][1]=(char)(temp & 0x0F);
YSB 0:6e7d11ed7dc8 91 CANdata[SCP1000_PRES_TEMP][2]=(char)((pres & 0xF0)>>4);
YSB 0:6e7d11ed7dc8 92 CANdata[SCP1000_PRES_TEMP][3]=(char)(pres & 0x0F);
YSB 0:6e7d11ed7dc8 93
YSB 0:6e7d11ed7dc8 94 CANdata[GPS_LAT_2][2] = a_z;
YSB 0:6e7d11ed7dc8 95 }
YSB 0:6e7d11ed7dc8 96
YSB 0:6e7d11ed7dc8 97 char* myCAN::get_time(void)
YSB 0:6e7d11ed7dc8 98 {
YSB 0:6e7d11ed7dc8 99 for(int i=0; i<8; i++) {
YSB 0:6e7d11ed7dc8 100 time[i] = CANdata[GPS_TIME][i];
YSB 0:6e7d11ed7dc8 101 }
YSB 0:6e7d11ed7dc8 102 return time;
YSB 0:6e7d11ed7dc8 103 }
YSB 0:6e7d11ed7dc8 104
YSB 0:6e7d11ed7dc8 105 char* myCAN::get_latitude(void)
YSB 0:6e7d11ed7dc8 106 {
YSB 0:6e7d11ed7dc8 107 for(int i=0; i<8; i++) {
YSB 0:6e7d11ed7dc8 108 latitude[i] = CANdata[GPS_LAT_1][i];
YSB 0:6e7d11ed7dc8 109 }
YSB 0:6e7d11ed7dc8 110 for(int i=0; i<1; i++) {
YSB 0:6e7d11ed7dc8 111 latitude[i+8] = CANdata[GPS_LAT_2][i];
YSB 0:6e7d11ed7dc8 112 }
YSB 0:6e7d11ed7dc8 113 return latitude;
YSB 0:6e7d11ed7dc8 114 }
YSB 0:6e7d11ed7dc8 115
YSB 0:6e7d11ed7dc8 116 char* myCAN::get_longitude(void)
YSB 0:6e7d11ed7dc8 117 {
YSB 0:6e7d11ed7dc8 118 for(int i=0; i<8; i++) {
YSB 0:6e7d11ed7dc8 119 longitude[i] = CANdata[GPS_LON_1][i];
YSB 0:6e7d11ed7dc8 120 }
YSB 0:6e7d11ed7dc8 121 for(int i=0; i<1; i++) {
YSB 0:6e7d11ed7dc8 122 longitude[i+8] = CANdata[GPS_LON_2][i];
YSB 0:6e7d11ed7dc8 123 }
YSB 0:6e7d11ed7dc8 124 return longitude;
YSB 0:6e7d11ed7dc8 125 }
YSB 0:6e7d11ed7dc8 126
YSB 0:6e7d11ed7dc8 127 int myCAN::get_NoS(void)
YSB 0:6e7d11ed7dc8 128 {
YSB 0:6e7d11ed7dc8 129 NoS = CANdata[GPS_LAT_2][1];
YSB 0:6e7d11ed7dc8 130 return NoS;
YSB 0:6e7d11ed7dc8 131 }
YSB 0:6e7d11ed7dc8 132 float myCAN::get_a_x(void)
YSB 0:6e7d11ed7dc8 133 {
YSB 0:6e7d11ed7dc8 134
YSB 0:6e7d11ed7dc8 135 return acel[0];
YSB 0:6e7d11ed7dc8 136 }
YSB 0:6e7d11ed7dc8 137 float myCAN::get_a_y(void)
YSB 0:6e7d11ed7dc8 138 {
YSB 0:6e7d11ed7dc8 139
YSB 0:6e7d11ed7dc8 140 return acel[1];
YSB 0:6e7d11ed7dc8 141 }
YSB 0:6e7d11ed7dc8 142
YSB 0:6e7d11ed7dc8 143 int myCAN::get_a_z(void)
YSB 0:6e7d11ed7dc8 144 {
YSB 0:6e7d11ed7dc8 145 acel[2] = CANdata[GPS_LAT_2][2];
YSB 0:6e7d11ed7dc8 146 return acel[2];
YSB 0:6e7d11ed7dc8 147 }
YSB 0:6e7d11ed7dc8 148
YSB 0:6e7d11ed7dc8 149 int myCAN::get_j_x(void)
YSB 0:6e7d11ed7dc8 150 {
YSB 0:6e7d11ed7dc8 151
YSB 0:6e7d11ed7dc8 152 return jail[0];
YSB 0:6e7d11ed7dc8 153 }
YSB 0:6e7d11ed7dc8 154
YSB 0:6e7d11ed7dc8 155 int myCAN::get_j_y(void)
YSB 0:6e7d11ed7dc8 156 {
YSB 0:6e7d11ed7dc8 157
YSB 0:6e7d11ed7dc8 158 return jail[1];
YSB 0:6e7d11ed7dc8 159 }
YSB 0:6e7d11ed7dc8 160
YSB 0:6e7d11ed7dc8 161 int myCAN::get_j_z(void)
YSB 0:6e7d11ed7dc8 162 {
YSB 0:6e7d11ed7dc8 163
YSB 0:6e7d11ed7dc8 164 return jail[2];
YSB 0:6e7d11ed7dc8 165 }
YSB 0:6e7d11ed7dc8 166
YSB 0:6e7d11ed7dc8 167 float myCAN::get_temp(void)
YSB 0:6e7d11ed7dc8 168 {
YSB 0:6e7d11ed7dc8 169 temp = (float)(((int)(CANdata[SCP1000_PRES_TEMP][0])<<4+(int)(CANdata[SCP1000_PRES_TEMP][1]))/20.0);
YSB 0:6e7d11ed7dc8 170 return temp;
YSB 0:6e7d11ed7dc8 171 }
YSB 0:6e7d11ed7dc8 172
YSB 0:6e7d11ed7dc8 173 int myCAN::get_pres(void)
YSB 0:6e7d11ed7dc8 174 {
YSB 0:6e7d11ed7dc8 175 pres = (int)(CANdata[SCP1000_PRES_TEMP][2])<<4+(int)(CANdata[SCP1000_PRES_TEMP][3]);
YSB 0:6e7d11ed7dc8 176 return pres;
YSB 0:6e7d11ed7dc8 177 }