for CAN communication between two mbeds

Files at this revision

API Documentation at this revision

Comitter:
YSB
Date:
Sat Jul 20 04:33:02 2013 +0000
Commit message:
TITANIKU CAN LIBRARY

Changed in this revision

IDDATA.h Show annotated file Show diff for this revision Revisions of this file
myCAN.cpp Show annotated file Show diff for this revision Revisions of this file
myCAN.h Show annotated file Show diff for this revision Revisions of this file
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