2020/08/26 地磁気センサは今回のミッションでは不要と判断したので廃した.加速度と角加速度を16進数で送信することに成功.各軸ごとに2バイト(16進数4桁)を割り当てて,合計12バイトで送信

Dependencies:   mbed BMX055_rev2 SDFileSystem

Committer:
falconsyunya
Date:
Mon Aug 24 05:30:23 2020 +0000
Revision:
2:28ccb8bdac86
Parent:
1:4c7bace668f6
Child:
3:aad6f83b618e
2020/8/24

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MatsumotoKouki 0:34d043558630 1 #include "mbed.h"
MatsumotoKouki 0:34d043558630 2 #include "BMX055.h"
MatsumotoKouki 0:34d043558630 3 #include "SDFileSystem.h"
MatsumotoKouki 1:4c7bace668f6 4
MatsumotoKouki 0:34d043558630 5
MatsumotoKouki 0:34d043558630 6
MatsumotoKouki 0:34d043558630 7 Serial gps(PA_9, PA_10); // tx, rx
MatsumotoKouki 0:34d043558630 8 DigitalIn FlightPin(PB_0);
MatsumotoKouki 1:4c7bace668f6 9
falconsyunya 2:28ccb8bdac86 10 Serial pc(USBTX, USBRX, 19200);//パソコン側からもマイコン⇒IM920のデータはみれる
falconsyunya 2:28ccb8bdac86 11 Serial uart(PA_2, PA_3, 19200);//TX(IM920_RX), RX(IM920_TX)
falconsyunya 2:28ccb8bdac86 12
MatsumotoKouki 0:34d043558630 13 DigitalOut fet1(PA_8); //MOSFET PIN:GATE
MatsumotoKouki 0:34d043558630 14 DigitalOut fet2(PA_11);
MatsumotoKouki 0:34d043558630 15 BMX055 bmx(PB_7,PB_6);//SDA,SCL
MatsumotoKouki 0:34d043558630 16 SDFileSystem sd(PA_7, PA_6, PA_5, PA_4, "sd"); // the pinout on the mbed Cool Components workshop board
MatsumotoKouki 1:4c7bace668f6 17
MatsumotoKouki 0:34d043558630 18 Ticker warikomi;
MatsumotoKouki 0:34d043558630 19 Timeout t;
MatsumotoKouki 0:34d043558630 20 //double a[3],b[3],c[3];
MatsumotoKouki 0:34d043558630 21
falconsyunya 2:28ccb8bdac86 22 int i,j=0,rlock,mode;
MatsumotoKouki 0:34d043558630 23 char ns,ew;
MatsumotoKouki 0:34d043558630 24 float w_time;//,hokui,tokei;
MatsumotoKouki 0:34d043558630 25 float hokui,tokei;
MatsumotoKouki 0:34d043558630 26 float g_hokui,g_tokei;
MatsumotoKouki 0:34d043558630 27 float d_hokui,m_hokui,d_tokei,m_tokei;
MatsumotoKouki 0:34d043558630 28 char gps_data[256];
MatsumotoKouki 0:34d043558630 29 char str[256];
MatsumotoKouki 1:4c7bace668f6 30
MatsumotoKouki 0:34d043558630 31
MatsumotoKouki 0:34d043558630 32 void getGPS(float *hokui_n,float *tokei_n);
MatsumotoKouki 0:34d043558630 33 //void callback ();
MatsumotoKouki 0:34d043558630 34 void FlightPinDriver();
MatsumotoKouki 0:34d043558630 35 void nichrome_ON();
MatsumotoKouki 0:34d043558630 36 void buzzer();
MatsumotoKouki 0:34d043558630 37
MatsumotoKouki 0:34d043558630 38
MatsumotoKouki 0:34d043558630 39 int main() {
MatsumotoKouki 0:34d043558630 40
MatsumotoKouki 0:34d043558630 41 float *hokui_n,*tokei_n;
MatsumotoKouki 0:34d043558630 42
MatsumotoKouki 0:34d043558630 43 mkdir("/sd/mydir00", 0777);
MatsumotoKouki 0:34d043558630 44 FILE *fp = fopen("/sd/mydir00/sdtest.txt", "w");
MatsumotoKouki 0:34d043558630 45 if(fp == NULL) {
MatsumotoKouki 0:34d043558630 46 error("Could not open file for write\n");
MatsumotoKouki 0:34d043558630 47 }
MatsumotoKouki 0:34d043558630 48
MatsumotoKouki 0:34d043558630 49 gps.baud(9600);
MatsumotoKouki 0:34d043558630 50 //pc.baud(9600);
MatsumotoKouki 0:34d043558630 51 //gps.attach(getGPS(&hokui_n,&tokei_n),Serial::RxIrq);
MatsumotoKouki 0:34d043558630 52 warikomi.attach(&FlightPinDriver,0.5);
MatsumotoKouki 0:34d043558630 53
MatsumotoKouki 0:34d043558630 54
MatsumotoKouki 0:34d043558630 55 while(1) {
falconsyunya 2:28ccb8bdac86 56 //getGPS(hokui_n,tokei_n);
falconsyunya 2:28ccb8bdac86 57 bmx.getAcc();//加速度の取得
falconsyunya 2:28ccb8bdac86 58 bmx.getGyro();//角力加速度の取得
falconsyunya 2:28ccb8bdac86 59 bmx.getMag();//地磁気の取得
falconsyunya 2:28ccb8bdac86 60 int a=bmx.accel[0];
falconsyunya 2:28ccb8bdac86 61 int b=bmx.accel[0];
falconsyunya 2:28ccb8bdac86 62 int c=bmx.accel[0];
MatsumotoKouki 0:34d043558630 63 /* for(int i=0;i<=3;i++){
MatsumotoKouki 0:34d043558630 64 a[i]=(bmx.accel[i]/512)*9.8;
MatsumotoKouki 0:34d043558630 65 b[i]=(bmx.gyroscope[i]*125)/2048;
MatsumotoKouki 0:34d043558630 66 c[i]=bmx.magnet[i];
MatsumotoKouki 0:34d043558630 67 }*/
MatsumotoKouki 0:34d043558630 68 fprintf(fp,"北緯:%f,東経:%f,加速度:%f,%f,%f,ジャイロ:%2.4f,%2.4f,%2.4f,地磁気:%2.4f,%2.4f,%2.4f\n\r",hokui_n,tokei_n,(bmx.accel[0]/512)*9.8,(bmx.accel[1]/512)*9.8,(bmx.accel[2]/512)*9.8,(bmx.gyroscope[0]*125)/2048,(bmx.gyroscope[1]*125)/2048,(bmx.gyroscope[2]*125)/2048,bmx.magnet[0],bmx.magnet[1],bmx.magnet[2]);
MatsumotoKouki 1:4c7bace668f6 69
falconsyunya 2:28ccb8bdac86 70
falconsyunya 2:28ccb8bdac86 71 //以下IM920について
falconsyunya 2:28ccb8bdac86 72 //ノード番号(00~FF)を設定.データを送るごとに1増やす.
falconsyunya 2:28ccb8bdac86 73 uart.printf("STNN %02x\r\n",j);
falconsyunya 2:28ccb8bdac86 74 j++;
falconsyunya 2:28ccb8bdac86 75 if(j==256){j=0;}
falconsyunya 2:28ccb8bdac86 76
falconsyunya 2:28ccb8bdac86 77 uart.printf("TXDA ");
falconsyunya 2:28ccb8bdac86 78
falconsyunya 2:28ccb8bdac86 79 uart.printf("%03x",a);
falconsyunya 2:28ccb8bdac86 80 uart.printf("%03x",b);
falconsyunya 2:28ccb8bdac86 81 uart.printf("%03x",c);
falconsyunya 2:28ccb8bdac86 82
falconsyunya 2:28ccb8bdac86 83 uart.printf("\r\n");
falconsyunya 2:28ccb8bdac86 84
falconsyunya 2:28ccb8bdac86 85 wait(0.34);//IM920長距離モードの場合,3パケット/sが理論上最大速度.
MatsumotoKouki 0:34d043558630 86 }
MatsumotoKouki 0:34d043558630 87
MatsumotoKouki 0:34d043558630 88
MatsumotoKouki 0:34d043558630 89 fclose(fp);
MatsumotoKouki 0:34d043558630 90
MatsumotoKouki 0:34d043558630 91 return 0;
MatsumotoKouki 0:34d043558630 92
MatsumotoKouki 0:34d043558630 93 }
MatsumotoKouki 0:34d043558630 94
MatsumotoKouki 0:34d043558630 95
MatsumotoKouki 0:34d043558630 96 void getGPS(float *hokui_n,float *tokei_n) { //関数getGPS定義
MatsumotoKouki 0:34d043558630 97 unsigned char c = gps.getc();
MatsumotoKouki 0:34d043558630 98 if( c=='$' || i == 256){
MatsumotoKouki 0:34d043558630 99 mode = 0;
MatsumotoKouki 0:34d043558630 100 i = 0;
MatsumotoKouki 0:34d043558630 101 }
MatsumotoKouki 0:34d043558630 102 if(mode==0){
MatsumotoKouki 0:34d043558630 103 if((gps_data[i]=c) != '\r'){
MatsumotoKouki 0:34d043558630 104 i++;
MatsumotoKouki 0:34d043558630 105 }else{
MatsumotoKouki 0:34d043558630 106 gps_data[i]='\0';
MatsumotoKouki 0:34d043558630 107 // pc.printf("%s\r\n",gps_data);
MatsumotoKouki 0:34d043558630 108 if( sscanf(gps_data, "$GPGGA,%f,%f,%c,%f,%c,%d",&w_time,&hokui,&ns,&tokei,&ew,&rlock) >= 1){
MatsumotoKouki 0:34d043558630 109 if(rlock==1){
MatsumotoKouki 0:34d043558630 110 // pc.printf("Status:Lock(%d)\n\r",rlock);
MatsumotoKouki 0:34d043558630 111 //logitude
MatsumotoKouki 0:34d043558630 112 d_tokei= int(tokei/100);
MatsumotoKouki 0:34d043558630 113 m_tokei= (tokei-d_tokei*100)/60;
MatsumotoKouki 0:34d043558630 114 g_tokei= d_tokei+m_tokei;
MatsumotoKouki 0:34d043558630 115 //pc.printf("Log:%4.5f,",g_tokei); //Latitude
MatsumotoKouki 0:34d043558630 116 d_hokui=int(hokui/100);
MatsumotoKouki 0:34d043558630 117 m_hokui=(hokui-d_hokui*100)/60;
MatsumotoKouki 0:34d043558630 118 g_hokui=d_hokui+m_hokui;
MatsumotoKouki 0:34d043558630 119 // pc.printf("Lat:%4.5f\n\r",g_hokui);
MatsumotoKouki 0:34d043558630 120
MatsumotoKouki 0:34d043558630 121 *hokui_n=g_hokui;
MatsumotoKouki 0:34d043558630 122 *tokei_n=g_tokei;
MatsumotoKouki 0:34d043558630 123 }
MatsumotoKouki 0:34d043558630 124 //else{
MatsumotoKouki 0:34d043558630 125 //pc.printf("\n\rStatus:unLock(%d)\n\r",rlock);
MatsumotoKouki 0:34d043558630 126 //pc.printf("%s",gps_data);
MatsumotoKouki 0:34d043558630 127 //}
MatsumotoKouki 0:34d043558630 128 }//if
MatsumotoKouki 0:34d043558630 129 *hokui_n=hokui;
MatsumotoKouki 0:34d043558630 130 *tokei_n=tokei;
MatsumotoKouki 0:34d043558630 131 } //else
MatsumotoKouki 0:34d043558630 132 } //L.16 if
MatsumotoKouki 0:34d043558630 133 }
MatsumotoKouki 0:34d043558630 134
MatsumotoKouki 1:4c7bace668f6 135 /*void callback () {
MatsumotoKouki 0:34d043558630 136 int i;
MatsumotoKouki 0:34d043558630 137 char buf[65];
MatsumotoKouki 0:34d043558630 138
MatsumotoKouki 0:34d043558630 139 //i = im920.recv(buf, 64);
MatsumotoKouki 0:34d043558630 140 buf[i] = 0;
MatsumotoKouki 0:34d043558630 141 printf("recv: '%s' (%d)\r\n", buf, i);
MatsumotoKouki 1:4c7bace668f6 142 }*/
MatsumotoKouki 0:34d043558630 143
MatsumotoKouki 0:34d043558630 144 void FlightPinDriver(){
MatsumotoKouki 0:34d043558630 145
MatsumotoKouki 0:34d043558630 146 if(FlightPin==1){
MatsumotoKouki 0:34d043558630 147 printf("Flight Pin Worked!!");
MatsumotoKouki 0:34d043558630 148 warikomi.detach();
MatsumotoKouki 0:34d043558630 149 t.attach(nichrome_ON,3);//ニクロムを作動させるまでの時間
MatsumotoKouki 0:34d043558630 150 }
MatsumotoKouki 0:34d043558630 151
MatsumotoKouki 0:34d043558630 152 }
MatsumotoKouki 0:34d043558630 153
MatsumotoKouki 0:34d043558630 154 void nichrome_ON(){
MatsumotoKouki 0:34d043558630 155 printf("テグスカット!\n\r");
MatsumotoKouki 0:34d043558630 156 fet1=1;
MatsumotoKouki 0:34d043558630 157 wait(2.0);//テグスを切るまでにかかる時間
MatsumotoKouki 0:34d043558630 158 fet1=0;
MatsumotoKouki 0:34d043558630 159 t.detach();
MatsumotoKouki 0:34d043558630 160 t.attach(buzzer,6);//ブザー作動までの時間
MatsumotoKouki 0:34d043558630 161 }
MatsumotoKouki 0:34d043558630 162
MatsumotoKouki 0:34d043558630 163 void buzzer(){
MatsumotoKouki 0:34d043558630 164 printf("ブザー作動\n\r");
MatsumotoKouki 0:34d043558630 165 fet2=1;
MatsumotoKouki 0:34d043558630 166 }