kk

Dependencies:   SDFileSystem mbed

Fork of cansat_kk by monoCanSat

main.cpp

Committer:
mosukro
Date:
2016-02-29
Revision:
2:be9046fb5859
Parent:
1:fa44a6246bcc
Child:
3:efaa785283a6

File content as of revision 2:be9046fb5859:

#include "mbed.h"
#include "SDFileSystem.h"

Ticker timer;
SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
Serial gps(p28, p27);       // tx, rx
Serial pc(USBTX, USBRX);    // tx, rx 
PwmOut moterl(p21);//左モーター
PwmOut moterr(p22);//右モーター
DigitalOut led1(LED1);
DigitalOut fet3(p23);//ニクロム線
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
DigitalOut janpa1(p19);//パラシュートの開きを検知
DigitalIn janpa2(p20);//パラシュートの開きを検知

char gps_data[256];
float longitude,latitude,gpstime,knot,angle;
int i=0;
char *gps_target = "$GPRMC,174813.000,A,3606.9349,N,13927.4196,E,0.42,221.65,280216,,,A*6D";
float longitude_target,latitude_target,gpstime_target,knot_target,angle_target;

void gps_rx()//GPSデータ受信割り込み
{
    gps_data[i] = gps.getc();
    if( gps_data[i] == '$' )
    {
        //$から受信データを保持する
        gps_data[0] = '$';
        i = 1;
    }
    else if( gps_data[i-1] == '\r' && gps_data[i] == '\n' )
    {
        // 改行コードまでのデータを解析する
        gps_data[i+1] = '\0';
        if(memcmp(gps_data, "$GPRMC",6) == 0)
        {
            // $GPRMCで始ってればデータを分けて格納
            sscanf(gps_data,"$GPRMC,%f,A,%f,N,%f,E,%f,%f",&gpstime,&longitude,&latitude,&knot,&angle);
        }
        //データをSDに書き込み
        mkdir("/sd/mydir", 0777);
        FILE *fp = fopen("/sd/mydir/gpsdata.txt", "a");
        if(fp == NULL)
        {
            error("Could not open file for write\n");
        }
        fprintf(fp,"%s \n",gps_data);
        fclose(fp);
        
        //PCにデータ送信
        pc.printf("%s \n",gps_data);
        i = 0;
    }
    else
    {
        //改行コードが来るまでカウントを続ける
        i++;
        if(i==255)
        {
            pc.printf("*** Error! ***\n");
        }
    }

}

void move()
{
    //動作
    switch (count)
    {
        case 0:
            if( (target_angle+3)>=angle || (target_angle-3)<=angle )
            {
                //
                
            }
            break;
        case 1:
            文2;
            break;
        case 2:
            文n;
            break;
        default:
            文;
            break;
    }
}
 
int main()
{
    gps.baud(9600);
    gps.attach(gps_rx, Serial::RxIrq);//GPS割り込み
    sscanf(gps_target,"$GPRMC,%f,A,%f,N,%f,E,%f,%f",&gpstime_target,&longitude_target,&latitude_target,&knot_target,&angle_target);
    
    while(1)
    {
        move();
    }

}