![](/media/cache/group/mebd_thumbnail.jpg.50x50_q85.jpg)
f303k8(メイン)用のプログラム。 ver1
Dependencies: mbed BufferedSerial
main.cpp
- Committer:
- taquto
- Date:
- 22 months ago
- Revision:
- 6:c7d2083ab55c
- Parent:
- 5:c1ad551c6c8c
File content as of revision 6:c7d2083ab55c:
#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 F2L_1(PA_2); DigitalOut F2L_2(PA_3); 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; F2L_1 = 0; F2L_2 = 0; //マイコン間通信のピンはどちらも0 pc.printf("stable\r\n"); while(1) { //FlightPinDriver(); /*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; } } } void nichrome_ON() { //printf("テグスカット!\n\r"); F2L_1 = 1; F2L_2 = 1; //マイコン間通信のピンはどちらも1 nichrome=1; wait(5.0);//テグスを切るまでにかかる時間 nichrome=0; t.detach(); t.attach(buzzerON,60);//ブザー作動までの時間 } void buzzerON() { pc.printf("buzzer ON\n\r"); //L432.printf("c\r\n"); //センサー停止指示コマンド F2L_1 = 0; F2L_2 = 1; //マイコン間通信のピンは2つ目のみ1 buzzer=1; cameraRec=1;//撮影終了指示 wait(0.2);//この待機時間は要らないのかもしれない cameraRec=0; wait(1); cameraRec=1; //撮影スイッチON(撮影終了指示) wait(0.2); //撮影終了(撮影中のスリープ?が起きはじめたので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" im920.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; im920.printf("get 22\r\n"); return 2; } else if(str[i-2]=='3'&&str[i-1]=='3') { //撮影終了の際にはコマンド"33" im920.printf("get 33\r\n"); //L432.printf("s\r\n"); //L432にセンサ動作開始のコマンド送信 cameraRec=1; //撮影スイッチON(撮影終了指示) wait(0.2); //撮影終了 cameraRec=0; wait(1); cameraRec=1; //撮影スイッチON(撮影終了指示) wait(0.2); //撮影終了(撮影中のスリープ?が起きはじめたので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) { //L432.putc('p'); //センサー側にフライトピン作動を知らせる→センサー動作開始 F2L_1 = 1; F2L_2 = 0; //マイコン間通信のピンは1つ目のみ1 im920.printf("flight pin worked\r\n"); //t.attach(nichrome_ON,3);//ニクロムを作動させるまでの時間 //ここからGPSの情報取得して送信 warikomi.detach(); t.attach(nichrome_ON,2.8);//ニクロムを作動させるまでの時間(本当は4秒だがニクロムが熱をもつまで時間がかかるので2.8秒にしてある) } }