201708能代のメインマイコンの保存データ送信用プログラム(データ送信部分を繰り返しタイマー割り込みにした)

Dependencies:   MPU6050 MS5607 mbed

Fork of data_sousin by kohei oikawa

main.cpp

Committer:
oichan
Date:
2017-08-18
Revision:
7:33f48fc8fe7b
Parent:
6:69546ac823b1

File content as of revision 7:33f48fc8fe7b:


/***********************************************************
    データ取得&送信するプログラム
    各データの終わりの印として'$'を送信
    送信データが時間順にならないため、検証時は並び替えが必要
************************************************************/


#include "mbed.h"
#include "MPU6050.h"
#include "MS5607I2C.h"

#define ACC 16384
#define BUFFNUM 50  /*受信側のBUFFNUMと同値*/
#define CHARANUM 50
#define RATE 50.0   /*RATE[Hz]でデータ取得*/


MPU6050 mpu(p9,p10);
MS5607I2C  ms5607(p9,p10,false);
Serial  subCP(p28, p27);
Ticker  log_timer;
Ticker  send_timer;
Timer   t;

float  Time[2][BUFFNUM] = {};
float  Acc[2][BUFFNUM]  = {};
float  Alt[2][BUFFNUM]  = {};
char   Moji[2][BUFFNUM][CHARANUM] = {};
bool   Row = false;
int8_t Col = 0;
int    Send_cnt = 0;
int    Moji_cnt = 0;

void _log();
void _send();

int main(){
    t.start();
    log_timer.attach(_log,1.0/RATE);
    send_timer.attach(_send,0.0001);
    while(1);
}


/*  データ取得関数   */
void _log(){
    mpu.getAccelero(&Acc[Row][Col]);
    Alt[Row][Col]  = ms5607.getAltitude();
    Time[Row][Col] = t.read();
    if(Time[Row][Col]>=1800){
        t.reset();
    }
    Col++;
    if(Col == BUFFNUM){
        Col = 0;
        Row = !Row;
    }
}

/*  データ送信関数    */
void _send(){
    if(Moji_cnt==0){
        sprintf(&Moji[Row][Send_cnt][0],"%f, %f, %f",Time[!Row][Send_cnt],Acc[!Row][Send_cnt],Alt[!Row][Send_cnt]);
    }
    subCP.putc(Moji[Row][Send_cnt][Moji_cnt]);
    Moji_cnt++;
    if(Moji_cnt==CHARANUM || Moji[Row][Send_cnt][Moji_cnt]=='\0'){
        Moji_cnt = 0;
        subCP.putc('$');
        Send_cnt++;
        if(Send_cnt==BUFFNUM){
            Send_cnt = 0;
        }
    }
}