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

Dependencies:   BufferedSoftSerial2 INA226_ver1 mbed-rtos mbed SDFileSystem-RTOS

Fork of keiki2017 by albatross

Cadence.h

Committer:
tsumagari
Date:
2017-02-19
Branch:
Thread-gyogetsuMPU
Revision:
37:34aaa1951390
Parent:
34:c46f2f687c7b
Child:
41:1bd730c4840d

File content as of revision 37:34aaa1951390:

//;2648 ;00 00000 0;168 ;001; 10043 c1;31 10;00 00;00 00;10 63;08 39;I; -012; 0002; 0104;\r\n
//;109  ;00 00000 0;123 ;011; 10008 e4;27 95;00 00;00 00;13 99;08 51;G; -068; -096; -192;
#ifndef CADENCE_H
#define CADENCE_H

#include "mbed.h"
#include <string>
DigitalOut led3(LED3);
class Cadence : public RawSerial{
    private:
    static const int DATAS_NUM = 75,BuffNum = 10000;
    
    protected:
    
    public:
    string strC,strV;
    char data[DATAS_NUM],myBuff[BuffNum],c;
    string strData;
    int data_count, 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';
        data_num=0;
        data_count=0;
        baud(115200);
        cadence=0;
        voltage=0;
//        attach(this, &Cadence::readData);
    }
    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;
    }
    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 ){
//            for(int i = 0; i<4; i++){
//                strC += data[data_count-6+i];
//                strV += data[data_count-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;
      }
    }
};
#endif