201708能代のメインマイコンの保存データ送信用プログラム

Dependencies:   MPU6050 mbed MS5607

main.cpp

Committer:
oichan
Date:
2017-08-15
Revision:
3:660279be8484
Parent:
2:1dbaef45ae46
Child:
4:918ea47cc35c

File content as of revision 3:660279be8484:


/*  データ取得&送信するプログラム             *
 *  各データの終わりの印として'$'を送信        *
 *  なぜか割り込みタイマの周期が一定にならない   */

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

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

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

float Time[2][BUFFNUM] = {};
float Data[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);
    while(1);
}

/*  データ取得   */
void _log(){
    //TODO: 高度データの取得
    //TODO: 取得する加速度を合成加速度に変更
    Data[Row][Col] = (float)mpu.getAcceleroRawZ()/ACC;
    Time[Row][Col] = t.read();
    Col++;
    if(Col == BUFFNUM){
        Col = 0;
        Row = !Row;
        send_timer.attach(_send,(BUFFNUM/(CHARANUM*RATE*RATE))*0.8);
    }
}

void _send(){
    if(Moji_cnt==0){
        sprintf(&Moji[Row][Send_cnt][0],"%f, %f",Time[!Row][Send_cnt],Data[!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;
            send_timer.detach();
        }
    }
}