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

Dependencies:   BufferedSerial SDFileSystem mbed

Committer:
taquto
Date:
Fri Sep 09 13:31:55 2022 +0000
Revision:
3:c1456d673aaf
Parent:
2:4c7d64e27929
Child:
4:5bc7cddcc1cd
2022 0909; without calibration

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 */
taquto 3:c1456d673aaf 5
taquto 3:c1456d673aaf 6 /*センサーにコマンドを送信するのはとりあえず後回し
taquto 3:c1456d673aaf 7 GPSのデータを受信するのも後回し*/
MatsumotoKouki 0:d34ad1a628e4 8
MatsumotoKouki 0:d34ad1a628e4 9 #include "mbed.h"
MatsumotoKouki 0:d34ad1a628e4 10 #include "SDFileSystem.h"
MatsumotoKouki 2:4c7d64e27929 11 //#include "BufferedSerial.h"
MatsumotoKouki 0:d34ad1a628e4 12
MatsumotoKouki 2:4c7d64e27929 13 //BufferedSerial jy901(PA_9,PA_10);
MatsumotoKouki 2:4c7d64e27929 14 Serial jy901(PA_9,PA_10);
MatsumotoKouki 2:4c7d64e27929 15 SDFileSystem sd(PA_7, PA_6, PA_5, PA_4, "sd"); //mosi, miso, sck, cs
MatsumotoKouki 2:4c7d64e27929 16 //BufferedSerial f303(PA_2,PA_3,38400);
taquto 3:c1456d673aaf 17 //Serial f303(PA_2,PA_3,38400);
taquto 3:c1456d673aaf 18 DigitalIn F2L_1(PA_3);
taquto 3:c1456d673aaf 19 DigitalIn F2L_2(PA_2);
taquto 3:c1456d673aaf 20
MatsumotoKouki 2:4c7d64e27929 21 DigitalOut led1(LED1);
MatsumotoKouki 2:4c7d64e27929 22 DigitalOut led2(LED2);
MatsumotoKouki 2:4c7d64e27929 23 //Serial pc(USBTX, USBRX,38400);//ボーレートを落とすと,USB側からのデータが正確に出力されない.
MatsumotoKouki 0:d34ad1a628e4 24
MatsumotoKouki 0:d34ad1a628e4 25 int sig=0;
MatsumotoKouki 2:4c7d64e27929 26 Ticker comm;
MatsumotoKouki 2:4c7d64e27929 27 char str[10];
MatsumotoKouki 0:d34ad1a628e4 28
MatsumotoKouki 0:d34ad1a628e4 29 int getSignal(); //f303からのコマンドを受け取る関数
MatsumotoKouki 0:d34ad1a628e4 30 //void JY901(); //JY901が取得した生データをSDに書き込む関数
MatsumotoKouki 0:d34ad1a628e4 31 void getGPS(); //GPSデータを取得し、f303に送信する関数
MatsumotoKouki 0:d34ad1a628e4 32 void StandbyCommand();
MatsumotoKouki 0:d34ad1a628e4 33 void MakeFile();
taquto 3:c1456d673aaf 34
MatsumotoKouki 0:d34ad1a628e4 35 int main()
MatsumotoKouki 0:d34ad1a628e4 36 {
MatsumotoKouki 2:4c7d64e27929 37 comm.attach(StandbyCommand,1); //割り込みで1秒ごとにf303からのコマンドを取得
taquto 3:c1456d673aaf 38
MatsumotoKouki 0:d34ad1a628e4 39 /**********************
MatsumotoKouki 0:d34ad1a628e4 40 //センサーのsleepモードを終わらせて、キャリブレーションを開始する関数
MatsumotoKouki 0:d34ad1a628e4 41 *****************/
taquto 3:c1456d673aaf 42
MatsumotoKouki 0:d34ad1a628e4 43 /*while(sig==1){//次のシグナルがくるまでの間
MatsumotoKouki 0:d34ad1a628e4 44 JY901();
MatsumotoKouki 0:d34ad1a628e4 45 }
taquto 3:c1456d673aaf 46
MatsumotoKouki 0:d34ad1a628e4 47 while(sig==2){
MatsumotoKouki 0:d34ad1a628e4 48 getGPS();
MatsumotoKouki 0:d34ad1a628e4 49 }*/
MatsumotoKouki 0:d34ad1a628e4 50 }
MatsumotoKouki 0:d34ad1a628e4 51
taquto 3:c1456d673aaf 52 void StandbyCommand()
taquto 3:c1456d673aaf 53 {
MatsumotoKouki 2:4c7d64e27929 54 //printf("StandbyCommand start\r\n");
MatsumotoKouki 0:d34ad1a628e4 55 sig=getSignal();
taquto 3:c1456d673aaf 56 switch(sig) {
taquto 3:c1456d673aaf 57 case 2:
taquto 3:c1456d673aaf 58 //comm.detach();
taquto 3:c1456d673aaf 59 MakeFile();
taquto 3:c1456d673aaf 60 break;
taquto 3:c1456d673aaf 61
taquto 3:c1456d673aaf 62 case 3:
taquto 3:c1456d673aaf 63 comm.detach();
taquto 3:c1456d673aaf 64 while(1) {
taquto 3:c1456d673aaf 65 getGPS();
taquto 3:c1456d673aaf 66 }
taquto 3:c1456d673aaf 67 break;
MatsumotoKouki 0:d34ad1a628e4 68 }
MatsumotoKouki 0:d34ad1a628e4 69 }
MatsumotoKouki 0:d34ad1a628e4 70
taquto 3:c1456d673aaf 71 void MakeFile()
taquto 3:c1456d673aaf 72 {
taquto 3:c1456d673aaf 73 mkdir("/sd/2021MR", 0777);
MatsumotoKouki 0:d34ad1a628e4 74 FILE *fp = fopen("/sd/2021MR/chigusa.bin", "w");
MatsumotoKouki 0:d34ad1a628e4 75 if(fp == NULL) {
MatsumotoKouki 0:d34ad1a628e4 76 error("Could not open file for write\n");
MatsumotoKouki 0:d34ad1a628e4 77 }
taquto 3:c1456d673aaf 78
taquto 3:c1456d673aaf 79 while(sig!=3) {
MatsumotoKouki 0:d34ad1a628e4 80 fputc(jy901.getc(),fp);
MatsumotoKouki 0:d34ad1a628e4 81 //JY901();
MatsumotoKouki 0:d34ad1a628e4 82 }
MatsumotoKouki 0:d34ad1a628e4 83 fclose(fp);
MatsumotoKouki 0:d34ad1a628e4 84 }
MatsumotoKouki 0:d34ad1a628e4 85
MatsumotoKouki 0:d34ad1a628e4 86 /*void JY901(){
MatsumotoKouki 0:d34ad1a628e4 87
taquto 3:c1456d673aaf 88 }*/
taquto 3:c1456d673aaf 89 /*
MatsumotoKouki 0:d34ad1a628e4 90 int getSignal(){ //センサー起動のタイミングで1を返し、センサー終了してGPS送信するタイミングで2を返す関数。
taquto 3:c1456d673aaf 91
MatsumotoKouki 2:4c7d64e27929 92 //while(1){ //s:撮影終了、p:フライトピン作動,c:撮影終了・GPS送信
MatsumotoKouki 2:4c7d64e27929 93 //printf("getSignal start\r\n");
MatsumotoKouki 2:4c7d64e27929 94 int i=0;
MatsumotoKouki 2:4c7d64e27929 95 char temp;
MatsumotoKouki 2:4c7d64e27929 96 while(temp != '\n') { //読み込み文字が改行で無い場合(順番では\r\n)
MatsumotoKouki 2:4c7d64e27929 97 //printf("in a while\r\n");
MatsumotoKouki 2:4c7d64e27929 98 if(f303.readable()) { //f303からのデータがある場合
MatsumotoKouki 2:4c7d64e27929 99 //printf("readable\r\n");
MatsumotoKouki 2:4c7d64e27929 100 led1=1;
MatsumotoKouki 2:4c7d64e27929 101 wait(0.1);
taquto 3:c1456d673aaf 102 led1=0;
taquto 3:c1456d673aaf 103
MatsumotoKouki 2:4c7d64e27929 104 char temp = f303.getc();//一文字読み込む
MatsumotoKouki 2:4c7d64e27929 105 //printf("%c\r\n",temp);
MatsumotoKouki 2:4c7d64e27929 106 str[i++] = temp;
MatsumotoKouki 2:4c7d64e27929 107 } //else if(temp == '\n') { //読み込み文字が改行の場合
MatsumotoKouki 2:4c7d64e27929 108 }
MatsumotoKouki 2:4c7d64e27929 109 //printf("get Command\r\n");
MatsumotoKouki 2:4c7d64e27929 110 if(str[i-1]=='s'){ //手動でカメラの動作が停止された場合
MatsumotoKouki 2:4c7d64e27929 111 //printf("get s!!\r\n");
MatsumotoKouki 2:4c7d64e27929 112 led2=1;
MatsumotoKouki 2:4c7d64e27929 113 wait(0.1);
MatsumotoKouki 2:4c7d64e27929 114 led2=0;
MatsumotoKouki 2:4c7d64e27929 115 return 1;
MatsumotoKouki 2:4c7d64e27929 116 }
MatsumotoKouki 2:4c7d64e27929 117 else if(str[i-1]=='p'){ //フライトピン作動
MatsumotoKouki 2:4c7d64e27929 118 //printf("get p\r\n");
MatsumotoKouki 2:4c7d64e27929 119 led2=1;
MatsumotoKouki 2:4c7d64e27929 120 wait(0.1);
taquto 3:c1456d673aaf 121 led2=0;
taquto 3:c1456d673aaf 122 wait(0.1);
MatsumotoKouki 2:4c7d64e27929 123 led2=1;
MatsumotoKouki 2:4c7d64e27929 124 wait(0.1);
MatsumotoKouki 2:4c7d64e27929 125 led2=0;
MatsumotoKouki 2:4c7d64e27929 126 return 2;
MatsumotoKouki 2:4c7d64e27929 127 }
MatsumotoKouki 2:4c7d64e27929 128 else if(str[i-1]=='c'){ //ブザー作動後、センサー記録を停止
taquto 3:c1456d673aaf 129 //printf("get c\r\n");
MatsumotoKouki 2:4c7d64e27929 130 led2=1;
MatsumotoKouki 2:4c7d64e27929 131 wait(0.1);
taquto 3:c1456d673aaf 132 led2=0;
taquto 3:c1456d673aaf 133 wait(0.1);
MatsumotoKouki 2:4c7d64e27929 134 led2=1;
MatsumotoKouki 2:4c7d64e27929 135 wait(0.1);
MatsumotoKouki 2:4c7d64e27929 136 led2=0;
MatsumotoKouki 2:4c7d64e27929 137 wait(0.1);
MatsumotoKouki 2:4c7d64e27929 138 led2=1;
MatsumotoKouki 2:4c7d64e27929 139 wait(0.1);
MatsumotoKouki 2:4c7d64e27929 140 led2=0;
MatsumotoKouki 2:4c7d64e27929 141 return 3;
taquto 3:c1456d673aaf 142 }
taquto 3:c1456d673aaf 143 }*/
taquto 3:c1456d673aaf 144
taquto 3:c1456d673aaf 145 int getSignal() //センサー起動のタイミングで2を返し、センサー終了のタイミングで3を返す関数。
taquto 3:c1456d673aaf 146 {
taquto 3:c1456d673aaf 147
taquto 3:c1456d673aaf 148 //printf("get Command\r\n");
taquto 3:c1456d673aaf 149 if(F2L_1 == 1) {
taquto 3:c1456d673aaf 150 if(F2L_2 == 1) { //手動でカメラの動作が停止された場合
taquto 3:c1456d673aaf 151 //printf("get s!!\r\n");
taquto 3:c1456d673aaf 152 led2=1;
taquto 3:c1456d673aaf 153 wait(0.1);
taquto 3:c1456d673aaf 154 led2=0;
taquto 3:c1456d673aaf 155 return 1;
taquto 3:c1456d673aaf 156 } else { //フライトピンが作動した場合
taquto 3:c1456d673aaf 157 //printf("get p\r\n");
taquto 3:c1456d673aaf 158 led2=1;
taquto 3:c1456d673aaf 159 wait(0.1);
taquto 3:c1456d673aaf 160 led2=0;
taquto 3:c1456d673aaf 161 wait(0.1);
taquto 3:c1456d673aaf 162 led2=1;
taquto 3:c1456d673aaf 163 wait(0.1);
taquto 3:c1456d673aaf 164 led2=0;
taquto 3:c1456d673aaf 165 return 2;
taquto 3:c1456d673aaf 166 }
taquto 3:c1456d673aaf 167 } else {
taquto 3:c1456d673aaf 168 if(F2L_2 == 1) { //地上に降着しブザーが作動した場合
taquto 3:c1456d673aaf 169 //printf("get c\r\n");
taquto 3:c1456d673aaf 170 led2=1;
taquto 3:c1456d673aaf 171 wait(0.1);
taquto 3:c1456d673aaf 172 led2=0;
taquto 3:c1456d673aaf 173 wait(0.1);
taquto 3:c1456d673aaf 174 led2=1;
taquto 3:c1456d673aaf 175 wait(0.1);
taquto 3:c1456d673aaf 176 led2=0;
taquto 3:c1456d673aaf 177 wait(0.1);
taquto 3:c1456d673aaf 178 led2=1;
taquto 3:c1456d673aaf 179 wait(0.1);
taquto 3:c1456d673aaf 180 led2=0;
taquto 3:c1456d673aaf 181 return 3;
taquto 3:c1456d673aaf 182 }
taquto 3:c1456d673aaf 183 }
taquto 3:c1456d673aaf 184
MatsumotoKouki 0:d34ad1a628e4 185 }
MatsumotoKouki 0:d34ad1a628e4 186
taquto 3:c1456d673aaf 187 void getGPS()
taquto 3:c1456d673aaf 188 {
MatsumotoKouki 0:d34ad1a628e4 189 char buf[10000],data[10000];
MatsumotoKouki 1:3f26e434ae82 190 int ucRxCnt,j=0;
MatsumotoKouki 0:d34ad1a628e4 191 //string GPSStatus="";
MatsumotoKouki 0:d34ad1a628e4 192 /*FILE *fp = fopen("/sd/2021MR/ground.bin", "w");
MatsumotoKouki 0:d34ad1a628e4 193 if(fp == NULL) {
MatsumotoKouki 0:d34ad1a628e4 194 error("Could not open file for write\n");
MatsumotoKouki 0:d34ad1a628e4 195 }*/
taquto 3:c1456d673aaf 196
taquto 3:c1456d673aaf 197 for(int i=0; i<10000; i++) {
MatsumotoKouki 1:3f26e434ae82 198 buf[i]=jy901.getc();
MatsumotoKouki 0:d34ad1a628e4 199 }
taquto 3:c1456d673aaf 200
taquto 3:c1456d673aaf 201 while(j<=int(sizeof(buf)/sizeof(buf[0]))) {
MatsumotoKouki 0:d34ad1a628e4 202 data[ucRxCnt++]=buf[j]; //Store the received data in the buffer
taquto 3:c1456d673aaf 203 if (data[0]!=0x55) { //The data header is not correct, then restart to find the 0x55 data header
MatsumotoKouki 0:d34ad1a628e4 204 ucRxCnt=0;
taquto 3:c1456d673aaf 205 // printf("not start sig\n");
taquto 3:c1456d673aaf 206 } else if(ucRxCnt<11) {
taquto 3:c1456d673aaf 207 //printf("data is less than 11\n\r");
MatsumotoKouki 0:d34ad1a628e4 208 }//If the data is less than 11, alert.
taquto 3:c1456d673aaf 209 else {
MatsumotoKouki 0:d34ad1a628e4 210 //printf("switch\n\r");
taquto 3:c1456d673aaf 211 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.
taquto 3:c1456d673aaf 212 /* 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.
taquto 3:c1456d673aaf 213 case 0x51:
taquto 3:c1456d673aaf 214 printf("case 0x51 worked!");
taquto 3:c1456d673aaf 215 memcpy(&stcAcc,&data[2],8);
taquto 3:c1456d673aaf 216 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);
taquto 3:c1456d673aaf 217 break;
taquto 3:c1456d673aaf 218 case 0x52: memcpy(&stcGyro,&ucRxBuffer[2],8);break;
taquto 3:c1456d673aaf 219 case 0x53: memcpy(&stcAngle,&ucRxBuffer[2],8);break;
taquto 3:c1456d673aaf 220 case 0x54: memcpy(&stcMag,&ucRxBuffer[2],8);break;
taquto 3:c1456d673aaf 221 case 0x55: memcpy(&stcDStatus,&ucRxBuffer[2],8);break;
taquto 3:c1456d673aaf 222 case 0x56: memcpy(&stcPress,&ucRxBuffer[2],8);break;
taquto 3:c1456d673aaf 223 case 0x57: memcpy(&stcLonLat,&ucRxBuffer[2],8);break;*/
taquto 3:c1456d673aaf 224 case 0x58:
taquto 3:c1456d673aaf 225 //memcpy(&stcGPSV,&data[2],8);
taquto 3:c1456d673aaf 226 //sprintf(GPSStatus,"GPSHeight:%.1fm GPSYaw:%.1fDeg GPSV:%.3fkm/h\r\n",(float)stcGPSV.sGPSHeight/10,(float)stcGPSV.sGPSYaw/10,(float)stcGPSV.lGPSVelocity/1000);
taquto 3:c1456d673aaf 227 //f303.printf("%s",GPSStatus);
taquto 3:c1456d673aaf 228 //printf("come a GPS data!!");
MatsumotoKouki 0:d34ad1a628e4 229 break;
taquto 3:c1456d673aaf 230 //case 0x59: memcpy(&stcQ,&ucRxBuffer[2],8);break;
MatsumotoKouki 0:d34ad1a628e4 231 }
MatsumotoKouki 0:d34ad1a628e4 232 ucRxCnt=0;//Clear the cache area
MatsumotoKouki 0:d34ad1a628e4 233 }
MatsumotoKouki 0:d34ad1a628e4 234 j++;
MatsumotoKouki 0:d34ad1a628e4 235 }
taquto 3:c1456d673aaf 236
taquto 3:c1456d673aaf 237
MatsumotoKouki 0:d34ad1a628e4 238 }