![](/media/cache/group/mebd_thumbnail.jpg.50x50_q85.jpg)
f303k8(メイン)用のプログラム。 ver1
Dependencies: mbed BufferedSerial
main.cpp
- Committer:
- MatsumotoKouki
- Date:
- 22 months ago
- Revision:
- 5:c1ad551c6c8c
- Parent:
- 4:b0611c3abb7f
- Child:
- 6:c7d2083ab55c
File content as of revision 5:c1ad551c6c8c:
#include "mbed.h" //#include "BufferedSerial.h" //コマンド取得とモード変換は関数にいれたほうがわかりやすい void nichrome_ON(); void buzzerON(); int getCommand(); void sendStatus(); void FlightPinDriver(); //Serial pc(USBTX, USBRX,38400);//ボーレートを落とすと,USB側からのデータが正確に出力されない. //BufferedSerial im920(PA_9,PA_10,19200);//TX(IM920_RX), RX(IM920_TX) Serial im920(PA_9,PA_10,19200);//TX(IM920_RX), RX(IM920_TX) //DigitalOut mcu_1(PA_7); //DigitalOut mcu_2(PA_6); //BufferedSerial L432(PA_2,PA_3,38400); 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.printf("c\r\n"); //センサー停止指示コマンド 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.printf("s\r\n"); //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);//ニクロムを作動させるまでの時間 } }