2021千草のl432(センサー)側プログラム

Dependencies:   BufferedSerial SDFileSystem mbed

Revision:
2:4c7d64e27929
Parent:
1:3f26e434ae82
Child:
3:c1456d673aaf
--- 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;
             }