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 03:13:36 2017 +0000
Branch:
Thread-gyogetsuMPU
Parent:
40:f15c11485e95
Child:
42:73c3862e4c12
Commit message:
Cadence.h?readData??????ver.???myBuff?string??????????????

Changed in this revision

Cadence.h Show annotated file Show diff for this revision Revisions of this file
SDFileSystem.lib 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
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- a/Cadence.h	Sun Mar 12 10:56:54 2017 +0000
+++ b/Cadence.h	Sat Mar 18 03:13:36 2017 +0000
@@ -6,92 +6,87 @@
 #include "mbed.h"
 #include <string>
 DigitalOut led3(LED3);
-class Cadence : public RawSerial{
-    private:
-    static const int DATAS_NUM = 75,BuffNum = 10000;
-    
-    protected:
-    
-    public:
+Timer cadenceT;
+class Cadence : public RawSerial
+{
+private:
+    static const int DATAS_NUM = 75,BuffNum = 500;
+
+protected:
+
+public:
     string strC,strV;
     char data[DATAS_NUM],myBuff[BuffNum],c;
     string strData;
-    int data_count, data_num;
+    int dataCount, data_num;
     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';
-        for(int i = 0;i<BuffNum;i++) myBuff[i] = '\0';
+    Cadence(PinName tx, PinName rx, const char* name = NULL) : RawSerial(tx, rx) {
+        for(int i=0; i<DATAS_NUM; i++) data[i]= '\0';
+        for(int i = 0; i<BuffNum; i++) myBuff[i] = '\0';
         data_num=0;
-        data_count=0;
+        dataCount=0;
         baud(115200);
         cadence=0;
         voltage=0;
-//        attach(this, &Cadence::readData);
+        cadenceT.start();
+//        attach(this, &Cadence::readData, RawSerial::RxIrq);
     }
-    int checkInt(const char c[]){
-        for(int i = 0; i<strlen(c); i++){
+    int checkInt(const char c[]) {
+        for(int i = 0; i<strlen(c); i++) {
             if( c[0] == '-' ) continue;
             if( c[i] - '0' > 9 || c[i] - '0' <0 ) return -1;
-        }return 1;
+        }
+        return 1;
     }
-    void readData(){
-      if(readable()){
-        led3 = 1;
-        do{
-            if(!readable()) return;
-            c = getc();
-            if(c != '\n'){
-                myBuff[data_count] = c;
-                data_count++;
-            }
-        }while(c == '\n' && myBuff[data_count-1] == '\r');
-//        do{
-//            if(readable()) {
-//                char c = getc();
-////                if(c == '\n' && data[data_count-1] == '\r'){
-//                if(c == '\n' && myBuff[data_count-1] == '\r'){
-//                    break;
-//                }else{
-////                    data[data_count] = c;
-//                    myBuff[data_count] = c;
-//                    data_count++;
-//                }
-//            }
-//        }while(data_count<BuffNum);
-        strData = myBuff;
-        led3 = 0;
-        if( int strlength = strData.length() > DATAS_NUM-4 && strlength < DATAS_NUM ){
+    void readData() {
+        if(readable()) {
+            cadenceT.reset();
+            cadenceT.start();
+            dataCount = 0;
+            do {
+                myBuff[dataCount] = getc();
+                dataCount++;
+            } while(cadenceT.read_us()<1 || myBuff[dataCount-1] != '\n');
+        }
+        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[data_count-6+i];
-//                strV += data[data_count-43+i];
+//                strC += data[dataCount-6+i];
+//                strV += data[dataCount-43+i];
 //            }
 //            if( checkInt(strC) ) sscanf(strC,"%lf",&cadence);
 //            if( checkInt(strV) ) sscanf(strV,"%lf",&voltage);
 
-            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;
-        }
-        for (int i = 0; i<data_count; i++) myBuff[i] = '\0';
-        data_count = 0;
-      }
-    }
+                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;
+            }//strlength
+//        led3 = 0;
+            for (int i = 0; i < strlen(myBuff); i++) myBuff[i] = '\0';
+            dataCount = 0;
+        }//if(dataCount != 0)
+    }//readData
 };
 #endif
\ No newline at end of file
--- a/SDFileSystem.lib	Sun Mar 12 10:56:54 2017 +0000
+++ b/SDFileSystem.lib	Sat Mar 18 03:13:36 2017 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/SDFileSystem/#8db0d3b02cec
+http://developer.mbed.org/users/mbed_official/code/SDFileSystem/#8a6740f6c555
--- a/main.cpp	Sun Mar 12 10:56:54 2017 +0000
+++ b/main.cpp	Sat Mar 18 03:13:36 2017 +0000
@@ -1,11 +1,11 @@
 //計器プログラム
 #include "mbed.h"
 #include "rtos.h"
+#include "Cadence.h"
 #include "Fusokukei.h"
 #include "MPU6050.h"
 #include "BufferedSoftSerial.h"
-#include "Cadence.h"
-#include "SDFileSystem.h"
+//#include "SDFileSystem.h"
 
 #define SOUDA_DATAS_NUM 24 //(yokutan 7 + input 5)*2
 #define WRITE_DATAS_NUM 30 // souda_datas_num + 6( rpy, airspeed, height, cadence)
