f303k8(メイン)用のプログラム。 ver1
Dependencies: mbed BufferedSerial
main.cpp
- Committer:
- MatsumotoKouki
- Date:
- 2022-02-25
- Revision:
- 4:b0611c3abb7f
- Parent:
- 2:2c73772e8a8b
- Child:
- 5:c1ad551c6c8c
File content as of revision 4:b0611c3abb7f:
#include "mbed.h" //コマンド取得とモード変換は関数にいれたほうがわかりやすい void nichrome_ON(); void buzzerON(); int getCommand(); void sendStatus(); void FlightPinDriver(); Serial pc(USBTX, USBRX,38400);//ボーレートを落とすと,USB側からのデータが正確に出力されない.//pcと直接通信してないのに定義する必要ある? Serial im920(PA_9,PA_10,19200);//TX(IM920_RX), RX(IM920_TX) //DigitalOut mcu_1(PA_7); //DigitalOut mcu_2(PA_6); Serial L432(PA_2,PA_3,38400); DigitalOut cameraPow(PA_11); DigitalOut cameraRec(PA_8); DigitalOut nichrome(PF_0); DigitalOut buzzer(PF_1); DigitalIn flightPin(PA_12); Timeout t; Ticker sta; Ticker warikomi; char str[100]; char comm[25]; //int i=0; int flag; //flag:現在の状態 //0:開始時、1:スリープ解除あるいはスリープに入った、2:撮影開始、(3:撮影終了、使わない)9:リセット int main() { //ここに電源投入のプロトコル /******以下3行は開始時のカメラの状態がわからないため、開始と同時に強制スリープにする。他にいい方法ねーかな******/ wait(5); cameraPow = 1; //カメラの電源スイッチON wait(3); cameraPow = 0; sta.attach(sendStatus,5); warikomi.attach(FlightPinDriver,0.5); //while(flightPin!=1){ //フライトピンが作動していない場合 flag=0; while(1){ /*if(flightPin==0){ break; }*/ flag=getCommand(); switch(flag){ case 0: break; case 1: printf("Camera is awake\r\n"); break; case 2: printf("Video start\r\n"); break; case 9: flag=0; printf("Stop command!\r\n"); /******以下3行は開始時のカメラの状態がわからないため、開始と同時に強制スリープにする。他にいい方法ねーかな*****/ cameraPow = 1; //カメラの電源スイッチON wait(3); cameraPow = 0; break; } } L432.putc("p"); //センサー側にフライトピン作動を知らせる printf("flight pin worked"); t.attach(nichrome_ON,3);//ニクロムを作動させるまでの時間 //ここからGPSの情報取得して送信 } void nichrome_ON(){ printf("テグスカット!\n\r"); nichrome=1; wait(2.0);//テグスを切るまでにかかる時間 nichrome=0; t.detach(); t.attach(buzzerON,6);//ブザー作動までの時間 } void buzzerON(){ printf("ブザー作動\n\r"); L432.putc('c'); //センサー停止指示コマンド buzzer=1; cameraRec=1;//撮影終了指示 wait(0.2);//この待機時間は要らないのかもしれない cameraRec=0; } int getCommand(){ char temp; int i=0; while(temp != '\n') { //読み込み文字が改行で無い場合(順番では\r\n) if(im920.readable()) { //IM920からのデータがある場合 char temp = im920.getc();//一文字読み込む pc.printf("%c",temp); str[i++] = temp; } //else if(temp == '\n') { //読み込み文字が改行の場合 //printf("get Command\r\n"); if(str[i-2]=='1'&&str[i-1]=='1'){ //スリープに入るor抜け出す際にはコマンド"11" printf("get 11 !!\r\n"); cameraPow = 1; //カメラの電源スイッチON wait(3); cameraPow = 0; //wait(10); //カメラの電源ON return 1; } else if(str[i-2]=='2'&&str[i-1]=='2'){ //撮影開始の際にはコマンド"22" cameraRec = 1; //撮影スイッチON(撮影開始指示) wait(0.2); //撮影開始 cameraRec=0; printf("get 22\r\n"); return 2; } else if(str[i-2]=='3'&&str[i-1]=='3'){ //撮影終了の際にはコマンド"33" printf("get 33\r\n"); L432.putc('s'); //L432にセンサ動作開始のコマンド送信 cameraRec=1; //撮影スイッチON(撮影終了指示) wait(0.2); //撮影終了 cameraRec=0; return 3; } else if(str[i-2]=='9'&&str[i-1]=='9'){ //異常が起きた時に中断するよう return 9; } } } void sendStatus(){ im920.printf("TXDA 0%d",flag); //im920.putc(flag); im920.printf("\r\n"); } void FlightPinDriver(){ if(flightPin==1){ printf("Flight Pin Worked!!\n\r"); warikomi.detach(); t.attach(nichrome_ON,8);//ニクロムを作動させるまでの時間 } }