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

Dependencies:   BufferedSerial SDFileSystem mbed

Committer:
MatsumotoKouki
Date:
Fri Sep 09 16:08:51 2022 +0000
Revision:
4:5bc7cddcc1cd
Parent:
3:c1456d673aaf
Child:
5:15559c6d6a5f
with calibration 09/10 1:08

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