Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed BufferedSerial
main.cpp
00001 #include "mbed.h" 00002 //#include "BufferedSerial.h" 00003 00004 //コマンド取得とモード変換は関数にいれたほうがわかりやすい 00005 void nichrome_ON(); 00006 void buzzerON(); 00007 int getCommand(); 00008 void sendStatus(); 00009 void FlightPinDriver(); 00010 00011 Serial pc(USBTX, USBRX,38400);//ボーレートを落とすと,USB側からのデータが正確に出力されない. 00012 //BufferedSerial im920(PA_9,PA_10,19200);//TX(IM920_RX), RX(IM920_TX) 00013 Serial im920(PA_9,PA_10,19200);//TX(IM920_RX), RX(IM920_TX) 00014 //DigitalOut mcu_1(PA_7); 00015 //DigitalOut mcu_2(PA_6); 00016 //BufferedSerial L432(PA_2,PA_3,38400); 00017 00018 //Serial L432(PA_2,PA_3,38400); 00019 DigitalOut F2L_1(PA_2); 00020 DigitalOut F2L_2(PA_3); 00021 00022 DigitalOut cameraPow(PA_11); 00023 DigitalOut cameraRec(PA_8); 00024 DigitalOut nichrome(PF_0); 00025 DigitalOut buzzer(PF_1); 00026 DigitalIn flightPin(PA_12); 00027 Timeout t; 00028 Ticker sta; 00029 Ticker warikomi; 00030 char str[100]; 00031 char comm[25]; 00032 //int i=0; 00033 int flag; //flag:現在の状態 00034 //0:開始時、1:スリープ解除あるいはスリープに入った、2:撮影開始、(3:撮影終了、使わない)9:リセット 00035 00036 00037 int main() 00038 { 00039 //ここに電源投入のプロトコル 00040 00041 /******以下3行は開始時のカメラの状態がわからないため、開始と同時に強制スリープにする。他にいい方法ねーかな******/ 00042 wait(5); 00043 00044 cameraPow = 1; //カメラの電源スイッチON 00045 wait(3); 00046 cameraPow = 0; 00047 sta.attach(sendStatus,5); 00048 warikomi.attach(FlightPinDriver,0.5); 00049 00050 //while(flightPin!=1){ //フライトピンが作動していない場合 00051 flag=0; 00052 F2L_1 = 0; 00053 F2L_2 = 0; //マイコン間通信のピンはどちらも0 00054 pc.printf("stable\r\n"); 00055 while(1) { 00056 //FlightPinDriver(); 00057 00058 /*if(flightPin==0){ 00059 break; 00060 }*/ 00061 flag=getCommand(); 00062 switch(flag) { 00063 case 0: 00064 break; 00065 case 1: 00066 //printf("Camera is awake\r\n"); 00067 break; 00068 case 2: 00069 //printf("Video start\r\n"); 00070 break; 00071 case 9: 00072 flag=0; 00073 //printf("Stop command!\r\n"); 00074 /******以下3行は開始時のカメラの状態がわからないため、開始と同時に強制スリープにする。他にいい方法ねーかな*****/ 00075 cameraPow = 1; //カメラの電源スイッチON 00076 wait(3); 00077 cameraPow = 0; 00078 break; 00079 } 00080 } 00081 00082 } 00083 00084 void nichrome_ON() 00085 { 00086 //printf("テグスカット!\n\r"); 00087 F2L_1 = 1; 00088 F2L_2 = 1; //マイコン間通信のピンはどちらも1 00089 nichrome=1; 00090 wait(5.0);//テグスを切るまでにかかる時間 00091 nichrome=0; 00092 t.detach(); 00093 t.attach(buzzerON,60);//ブザー作動までの時間 00094 } 00095 00096 void buzzerON() 00097 { 00098 pc.printf("buzzer ON\n\r"); 00099 //L432.printf("c\r\n"); //センサー停止指示コマンド 00100 F2L_1 = 0; 00101 F2L_2 = 1; //マイコン間通信のピンは2つ目のみ1 00102 buzzer=1; 00103 cameraRec=1;//撮影終了指示 00104 wait(0.2);//この待機時間は要らないのかもしれない 00105 cameraRec=0; 00106 wait(1); 00107 cameraRec=1; //撮影スイッチON(撮影終了指示) 00108 wait(0.2); //撮影終了(撮影中のスリープ?が起きはじめたので2回指示を出すようにした) 00109 cameraRec=0; 00110 } 00111 00112 int getCommand() 00113 { 00114 char temp; 00115 int i=0; 00116 while(temp != '\n') { //読み込み文字が改行で無い場合(順番では\r\n) 00117 if(im920.readable()) { //IM920からのデータがある場合 00118 char temp = im920.getc();//一文字読み込む 00119 //pc.printf("%c",temp); 00120 str[i++] = temp; 00121 } //else if(temp == '\n') { //読み込み文字が改行の場合 00122 //printf("get Command\r\n"); 00123 if(str[i-2]=='1'&&str[i-1]=='1') { //スリープに入るor抜け出す際にはコマンド"11" 00124 im920.printf("get 11 !!\r\n"); 00125 cameraPow = 1; //カメラの電源スイッチON 00126 wait(3); 00127 cameraPow = 0; 00128 //wait(10); //カメラの電源ON 00129 return 1; 00130 } else if(str[i-2]=='2'&&str[i-1]=='2') { //撮影開始の際にはコマンド"22" 00131 cameraRec = 1; //撮影スイッチON(撮影開始指示) 00132 wait(0.2); //撮影開始 00133 cameraRec=0; 00134 im920.printf("get 22\r\n"); 00135 return 2; 00136 } 00137 else if(str[i-2]=='3'&&str[i-1]=='3') { //撮影終了の際にはコマンド"33" 00138 im920.printf("get 33\r\n"); 00139 //L432.printf("s\r\n"); //L432にセンサ動作開始のコマンド送信 00140 00141 cameraRec=1; //撮影スイッチON(撮影終了指示) 00142 wait(0.2); //撮影終了 00143 cameraRec=0; 00144 wait(1); 00145 cameraRec=1; //撮影スイッチON(撮影終了指示) 00146 wait(0.2); //撮影終了(撮影中のスリープ?が起きはじめたので2回指示を出すようにした) 00147 cameraRec=0; 00148 return 3; 00149 } else if(str[i-2]=='9'&&str[i-1]=='9') { //異常が起きた時に中断するよう 00150 return 9; 00151 } 00152 } 00153 } 00154 00155 void sendStatus() 00156 { 00157 im920.printf("TXDA 0%d",flag); 00158 //im920.putc(flag); 00159 im920.printf("\r\n"); 00160 } 00161 00162 void FlightPinDriver() 00163 { 00164 if(flightPin==1) { 00165 //L432.putc('p'); //センサー側にフライトピン作動を知らせる→センサー動作開始 00166 F2L_1 = 1; 00167 F2L_2 = 0; //マイコン間通信のピンは1つ目のみ1 00168 00169 im920.printf("flight pin worked\r\n"); 00170 //t.attach(nichrome_ON,3);//ニクロムを作動させるまでの時間 00171 //ここからGPSの情報取得して送信 00172 warikomi.detach(); 00173 t.attach(nichrome_ON,2.8);//ニクロムを作動させるまでの時間(本当は4秒だがニクロムが熱をもつまで時間がかかるので2.8秒にしてある) 00174 } 00175 }
Generated on Sun Sep 11 2022 08:32:54 by
1.7.2