2018年度計器mbed用プログラム

Dependencies:   BufferedSoftSerial2 INA226_ver1 mbed-rtos mbed SDFileSystem-RTOS

Fork of keiki2017 by albatross

Files at this revision

API Documentation at this revision

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]);