![](/media/cache/group/mebd_thumbnail.jpg.50x50_q85.jpg)
f303k8(メイン)用のプログラム。 ver1
Dependencies: mbed BufferedSerial
Diff: main.cpp
- Revision:
- 2:2c73772e8a8b
- Parent:
- 1:b12e35a43ee1
- Child:
- 4:b0611c3abb7f
diff -r b12e35a43ee1 -r 2c73772e8a8b main.cpp --- a/main.cpp Mon Aug 16 12:08:41 2021 +0000 +++ b/main.cpp Sun Feb 13 07:22:59 2022 +0000 @@ -4,45 +4,70 @@ 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); -DigitalOut cameraPow(PF_0); -DigitalOut cameraRec(PF_1); -DigitalOut nichrome(PA_8); -DigitalOut buzzer(PA_11); +//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]; -int i=0; +char comm[25]; +//int i=0; +int flag; //flag:現在の状態 +//0:開始時、1:スリープ解除あるいはスリープに入った、2:撮影開始、(3:撮影終了、使わない)9:リセット + int main() { //ここに電源投入のプロトコル - int flag=0; - while(flightPin==1){ - if(flag==0){ - while(1){ - if(getCommand()==1){ - flag=1;//flagに1を代入することで先に進む - cameraPow=1; - cameraRec=1;//カメラスタートという指示しかないけど、電源と録画開始は同じ時間でいいのか? - break; - } - } - } - - else if(flag==1){ - while(1) { - if(getCommand()==1){ - flag=0;//flagに0を代入することで最初に戻る - break; - } - } - } + + /******以下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.printf("TXDA p\r\n"); //センサー側にフライトピン作動を知らせる + printf("flight pin worked"); t.attach(nichrome_ON,3);//ニクロムを作動させるまでの時間 //ここからGPSの情報取得して送信 } @@ -58,37 +83,62 @@ void buzzerON(){ printf("ブザー作動\n\r"); - buzzer=1; - //ここからモード変換だけど、わかりにくかったら他の関数に入れてもいいかも - mcu_1=1; - wait(0.1);//電流何秒流す? - mcu_1=0; + L432.putc('c'); //センサー停止指示コマンド + buzzer=1; + cameraRec=1;//撮影終了指示 + wait(0.2);//この待機時間は要らないのかもしれない + cameraRec=0; } int getCommand(){ char temp; - if(im920.readable()) { //IM920からのデータがある場合 - temp = im920.getc();//一文字読み込む - if(temp != '\r') { //読み込み文字が改行で無い場合 - str[i] = temp; - i++; - } else if(temp == '\r') { //読み込み文字が改行の場合//\nではなく\rを使うのに理由はある? - if(str[i-2] == 's'&& str[i-1] == 't') { //startの"st" - mcu_1=1; - wait(0.1); //電流流すの何秒間にしましょう? - mcu_1=0; - return 1; - } - } - else if(temp == '\r') { //読み込み文字が改行の場合//\nではなく\rを使うのに理由はある? - if(str[i-2] == 'r' && str[i-1] == 'e') { - mcu_1=1; - mcu_2=1; - wait(0.1); //電流流すの何秒間にしましょう? - mcu_1=0; - mcu_2=0; - return 1; + 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; } } - } -} \ No newline at end of file +} + +void sendStatus(){ + im920.printf("TXDA "); + 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);//ニクロムを作動させるまでの時間 + } +} \ No newline at end of file