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

Dependencies:   BufferedSerial SDFileSystem mbed

Committer:
MatsumotoKouki
Date:
Mon Oct 04 08:02:04 2021 +0000
Revision:
1:3f26e434ae82
Parent:
0:d34ad1a628e4
Child:
2:4c7d64e27929
stopped below; ; send command to sensor; get GPS data

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MatsumotoKouki 0:d34ad1a628e4 1 /* mbed Microcontroller Library
MatsumotoKouki 0:d34ad1a628e4 2 * Copyright (c) 2019 ARM Limited
MatsumotoKouki 0:d34ad1a628e4 3 * SPDX-License-Identifier: Apache-2.0
MatsumotoKouki 0:d34ad1a628e4 4 */
MatsumotoKouki 1:3f26e434ae82 5
MatsumotoKouki 1:3f26e434ae82 6 /*センサーにコマンドを送信するのはとりあえず後回し
MatsumotoKouki 1:3f26e434ae82 7 GPSのデータを受信するのも後回し*/
MatsumotoKouki 0:d34ad1a628e4 8
MatsumotoKouki 0:d34ad1a628e4 9 #include "mbed.h"
MatsumotoKouki 0:d34ad1a628e4 10 //#include "platform/mbed_thread.h"
MatsumotoKouki 0:d34ad1a628e4 11 #include "SDFileSystem.h"
MatsumotoKouki 0:d34ad1a628e4 12
MatsumotoKouki 1:3f26e434ae82 13 Serial jy901(D1,D0);
MatsumotoKouki 0:d34ad1a628e4 14 SDFileSystem sd(PA_7, PA_6, PA_5, PA_4, "sd");
MatsumotoKouki 0:d34ad1a628e4 15 DigitalIn mcu_1(PA_8);
MatsumotoKouki 0:d34ad1a628e4 16 DigitalIn mcu_2(PA_11);
MatsumotoKouki 1:3f26e434ae82 17 Serial f303(PA_3,PA_2);
MatsumotoKouki 0:d34ad1a628e4 18
MatsumotoKouki 0:d34ad1a628e4 19 int sig=0;
MatsumotoKouki 0:d34ad1a628e4 20 Ticker timer;
MatsumotoKouki 0:d34ad1a628e4 21
MatsumotoKouki 0:d34ad1a628e4 22 int getSignal(); //f303からのコマンドを受け取る関数
MatsumotoKouki 0:d34ad1a628e4 23 //void JY901(); //JY901が取得した生データをSDに書き込む関数
MatsumotoKouki 0:d34ad1a628e4 24 void getGPS(); //GPSデータを取得し、f303に送信する関数
MatsumotoKouki 0:d34ad1a628e4 25 void StandbyCommand();
MatsumotoKouki 0:d34ad1a628e4 26 void MakeFile();
MatsumotoKouki 0:d34ad1a628e4 27
MatsumotoKouki 0:d34ad1a628e4 28 int main()
MatsumotoKouki 0:d34ad1a628e4 29 {
MatsumotoKouki 0:d34ad1a628e4 30 timer.attach(&StandbyCommand,1); //割り込みで1秒ごとにf303からのコマンドを取得
MatsumotoKouki 0:d34ad1a628e4 31
MatsumotoKouki 0:d34ad1a628e4 32 /**********************
MatsumotoKouki 0:d34ad1a628e4 33 //センサーのsleepモードを終わらせて、キャリブレーションを開始する関数
MatsumotoKouki 0:d34ad1a628e4 34 *****************/
MatsumotoKouki 0:d34ad1a628e4 35
MatsumotoKouki 0:d34ad1a628e4 36 /*while(sig==1){//次のシグナルがくるまでの間
MatsumotoKouki 0:d34ad1a628e4 37 JY901();
MatsumotoKouki 0:d34ad1a628e4 38 }
MatsumotoKouki 0:d34ad1a628e4 39
MatsumotoKouki 0:d34ad1a628e4 40 while(sig==2){
MatsumotoKouki 0:d34ad1a628e4 41 getGPS();
MatsumotoKouki 0:d34ad1a628e4 42 }*/
MatsumotoKouki 0:d34ad1a628e4 43 }
MatsumotoKouki 0:d34ad1a628e4 44
MatsumotoKouki 0:d34ad1a628e4 45 void StandbyCommand(){
MatsumotoKouki 0:d34ad1a628e4 46 sig=getSignal();
MatsumotoKouki 0:d34ad1a628e4 47 switch(sig){
MatsumotoKouki 0:d34ad1a628e4 48 case 1:
MatsumotoKouki 0:d34ad1a628e4 49 //Timer.detach();
MatsumotoKouki 0:d34ad1a628e4 50 MakeFile();
MatsumotoKouki 0:d34ad1a628e4 51 break;
MatsumotoKouki 0:d34ad1a628e4 52
MatsumotoKouki 0:d34ad1a628e4 53 case 2:
MatsumotoKouki 0:d34ad1a628e4 54 timer.detach();
MatsumotoKouki 0:d34ad1a628e4 55 while(1){
MatsumotoKouki 0:d34ad1a628e4 56 getGPS();
MatsumotoKouki 0:d34ad1a628e4 57 }
MatsumotoKouki 0:d34ad1a628e4 58 break;
MatsumotoKouki 0:d34ad1a628e4 59 }
MatsumotoKouki 0:d34ad1a628e4 60 }
MatsumotoKouki 0:d34ad1a628e4 61
MatsumotoKouki 0:d34ad1a628e4 62 void MakeFile(){
MatsumotoKouki 0:d34ad1a628e4 63 mkdir("/sd/2021MR", 0777);
MatsumotoKouki 0:d34ad1a628e4 64 FILE *fp = fopen("/sd/2021MR/chigusa.bin", "w");
MatsumotoKouki 0:d34ad1a628e4 65 if(fp == NULL) {
MatsumotoKouki 0:d34ad1a628e4 66 error("Could not open file for write\n");
MatsumotoKouki 0:d34ad1a628e4 67 }
MatsumotoKouki 0:d34ad1a628e4 68
MatsumotoKouki 0:d34ad1a628e4 69 while(sig!=2){
MatsumotoKouki 0:d34ad1a628e4 70 fputc(jy901.getc(),fp);
MatsumotoKouki 0:d34ad1a628e4 71 //JY901();
MatsumotoKouki 0:d34ad1a628e4 72 }
MatsumotoKouki 0:d34ad1a628e4 73 fclose(fp);
MatsumotoKouki 0:d34ad1a628e4 74 }
MatsumotoKouki 0:d34ad1a628e4 75
MatsumotoKouki 0:d34ad1a628e4 76 /*void JY901(){
MatsumotoKouki 0:d34ad1a628e4 77
MatsumotoKouki 0:d34ad1a628e4 78 }*/
MatsumotoKouki 0:d34ad1a628e4 79
MatsumotoKouki 0:d34ad1a628e4 80 int getSignal(){ //センサー起動のタイミングで1を返し、センサー終了してGPS送信するタイミングで2を返す関数。
MatsumotoKouki 1:3f26e434ae82 81 char mcuCom=f303.getc();
MatsumotoKouki 1:3f26e434ae82 82 //f303.read(mcuCom,2); //mcuComに4byte(適当)のデータを取得しますよ
MatsumotoKouki 1:3f26e434ae82 83 //if(mcuCom[0]=="s"&&mcuCom[1]=="t"){ //startのsとt
MatsumotoKouki 1:3f26e434ae82 84 if(mcuCom=='s'){ //startの"s"
MatsumotoKouki 0:d34ad1a628e4 85 return 1;
MatsumotoKouki 0:d34ad1a628e4 86 }
MatsumotoKouki 1:3f26e434ae82 87 //if(mcuCom[0]=="G"&&mcuCom[1]=="P"){ //GPSのGP
MatsumotoKouki 1:3f26e434ae82 88 else if(mcuCom=='G'){ //GPSの"G"
MatsumotoKouki 0:d34ad1a628e4 89 return 2;
MatsumotoKouki 0:d34ad1a628e4 90 }
MatsumotoKouki 0:d34ad1a628e4 91
MatsumotoKouki 0:d34ad1a628e4 92 return 0;
MatsumotoKouki 0:d34ad1a628e4 93 }
MatsumotoKouki 0:d34ad1a628e4 94
MatsumotoKouki 0:d34ad1a628e4 95 void getGPS(){
MatsumotoKouki 0:d34ad1a628e4 96 char buf[10000],data[10000];
MatsumotoKouki 1:3f26e434ae82 97 int ucRxCnt,j=0;
MatsumotoKouki 0:d34ad1a628e4 98 //string GPSStatus="";
MatsumotoKouki 0:d34ad1a628e4 99 /*FILE *fp = fopen("/sd/2021MR/ground.bin", "w");
MatsumotoKouki 0:d34ad1a628e4 100 if(fp == NULL) {
MatsumotoKouki 0:d34ad1a628e4 101 error("Could not open file for write\n");
MatsumotoKouki 0:d34ad1a628e4 102 }*/
MatsumotoKouki 0:d34ad1a628e4 103
MatsumotoKouki 0:d34ad1a628e4 104 for(int i=0;i<10000;i++){
MatsumotoKouki 1:3f26e434ae82 105 buf[i]=jy901.getc();
MatsumotoKouki 0:d34ad1a628e4 106 }
MatsumotoKouki 0:d34ad1a628e4 107
MatsumotoKouki 1:3f26e434ae82 108 while(j<=int(sizeof(buf)/sizeof(buf[0]))){
MatsumotoKouki 0:d34ad1a628e4 109 data[ucRxCnt++]=buf[j]; //Store the received data in the buffer
MatsumotoKouki 0:d34ad1a628e4 110 if (data[0]!=0x55){ //The data header is not correct, then restart to find the 0x55 data header
MatsumotoKouki 0:d34ad1a628e4 111 ucRxCnt=0;
MatsumotoKouki 0:d34ad1a628e4 112 // printf("not start sig\n");
MatsumotoKouki 0:d34ad1a628e4 113 }
MatsumotoKouki 0:d34ad1a628e4 114 else if(ucRxCnt<11) {
MatsumotoKouki 0:d34ad1a628e4 115 //printf("data is less than 11\n\r");
MatsumotoKouki 0:d34ad1a628e4 116 }//If the data is less than 11, alert.
MatsumotoKouki 0:d34ad1a628e4 117 else{
MatsumotoKouki 0:d34ad1a628e4 118 //printf("switch\n\r");
MatsumotoKouki 0:d34ad1a628e4 119 switch(data[1])//Determine what kind of data the data is, and then copy it to the corresponding structure. Some data packets need to open the corresponding output through the upper computer before receiving the data of this data packet.
MatsumotoKouki 0:d34ad1a628e4 120 {
MatsumotoKouki 0:d34ad1a628e4 121 /* case 0x50: memcpy(&stcTime,&ucRxBuffer[2],8);break;//memcpy is a memory copy function that comes with the compiler. You need to reference "string.h" to copy the characters of the receive buffer into the data structure to achieve data parsing.
MatsumotoKouki 0:d34ad1a628e4 122 case 0x51:
MatsumotoKouki 0:d34ad1a628e4 123 printf("case 0x51 worked!");
MatsumotoKouki 0:d34ad1a628e4 124 memcpy(&stcAcc,&data[2],8);
MatsumotoKouki 0:d34ad1a628e4 125 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);
MatsumotoKouki 0:d34ad1a628e4 126 break;
MatsumotoKouki 0:d34ad1a628e4 127 case 0x52: memcpy(&stcGyro,&ucRxBuffer[2],8);break;
MatsumotoKouki 0:d34ad1a628e4 128 case 0x53: memcpy(&stcAngle,&ucRxBuffer[2],8);break;
MatsumotoKouki 0:d34ad1a628e4 129 case 0x54: memcpy(&stcMag,&ucRxBuffer[2],8);break;
MatsumotoKouki 0:d34ad1a628e4 130 case 0x55: memcpy(&stcDStatus,&ucRxBuffer[2],8);break;
MatsumotoKouki 0:d34ad1a628e4 131 case 0x56: memcpy(&stcPress,&ucRxBuffer[2],8);break;
MatsumotoKouki 0:d34ad1a628e4 132 case 0x57: memcpy(&stcLonLat,&ucRxBuffer[2],8);break;*/
MatsumotoKouki 0:d34ad1a628e4 133 case 0x58:
MatsumotoKouki 1:3f26e434ae82 134 //memcpy(&stcGPSV,&ucRxBuffer[2],8);
MatsumotoKouki 1:3f26e434ae82 135 //sprintf(GPSStatus,"GPSHeight:%.1fm GPSYaw:%.1fDeg GPSV:%.3fkm/h\r\n",(float)stcGPSV.sGPSHeight/10,(float)stcGPSV.sGPSYaw/10,(float)stcGPSV.lGPSVelocity/1000);
MatsumotoKouki 1:3f26e434ae82 136 //f303.printf("%s",GPSStatus);
MatsumotoKouki 1:3f26e434ae82 137 printf("come a GPS data!!");
MatsumotoKouki 0:d34ad1a628e4 138 break;
MatsumotoKouki 0:d34ad1a628e4 139 //case 0x59: memcpy(&stcQ,&ucRxBuffer[2],8);break;
MatsumotoKouki 0:d34ad1a628e4 140 }
MatsumotoKouki 0:d34ad1a628e4 141 ucRxCnt=0;//Clear the cache area
MatsumotoKouki 0:d34ad1a628e4 142 }
MatsumotoKouki 0:d34ad1a628e4 143 j++;
MatsumotoKouki 0:d34ad1a628e4 144 }
MatsumotoKouki 0:d34ad1a628e4 145
MatsumotoKouki 0:d34ad1a628e4 146
MatsumotoKouki 0:d34ad1a628e4 147 }