for CAN communication between mbed

Dependents:   EM_Logger EM_Mission

Committer:
YSB
Date:
Fri Aug 16 08:21:49 2013 +0000
Revision:
3:3804d83c7377
Parent:
0:89073e0112db
20130816ver

Who changed what in which revision?

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