@@ -31,15 +31,15 @@
 }
 //-------------------------------------------------------
 
-SDFileSystem sd(p5, p6, p7, p8, "sd");
-FILE* fp;
+//SDFileSystem sd(p5, p6, p7, p8, "sd");
+//FILE* fp;
 
 RawSerial pc(USBTX,USBRX);
 RawSerial android(p9,p10);
 BufferedSoftSerial soudaSerial(p17,p18);
 BufferedSoftSerial twe(p11,p12);
 Cadence cadence_twe(p13,p14);
-//Ticker cadenceUpdateTicker;
+Ticker cadenceUpdateTicker;
 //Ticker writeDatasTicker;
 //Timer writeTimer;
 
@@ -75,14 +75,14 @@
 void call_calcAirSpeed();
 void sonarInterruptStart();
 void sonarInterruptStop();
-void updateCadence(void const *arg);
+void updateCadence(/*void const *arg*/);
 void init();
 void FusokukeiInit();
 void MpuInit();
 void mpuProcessing(void const *arg);
 void DataReceiveFromSouda(void const *arg);
 void SdInit();
-void SDprintf();
+//void SDprintf();
 void WriteDatas();
 float calcAttackAngle();
 float calcKXdeg(float x);
@@ -130,10 +130,10 @@
     twe.baud(19200);//BufferedSoftSerialでは19200が上限。twelite側でもBPS無効化が必要
     //writeTimer.start();
     FusokukeiInit();
-    SdInit();
+//    SdInit();
 //    MpuInit(); 
     //writeDatasTicker.attach(&WriteDatas,1);
-//    cadenceUpdateTicker.attach(&updateCadence, 1);
+    cadenceUpdateTicker.attach(&updateCadence, 1);
     
 //-----for InterruptMode of sonar----------------------------
 //    sonarPin.rise(&sonarInterruptStart);
@@ -229,30 +229,30 @@
       }//if
 //    }//while(1)
 }
-
-void SdInit(){
-    mkdir("/sd/mydir", 0777);
-    fp = fopen("/sd/mydir/sdtest2.csv", "w");
-    if(fp == NULL) {
-        error("Could not open file for write\n");
-    }
-    fprintf(fp, "Hello fun SD Card World!\n\r");
-    fclose(fp);
-}
-
-void SDprintf(){
-    fp = fopen("/sd/mydir/data.csv", "a");
-    if(fp == NULL) {
-        error("Could not open file for write\n");
-    }
-    for(int i = 0; i < SD_WRITE_NUM; i++){
-        for(int j = 0; j < WRITE_DATAS_NUM; j++){
-            fprintf(fp,"%f,", writeDatas[i][j]);
-        }
-    }
-    fprintf(fp,"\n\r");
-    fclose(fp);
-}
+//
+//void SdInit(){
+//    mkdir("/sd/mydir", 0777);
+//    fp = fopen("/sd/mydir/sdtest2.csv", "w");
+//    if(fp == NULL) {
+//        error("Could not open file for write\n");
+//    }
+//    fprintf(fp, "Hello fun SD Card World!\n\r");
+//    fclose(fp);
+//}
+//
+//void SDprintf(){
+//    fp = fopen("/sd/mydir/data.csv", "a");
+//    if(fp == NULL) {
+//        error("Could not open file for write\n");
+//    }
+//    for(int i = 0; i < SD_WRITE_NUM; i++){
+//        for(int j = 0; j < WRITE_DATAS_NUM; j++){
+//            fprintf(fp,"%f,", writeDatas[i][j]);
+//        }
+//    }
+//    fprintf(fp,"\n\r");
+//    fclose(fp);
+//}
 
 void WriteDatas(){
     int i;
@@ -274,7 +274,7 @@
 //    pc.printf("\n\r");
 //    twe.printf("\n\r");
     if(write_datas_index == SD_WRITE_NUM-1){
-        SDprintf();
+//        SDprintf();
         write_datas_index=0;
     }
     else{
@@ -287,12 +287,13 @@
     }
     //pc.printf("\n\r");
     twe.printf("%f,%f,%f,",pitch,roll,yaw);
-    twe.printf("%f,%f,%f\r\n",airSpeed,sonarDist,cadence_twe.cadence); 
+    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,%s\n\r",airSpeed,sonarDist,cadence_twe.myBuff);
-    pc.printf(cadence_twe.strData.c_str());
-    pc.putc(cadence_twe.strV[0]);
+    //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));
+    }
     if(android.writeable()){
 //        for(int i = 0; i<SOUDA_DATAS_NUM; i++){
 //            android.printf("%i,",soudaDatas[i]);
--- a/mbed.bld	Sun Mar 12 10:56:54 2017 +0000
+++ b/mbed.bld	Sat Mar 18 03:13:36 2017 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/e1686b8d5b90
\ No newline at end of file
+http://mbed.org/users/mbed_official/code/mbed/builds/093f2bd7b9eb
\ No newline at end of file