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

Dependencies:   BufferedSerial SDFileSystem mbed

Committer:
MatsumotoKouki
Date:
Fri Sep 24 09:07:33 2021 +0000
Revision:
0:d34ad1a628e4
Child:
1:3f26e434ae82
2021 MR sensor program 1st version

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