![](/media/cache/group/mebd_thumbnail.jpg.50x50_q85.jpg)
2021千草のl432(センサー)側プログラム
Dependencies: BufferedSerial SDFileSystem mbed
Diff: main.cpp
- Revision:
- 2:4c7d64e27929
- Parent:
- 1:3f26e434ae82
- Child:
- 3:c1456d673aaf
diff -r 3f26e434ae82 -r 4c7d64e27929 main.cpp --- a/main.cpp Mon Oct 04 08:02:04 2021 +0000 +++ b/main.cpp Tue Aug 30 23:19:42 2022 +0000 @@ -7,17 +7,21 @@ GPSのデータを受信するのも後回し*/ #include "mbed.h" -//#include "platform/mbed_thread.h" #include "SDFileSystem.h" +//#include "BufferedSerial.h" -Serial jy901(D1,D0); -SDFileSystem sd(PA_7, PA_6, PA_5, PA_4, "sd"); -DigitalIn mcu_1(PA_8); -DigitalIn mcu_2(PA_11); -Serial f303(PA_3,PA_2); +//BufferedSerial jy901(PA_9,PA_10); +Serial jy901(PA_9,PA_10); +SDFileSystem sd(PA_7, PA_6, PA_5, PA_4, "sd"); //mosi, miso, sck, cs +//BufferedSerial f303(PA_2,PA_3,38400); +Serial f303(PA_2,PA_3,38400); +DigitalOut led1(LED1); +DigitalOut led2(LED2); +//Serial pc(USBTX, USBRX,38400);//ボーレートを落とすと,USB側からのデータが正確に出力されない. int sig=0; -Ticker timer; +Ticker comm; +char str[10]; int getSignal(); //f303からのコマンドを受け取る関数 //void JY901(); //JY901が取得した生データをSDに書き込む関数 @@ -27,7 +31,7 @@ int main() { - timer.attach(&StandbyCommand,1); //割り込みで1秒ごとにf303からのコマンドを取得 + comm.attach(StandbyCommand,1); //割り込みで1秒ごとにf303からのコマンドを取得 /********************** //センサーのsleepモードを終わらせて、キャリブレーションを開始する関数 @@ -43,15 +47,16 @@ } void StandbyCommand(){ + //printf("StandbyCommand start\r\n"); sig=getSignal(); switch(sig){ case 1: - //Timer.detach(); + //comm.detach(); MakeFile(); break; case 2: - timer.detach(); + comm.detach(); while(1){ getGPS(); } @@ -78,18 +83,58 @@ }*/ int getSignal(){ //センサー起動のタイミングで1を返し、センサー終了してGPS送信するタイミングで2を返す関数。 - char mcuCom=f303.getc(); - //f303.read(mcuCom,2); //mcuComに4byte(適当)のデータを取得しますよ - //if(mcuCom[0]=="s"&&mcuCom[1]=="t"){ //startのsとt - if(mcuCom=='s'){ //startの"s" - return 1; - } - //if(mcuCom[0]=="G"&&mcuCom[1]=="P"){ //GPSのGP - else if(mcuCom=='G'){ //GPSの"G" - return 2; - } - return 0; + //while(1){ //s:撮影終了、p:フライトピン作動,c:撮影終了・GPS送信 + //printf("getSignal start\r\n"); + int i=0; + char temp; + while(temp != '\n') { //読み込み文字が改行で無い場合(順番では\r\n) + //printf("in a while\r\n"); + if(f303.readable()) { //f303からのデータがある場合 + //printf("readable\r\n"); + led1=1; + wait(0.1); + led1=0; + + char temp = f303.getc();//一文字読み込む + //printf("%c\r\n",temp); + str[i++] = temp; + } //else if(temp == '\n') { //読み込み文字が改行の場合 + } + //printf("get Command\r\n"); + if(str[i-1]=='s'){ //手動でカメラの動作が停止された場合 + //printf("get s!!\r\n"); + led2=1; + wait(0.1); + led2=0; + return 1; + } + else if(str[i-1]=='p'){ //フライトピン作動 + //printf("get p\r\n"); + led2=1; + wait(0.1); + led2=0; + wait(0.1); + led2=1; + wait(0.1); + led2=0; + return 2; + } + else if(str[i-1]=='c'){ //ブザー作動後、センサー記録を停止 + //printf("get c\r\n"); + led2=1; + wait(0.1); + led2=0; + wait(0.1); + led2=1; + wait(0.1); + led2=0; + wait(0.1); + led2=1; + wait(0.1); + led2=0; + return 3; + } } void getGPS(){ @@ -124,17 +169,17 @@ memcpy(&stcAcc,&data[2],8); fprintf(facc,"Acc,%.3f,%.3f,%.3f\r\n",(float)stcAcc.a[0]/32768*16,(float)stcAcc.a[1]/32768*16,(float)stcAcc.a[2]/32768*16); break; - case 0x52: memcpy(&stcGyro,&ucRxBuffer[2],8);break; + case 0x52: memcpy(&stcGyro,&ucRxBuffer[2],8);break; case 0x53: memcpy(&stcAngle,&ucRxBuffer[2],8);break; case 0x54: memcpy(&stcMag,&ucRxBuffer[2],8);break; case 0x55: memcpy(&stcDStatus,&ucRxBuffer[2],8);break; case 0x56: memcpy(&stcPress,&ucRxBuffer[2],8);break; case 0x57: memcpy(&stcLonLat,&ucRxBuffer[2],8);break;*/ case 0x58: - //memcpy(&stcGPSV,&ucRxBuffer[2],8); + //memcpy(&stcGPSV,&data[2],8); //sprintf(GPSStatus,"GPSHeight:%.1fm GPSYaw:%.1fDeg GPSV:%.3fkm/h\r\n",(float)stcGPSV.sGPSHeight/10,(float)stcGPSV.sGPSYaw/10,(float)stcGPSV.lGPSVelocity/1000); //f303.printf("%s",GPSStatus); - printf("come a GPS data!!"); + //printf("come a GPS data!!"); break; //case 0x59: memcpy(&stcQ,&ucRxBuffer[2],8);break; }