xbee library
Embed:
(wiki syntax)
Show/hide line numbers
HeptaXbee.cpp
00001 #include "HeptaXbee.h" 00002 #include "mbed.h" 00003 #include <stdarg.h> 00004 00005 HeptaXbee::HeptaXbee(PinName tx, PinName rx) : xbee(tx,rx) 00006 { 00007 rcmd = 0; 00008 cmdflag = 0; 00009 } 00010 void HeptaXbee::baud(int rate) 00011 { 00012 xbee.baud(rate); 00013 } 00014 void HeptaXbee::xbee_receive(int *xrcmd, int *xcmdflag) 00015 { 00016 xbee.attach(this,&HeptaXbee::commandget,Serial::RxIrq); 00017 //xbee.printf("ssXbeedata= %d,%d",HeptaXbee::rcmd,HeptaXbee::cmdflag); 00018 *xrcmd = HeptaXbee::rcmd; 00019 *xcmdflag = HeptaXbee::cmdflag; 00020 } 00021 00022 void HeptaXbee::initialize() 00023 { 00024 HeptaXbee::rcmd = 0; 00025 HeptaXbee::cmdflag = 0; 00026 } 00027 00028 void HeptaXbee::commandget() 00029 { 00030 HeptaXbee::rcmd=xbee.getc(); 00031 HeptaXbee::cmdflag = 1; 00032 //xbee.printf("Xbeedata= %d,%d",rcmd,cmdflag); 00033 } 00034 00035 //*gyro×3 = A,B,C *Accel×3 = D,E,F *magnetic×3 = G,H,I *latitude = J *longitude = K *altitude = L *battery = M *temperature = N 00036 void HeptaXbee::xbee_transmit(char dataA[],char dataB[],char dataC[],char dataD[],char dataE[], 00037 char dataF[],char dataG[],char dataH[],char dataI[],char dataJ[], 00038 char dataK[],char dataL[],char dataM[],char dataN[]) 00039 { 00040 char OutputData[255]; 00041 int output_num,numA,numB,numC,numD,numE,numF,numG,numH,numI,numJ,numK,numL,numM,numN; 00042 int sum = 0; 00043 int check; 00044 numA = sizeof(dataA) / sizeof(dataA[0]); 00045 numB = sizeof(dataB) / sizeof(dataB[0]); 00046 numC = sizeof(dataC) / sizeof(dataC[0]); 00047 numD = sizeof(dataD) / sizeof(dataD[0]); 00048 numE = sizeof(dataE) / sizeof(dataE[0]); 00049 numF = sizeof(dataF) / sizeof(dataF[0]); 00050 numG = sizeof(dataG) / sizeof(dataG[0]); 00051 numH = sizeof(dataH) / sizeof(dataH[0]); 00052 numI = sizeof(dataI) / sizeof(dataI[0]); 00053 numJ = sizeof(dataJ) / sizeof(dataJ[0])*2; 00054 numK = sizeof(dataK) / sizeof(dataK[0])*2; 00055 numL = sizeof(dataL) / sizeof(dataL[0]); 00056 numM = sizeof(dataM) / sizeof(dataM[0]); 00057 numN = sizeof(dataN) / sizeof(dataN[0]); 00058 output_num=numA+numB+numC+numD+numE+numF+numG+numH+numI+numJ+numK+numL+numM+numN; 00059 int N=0,i=0,ii; 00060 for(i = 0; i <= numA-1; i++) { 00061 OutputData[N+i] = dataA[i]; 00062 } 00063 N=i; 00064 for(i = 0; i <= numB-1; i++) { 00065 OutputData[N+i] = dataB[i]; 00066 } 00067 N=N+i; 00068 for(i = 0; i <= numC-1; i++) { 00069 OutputData[N+i] = dataC[i]; 00070 } 00071 N=N+i; 00072 for(i = 0; i <= numD-1; i++) { 00073 OutputData[N+i] = dataD[i]; 00074 } 00075 N=N+i; 00076 for(i = 0; i <= numE-1; i++) { 00077 OutputData[N+i] = dataE[i]; 00078 } 00079 N=N+i; 00080 for(i = 0; i <= numF-1; i++) { 00081 OutputData[N+i] = dataF[i]; 00082 } 00083 N=N+i; 00084 for(i = 0; i <= numG-1; i++) { 00085 OutputData[N+i] = dataG[i]; 00086 } 00087 N=N+i; 00088 for(i = 0; i <= numH-1; i++) { 00089 OutputData[N+i] = dataH[i]; 00090 } 00091 N=N+i; 00092 for(i = 0; i <= numI-1; i++) { 00093 OutputData[N+i] = dataI[i]; 00094 } 00095 N=N+i; 00096 for(i = 0; i <= numJ-1; i++) { 00097 OutputData[N+i] = dataJ[i]; 00098 } 00099 N=N+i; 00100 for(i = 0; i <= numK-1; i++) { 00101 OutputData[N+i] = dataK[i]; 00102 } 00103 N=N+i; 00104 for(i = 0; i <= numL-1; i++) { 00105 OutputData[N+i] = dataL[i]; 00106 } 00107 N=N+i; 00108 for(i = 0; i <= numM-1; i++) { 00109 OutputData[N+i] = dataM[i]; 00110 } 00111 N=N+i; 00112 for(i = 0; i <= numN-1; i++) { 00113 OutputData[N+i] = dataN[i]; 00114 } 00115 //check sum 00116 for(ii=0; ii<output_num; ii++) { 00117 sum = sum + OutputData[ii]; 00118 } 00119 check = (~sum)&0xFF; 00120 char check_sum[2],flame[2]; 00121 sprintf( check_sum, "%02X", check); 00122 sprintf( flame, "%02X", output_num); 00123 // transmit data 00124 //for(int i = 0;i<2;i++){ 00125 // xbee.putc(flame[i]);//frame length 00126 // } 00127 for(ii=0; ii<output_num; ii++) { 00128 xbee.putc(OutputData[ii]);//data 00129 } 00130 for(int i = 0; i<2; i++) { 00131 xbee.putc(check_sum[i]); 00132 } 00133 xbee.putc(0x0a);//endcode 00134 } 00135 void HeptaXbee::puts( char *s ) 00136 { 00137 while ( char c = *s++ ) 00138 xbee.putc( c ); 00139 } 00140 void HeptaXbee::scanf(char *format, ... ) 00141 { 00142 xbee.scanf(format); 00143 } 00144 void HeptaXbee::printf( char *format, ... ) 00145 { 00146 char s[ 100 ]; 00147 va_list args; 00148 00149 va_start( args, format ); 00150 vsnprintf( s, 100, format, args ); 00151 va_end( args ); 00152 00153 xbee.puts( s ); 00154 } 00155 char HeptaXbee::getc() 00156 { 00157 char character; 00158 character = xbee.getc(); 00159 return character; 00160 } 00161 00162 void HeptaXbee::putc(char data) 00163 { 00164 xbee.putc(data); 00165 }
Generated on Thu Jul 14 2022 07:06:50 by 1.7.2