2018年度計器mbed用プログラム
Dependencies: BufferedSoftSerial2 INA226_ver1 mbed-rtos mbed SDFileSystem-RTOS
Fork of keiki2017 by
Revision 42:73c3862e4c12, committed 2017-03-18
- Comitter:
- tsumagari
- Date:
- Sat Mar 18 14:09:42 2017 +0000
- Branch:
- Thread-gyogetsuMPU
- Parent:
- 41:1bd730c4840d
- Child:
- 46:c649987c4d84
- Commit message:
- 3?18
Changed in this revision
Cadence.h | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/Cadence.h Sat Mar 18 03:13:36 2017 +0000 +++ b/Cadence.h Sat Mar 18 14:09:42 2017 +0000 @@ -7,6 +7,7 @@ #include <string> DigitalOut led3(LED3); Timer cadenceT; +RawSerial pc(USBTX,USBRX); class Cadence : public RawSerial { private: @@ -15,10 +16,11 @@ protected: public: - string strC,strV; + char strV[5]; + char strC[5]; char data[DATAS_NUM],myBuff[BuffNum],c; string strData; - int dataCount, data_num; + int dataCount, data_num, strlength; double cadence, voltage; Cadence(PinName tx, PinName rx, const char* name = NULL) : RawSerial(tx, rx) { for(int i=0; i<DATAS_NUM; i++) data[i]= '\0'; @@ -28,8 +30,10 @@ baud(115200); cadence=0; voltage=0; + strcpy(strC,"0000"); + strcpy(strV,"0000"); cadenceT.start(); -// attach(this, &Cadence::readData, RawSerial::RxIrq); + attach(this, &Cadence::readData, RawSerial::RxIrq); } int checkInt(const char c[]) { for(int i = 0; i<strlen(c); i++) { @@ -40,53 +44,66 @@ } void readData() { if(readable()) { + led3 = 1; cadenceT.reset(); cadenceT.start(); dataCount = 0; do { myBuff[dataCount] = getc(); dataCount++; - } while(cadenceT.read_us()<1 || myBuff[dataCount-1] != '\n'); + } while(cadenceT.read_ms()<10 && myBuff[dataCount-1] != '\n'); + if(dataCount < DATAS_NUM-4) return; } if(dataCount != 0) { - dataCount = 0; - led3 = 1; - for(int i = 0; i< strlen(myBuff); i ++) - strData += myBuff[i]; - //strData = string(myBuff,DATAS_NUM); - if( int strlength = strData.length() > DATAS_NUM-4 && strlength < DATAS_NUM ) { -// for(int i = 0; i<4; i++){ -// strC += data[dataCount-6+i]; -// strV += data[dataCount-43+i]; +// led3 = 1;//Ticker内でTimer&stringを使うとフリーズ +// strData = "hello"; +// pc.printf("%s\n\r",strData.c_str()); +// for(int i = 0; i<strlen(myBuff); i++) { +// pc.printf("mybuff[%d]:%c\n\r",i,myBuff[i]); +// strData += myBuff[i]; +// led3 = 0; // } -// if( checkInt(strC) ) sscanf(strC,"%lf",&cadence); -// if( checkInt(strV) ) sscanf(strV,"%lf",&voltage); +// strData = string(myBuff,DATAS_NUM); + strlength = strlen(myBuff)/*strData.length()*/; + if( strlength > DATAS_NUM-4 && strlength <= DATAS_NUM ) { + for(int i = 0; i<4; i++){ + strC[i] = myBuff[strlength-7+i]; + strV[i] = myBuff[strlength-44+i]; + } + if( checkInt(strC) ) { + sscanf(strC,"%lf",&cadence); + cadence /= 6.0; + } + if( checkInt(strV) ) { + sscanf(strV,"%lf",&voltage); + voltage *= 0.001; + } +// switch (strlength) { +// case DATAS_NUM-3 : +// strData.erase(0,2); +// break; +// case DATAS_NUM-2 : +// strData.erase(0,3); +// break; +// case DATAS_NUM-1 : +// strData.erase(0,4); +// break; +// case DATAS_NUM : +// strData.erase(0,5); +// } +// strV = strData.substr(27,4); +// strC = strData.substr(64,4); +// if( checkInt( strV.c_str() ) ) sscanf(strV.c_str(),"%lf",&voltage); +// if( checkInt( strC.c_str() ) ) sscanf(strC.c_str(),"%lf",&cadence); - switch (strlength) { - case DATAS_NUM-3 : - strData.erase(0,2); - break; - case DATAS_NUM-2 : - strData.erase(0,3); - break; - case DATAS_NUM-1 : - strData.erase(0,4); - break; - case DATAS_NUM : - strData.erase(0,5); - } - strV = strData.substr(27,4); - strC = strData.substr(64,4); - if( checkInt( strV.c_str() ) ) sscanf(strV.c_str(),"%lf",&voltage); - if( checkInt( strC.c_str() ) ) sscanf(strC.c_str(),"%lf",&cadence); - - cadence /= 6.0; - voltage *= 0.001; +// pc.printf("%d\n\r",strlen(strV)); }//strlength -// led3 = 0; - for (int i = 0; i < strlen(myBuff); i++) myBuff[i] = '\0'; + pc.printf("\n\rmyBuff:%s(%d)\n\r",myBuff,strlength); + pc.printf("strC:%s\n\r",strC); + for (int i = 0; i < strlength; i++) myBuff[i] = '\0'; dataCount = 0; }//if(dataCount != 0) + led3 = 0; }//readData }; #endif \ No newline at end of file
--- a/main.cpp Sat Mar 18 03:13:36 2017 +0000 +++ b/main.cpp Sat Mar 18 14:09:42 2017 +0000 @@ -34,7 +34,7 @@ //SDFileSystem sd(p5, p6, p7, p8, "sd"); //FILE* fp; -RawSerial pc(USBTX,USBRX); +//RawSerial pc(USBTX,USBRX); RawSerial android(p9,p10); BufferedSoftSerial soudaSerial(p17,p18); BufferedSoftSerial twe(p11,p12); @@ -133,7 +133,7 @@ // SdInit(); // MpuInit(); //writeDatasTicker.attach(&WriteDatas,1); - cadenceUpdateTicker.attach(&updateCadence, 1); +// cadenceUpdateTicker.attach(&updateCadence, 0.2); //-----for InterruptMode of sonar---------------------------- // sonarPin.rise(&sonarInterruptStart); @@ -290,10 +290,10 @@ twe.printf("%f,%f,%f\r\n",airSpeed,sonarDist,cadence_twe.cadence); pc.printf("%f,%f,%f\n\r",pitch,roll,yaw); //pc.printf("%f,%f,%f\n\r",calcKXdeg(kx_X.read()),calcKXdeg(KX_Y),calcKXdeg(KX_Z)); - pc.printf("%f,%f\n\r",airSpeed,sonarDist); - for(int i = 0; i < cadence_twe.strData.length(); i++){ - pc.printf("%c",*(cadence_twe.strData.c_str()+i)); - } + pc.printf("%f,%f,%f\n\r",airSpeed,sonarDist,cadence_twe.cadence); +// for(int i = 0; i < strlen(cadence_twe.myBuff); i++){ +// pc.printf("%c",*(cadence_twe.myBuff+i)); +// } if(android.writeable()){ // for(int i = 0; i<SOUDA_DATAS_NUM; i++){ // android.printf("%i,",soudaDatas[i]);