for CAN communication between two mbeds
Revision 0:6e7d11ed7dc8, committed 2013-07-20
- Comitter:
- YSB
- Date:
- Sat Jul 20 04:33:02 2013 +0000
- Commit message:
- TITANIKU CAN LIBRARY
Changed in this revision
diff -r 000000000000 -r 6e7d11ed7dc8 IDDATA.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IDDATA.h Sat Jul 20 04:33:02 2013 +0000 @@ -0,0 +1,15 @@ +#define CAN_BAUD 400000 + +#define MISSION 0 +#define LOGGER 1 + +#define GPS_TIME 0x01 +#define GPS_LAT_1 0x02 +#define GPS_LAT_2 0x03 +#define GPS_LON_1 0x04 +#define GPS_LON_2 0x05 +#define SCP1000_PRES_TEMP 0x06 +#define ADXL345_XYZ 0x07 +#define ITG3200_XYZ 0x08 + +#define MISSION_STATUS 0x00 \ No newline at end of file
diff -r 000000000000 -r 6e7d11ed7dc8 myCAN.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/myCAN.cpp Sat Jul 20 04:33:02 2013 +0000 @@ -0,0 +1,177 @@ +#include "myCAN.h" +#include "IDDATA.h" + +myCAN::myCAN(PinName rd,PinName td) : CAN(rd,td) +{ + frequency(CAN_BAUD); + attach(this, &myCAN::rxHandler); + + time[0]='0'; + time[1]='0'; + time[2]=':'; + time[3]='0'; + time[4]='0'; + time[5]=':'; + time[6]='0'; + time[7]='0'; + time[8]='\0'; + + latitude[0]='0'; + latitude[1]='0'; + latitude[2]='0'; + latitude[3]='0'; + latitude[4]=','; + latitude[5]='0'; + latitude[6]='0'; + latitude[7]='0'; + latitude[8]='0'; + latitude[9]='\0'; + + longitude[0]='0'; + longitude[1]='0'; + longitude[2]='0'; + longitude[3]='0'; + longitude[4]='0'; + longitude[5]=','; + longitude[6]='0'; + longitude[7]='0'; + longitude[8]='0'; + longitude[9]='0'; + longitude[10]='\0'; +} + +void myCAN::send(char user) +{ + if(user == MISSION) { + write(CANMessage(MISSION_STATUS,CANdata[MISSION_STATUS])); + } else if(user == LOGGER) { + write(CANMessage(GPS_TIME,CANdata[GPS_TIME])); + write(CANMessage(GPS_LAT_1,CANdata[GPS_LAT_1])); + write(CANMessage(GPS_LAT_2,CANdata[GPS_LAT_2])); + write(CANMessage(GPS_LON_1,CANdata[GPS_LON_1])); + write(CANMessage(GPS_LON_2,CANdata[GPS_LON_2])); + write(CANMessage(SCP1000_PRES_TEMP,CANdata[SCP1000_PRES_TEMP])); + write(CANMessage(ADXL345_XYZ,CANdata[ADXL345_XYZ])); + write(CANMessage(ITG3200_XYZ,CANdata[ITG3200_XYZ])); + } else {} +} + +void myCAN::rxHandler(void) +{ + if(read(msg)){ + for(int i=0; i<8; i++) { + CANdata[msg.id][i]=msg.data[i]; + } + } +} + +void myCAN::make_logger_senddata(char* time,int NoS,char* latitude,char* longitude,int a_z,int temp,int pres) +{ + for(int i=0; i<8; i++) { + CANdata[GPS_TIME][i] = time[i]; + } + CANdata[GPS_LAT_2][1] = NoS; + + for(int i=0; i<8; i++) { + CANdata[GPS_LAT_1][i] = latitude[i]; + } + for(int i=0; i<1; i++) { + CANdata[GPS_LAT_2][i] = latitude[i+8]; + } + + for(int i=0; i<8; i++) { + CANdata[GPS_LON_1][i] = longitude[i]; + } + for(int i=0; i<2; i++) { + CANdata[GPS_LON_2][i] = longitude[i+8]; + } + + CANdata[SCP1000_PRES_TEMP][0]=(char)((temp & 0xF0)>>4); + CANdata[SCP1000_PRES_TEMP][1]=(char)(temp & 0x0F); + CANdata[SCP1000_PRES_TEMP][2]=(char)((pres & 0xF0)>>4); + CANdata[SCP1000_PRES_TEMP][3]=(char)(pres & 0x0F); + + CANdata[GPS_LAT_2][2] = a_z; +} + +char* myCAN::get_time(void) +{ + for(int i=0; i<8; i++) { + time[i] = CANdata[GPS_TIME][i]; + } + return time; +} + +char* myCAN::get_latitude(void) +{ + for(int i=0; i<8; i++) { + latitude[i] = CANdata[GPS_LAT_1][i]; + } + for(int i=0; i<1; i++) { + latitude[i+8] = CANdata[GPS_LAT_2][i]; + } + return latitude; +} + + char* myCAN::get_longitude(void) +{ + for(int i=0; i<8; i++) { + longitude[i] = CANdata[GPS_LON_1][i]; + } + for(int i=0; i<1; i++) { + longitude[i+8] = CANdata[GPS_LON_2][i]; + } + return longitude; +} + +int myCAN::get_NoS(void) +{ + NoS = CANdata[GPS_LAT_2][1]; + return NoS; +} +float myCAN::get_a_x(void) +{ + + return acel[0]; +} +float myCAN::get_a_y(void) +{ + + return acel[1]; +} + +int myCAN::get_a_z(void) +{ + acel[2] = CANdata[GPS_LAT_2][2]; + return acel[2]; +} + +int myCAN::get_j_x(void) +{ + + return jail[0]; +} + +int myCAN::get_j_y(void) +{ + + return jail[1]; +} + +int myCAN::get_j_z(void) +{ + + return jail[2]; +} + +float myCAN::get_temp(void) +{ + temp = (float)(((int)(CANdata[SCP1000_PRES_TEMP][0])<<4+(int)(CANdata[SCP1000_PRES_TEMP][1]))/20.0); + return temp; +} + +int myCAN::get_pres(void) +{ + pres = (int)(CANdata[SCP1000_PRES_TEMP][2])<<4+(int)(CANdata[SCP1000_PRES_TEMP][3]); + return pres; +} \ No newline at end of file
diff -r 000000000000 -r 6e7d11ed7dc8 myCAN.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/myCAN.h Sat Jul 20 04:33:02 2013 +0000 @@ -0,0 +1,52 @@ +#ifndef MBED_MYCAN_H +#define MBED_MYCAN_h + +#include "mbed.h" + +class myCAN: public CAN{ + +public: + + myCAN(PinName rd,PinName td); + + char* get_time(void); + char* get_latitude(void); + char* get_longitude(void); + int get_NoS(void); + + float get_temp(void); + int get_pres(void); + + float get_a_x(void); + float get_a_y(void); + int get_a_z(void); + int get_j_x(void); + int get_j_y(void); + int get_j_z(void); + + void make_logger_senddata(char* time,int NoS,char* latitude,char* longitude,int a_z,int temp,int pres); + void make_mission_senddata(void); + + void send(char user); + +private: + + char CANdata[9][8]; + CANMessage msg; + + char time[9]; //= {'0','0',':','0','0',':','0','0','\0'}; + int NoS; + char latitude[10]; + char longitude[11]; + + int acel[3]; + int jail[3]; + + int temp; + int pres; + + + void rxHandler(void); +}; + +#endif \ No newline at end of file