f303k8(メイン)用のプログラム。 ver1

Dependencies:   mbed BufferedSerial

Committer:
MatsumotoKouki
Date:
Sun Feb 13 07:22:59 2022 +0000
Revision:
2:2c73772e8a8b
Parent:
1:b12e35a43ee1
Child:
4:b0611c3abb7f
main for MR Chigusa

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MatsumotoKouki 0:9669502e17f0 1 #include "mbed.h"
MatsumotoKouki 0:9669502e17f0 2
MatsumotoKouki 0:9669502e17f0 3 //コマンド取得とモード変換は関数にいれたほうがわかりやすい
MatsumotoKouki 0:9669502e17f0 4 void nichrome_ON();
MatsumotoKouki 0:9669502e17f0 5 void buzzerON();
MatsumotoKouki 1:b12e35a43ee1 6 int getCommand();
MatsumotoKouki 2:2c73772e8a8b 7 void sendStatus();
MatsumotoKouki 2:2c73772e8a8b 8 void FlightPinDriver();
MatsumotoKouki 0:9669502e17f0 9
MatsumotoKouki 0:9669502e17f0 10 Serial pc(USBTX, USBRX,38400);//ボーレートを落とすと,USB側からのデータが正確に出力されない.//pcと直接通信してないのに定義する必要ある?
MatsumotoKouki 0:9669502e17f0 11 Serial im920(PA_9,PA_10,19200);//TX(IM920_RX), RX(IM920_TX)
MatsumotoKouki 2:2c73772e8a8b 12 //DigitalOut mcu_1(PA_7);
MatsumotoKouki 2:2c73772e8a8b 13 //DigitalOut mcu_2(PA_6);
MatsumotoKouki 2:2c73772e8a8b 14 Serial L432(PA_2,PA_3,38400);
MatsumotoKouki 2:2c73772e8a8b 15 DigitalOut cameraPow(PA_11);
MatsumotoKouki 2:2c73772e8a8b 16 DigitalOut cameraRec(PA_8);
MatsumotoKouki 2:2c73772e8a8b 17 DigitalOut nichrome(PF_0);
MatsumotoKouki 2:2c73772e8a8b 18 DigitalOut buzzer(PF_1);
MatsumotoKouki 0:9669502e17f0 19 DigitalIn flightPin(PA_12);
MatsumotoKouki 0:9669502e17f0 20 Timeout t;
MatsumotoKouki 2:2c73772e8a8b 21 Ticker sta;
MatsumotoKouki 2:2c73772e8a8b 22 Ticker warikomi;
MatsumotoKouki 1:b12e35a43ee1 23 char str[100];
MatsumotoKouki 2:2c73772e8a8b 24 char comm[25];
MatsumotoKouki 2:2c73772e8a8b 25 //int i=0;
MatsumotoKouki 2:2c73772e8a8b 26 int flag; //flag:現在の状態
MatsumotoKouki 2:2c73772e8a8b 27 //0:開始時、1:スリープ解除あるいはスリープに入った、2:撮影開始、(3:撮影終了、使わない)9:リセット
MatsumotoKouki 2:2c73772e8a8b 28
MatsumotoKouki 0:9669502e17f0 29
MatsumotoKouki 0:9669502e17f0 30 int main()
MatsumotoKouki 0:9669502e17f0 31 {
MatsumotoKouki 0:9669502e17f0 32 //ここに電源投入のプロトコル
MatsumotoKouki 2:2c73772e8a8b 33
MatsumotoKouki 2:2c73772e8a8b 34 /******以下3行は開始時のカメラの状態がわからないため、開始と同時に強制スリープにする。他にいい方法ねーかな******/
MatsumotoKouki 2:2c73772e8a8b 35 wait(5);
MatsumotoKouki 2:2c73772e8a8b 36
MatsumotoKouki 2:2c73772e8a8b 37 cameraPow = 1; //カメラの電源スイッチON
MatsumotoKouki 2:2c73772e8a8b 38 wait(3);
MatsumotoKouki 2:2c73772e8a8b 39 cameraPow = 0;
MatsumotoKouki 2:2c73772e8a8b 40 sta.attach(sendStatus,5);
MatsumotoKouki 2:2c73772e8a8b 41 warikomi.attach(FlightPinDriver,0.5);
MatsumotoKouki 2:2c73772e8a8b 42
MatsumotoKouki 2:2c73772e8a8b 43 //while(flightPin!=1){ //フライトピンが作動していない場合
MatsumotoKouki 2:2c73772e8a8b 44 flag=0;
MatsumotoKouki 2:2c73772e8a8b 45 while(1){ //フライトピンが作動していない場合
MatsumotoKouki 2:2c73772e8a8b 46 /*if(flightPin==0){
MatsumotoKouki 2:2c73772e8a8b 47 break;
MatsumotoKouki 2:2c73772e8a8b 48 }*/
MatsumotoKouki 2:2c73772e8a8b 49 flag=getCommand();
MatsumotoKouki 2:2c73772e8a8b 50 switch(flag){
MatsumotoKouki 2:2c73772e8a8b 51 case 0:
MatsumotoKouki 2:2c73772e8a8b 52 break;
MatsumotoKouki 2:2c73772e8a8b 53 case 1:
MatsumotoKouki 2:2c73772e8a8b 54 printf("Camera is awake\r\n");
MatsumotoKouki 2:2c73772e8a8b 55 break;
MatsumotoKouki 2:2c73772e8a8b 56 case 2:
MatsumotoKouki 2:2c73772e8a8b 57 printf("Video start\r\n");
MatsumotoKouki 2:2c73772e8a8b 58 break;
MatsumotoKouki 2:2c73772e8a8b 59 case 9:
MatsumotoKouki 2:2c73772e8a8b 60 flag=0;
MatsumotoKouki 2:2c73772e8a8b 61 printf("Stop command!\r\n");
MatsumotoKouki 2:2c73772e8a8b 62 /******以下3行は開始時のカメラの状態がわからないため、開始と同時に強制スリープにする。他にいい方法ねーかな*****/
MatsumotoKouki 2:2c73772e8a8b 63 cameraPow = 1; //カメラの電源スイッチON
MatsumotoKouki 2:2c73772e8a8b 64 wait(3);
MatsumotoKouki 2:2c73772e8a8b 65 cameraPow = 0;
MatsumotoKouki 2:2c73772e8a8b 66 break;
MatsumotoKouki 2:2c73772e8a8b 67 }
MatsumotoKouki 0:9669502e17f0 68 }
MatsumotoKouki 2:2c73772e8a8b 69 L432.printf("TXDA p\r\n"); //センサー側にフライトピン作動を知らせる
MatsumotoKouki 2:2c73772e8a8b 70 printf("flight pin worked");
MatsumotoKouki 0:9669502e17f0 71 t.attach(nichrome_ON,3);//ニクロムを作動させるまでの時間
MatsumotoKouki 0:9669502e17f0 72 //ここからGPSの情報取得して送信
MatsumotoKouki 0:9669502e17f0 73 }
MatsumotoKouki 0:9669502e17f0 74
MatsumotoKouki 0:9669502e17f0 75 void nichrome_ON(){
MatsumotoKouki 0:9669502e17f0 76 printf("テグスカット!\n\r");
MatsumotoKouki 0:9669502e17f0 77 nichrome=1;
MatsumotoKouki 0:9669502e17f0 78 wait(2.0);//テグスを切るまでにかかる時間
MatsumotoKouki 0:9669502e17f0 79 nichrome=0;
MatsumotoKouki 0:9669502e17f0 80 t.detach();
MatsumotoKouki 0:9669502e17f0 81 t.attach(buzzerON,6);//ブザー作動までの時間
MatsumotoKouki 0:9669502e17f0 82 }
MatsumotoKouki 0:9669502e17f0 83
MatsumotoKouki 0:9669502e17f0 84 void buzzerON(){
MatsumotoKouki 0:9669502e17f0 85 printf("ブザー作動\n\r");
MatsumotoKouki 2:2c73772e8a8b 86 L432.putc('c'); //センサー停止指示コマンド
MatsumotoKouki 2:2c73772e8a8b 87 buzzer=1;
MatsumotoKouki 2:2c73772e8a8b 88 cameraRec=1;//撮影終了指示
MatsumotoKouki 2:2c73772e8a8b 89 wait(0.2);//この待機時間は要らないのかもしれない
MatsumotoKouki 2:2c73772e8a8b 90 cameraRec=0;
MatsumotoKouki 0:9669502e17f0 91 }
MatsumotoKouki 0:9669502e17f0 92
MatsumotoKouki 1:b12e35a43ee1 93 int getCommand(){
MatsumotoKouki 1:b12e35a43ee1 94 char temp;
MatsumotoKouki 2:2c73772e8a8b 95 int i=0;
MatsumotoKouki 2:2c73772e8a8b 96 while(temp != '\n') { //読み込み文字が改行で無い場合(順番では\r\n)
MatsumotoKouki 2:2c73772e8a8b 97 if(im920.readable()) { //IM920からのデータがある場合
MatsumotoKouki 2:2c73772e8a8b 98 char temp = im920.getc();//一文字読み込む
MatsumotoKouki 2:2c73772e8a8b 99 pc.printf("%c",temp);
MatsumotoKouki 2:2c73772e8a8b 100 str[i++] = temp;
MatsumotoKouki 2:2c73772e8a8b 101 } //else if(temp == '\n') { //読み込み文字が改行の場合
MatsumotoKouki 2:2c73772e8a8b 102 //printf("get Command\r\n");
MatsumotoKouki 2:2c73772e8a8b 103 if(str[i-2]=='1'&&str[i-1]=='1'){ //スリープに入るor抜け出す際にはコマンド"11"
MatsumotoKouki 2:2c73772e8a8b 104 printf("get 11 !!\r\n");
MatsumotoKouki 2:2c73772e8a8b 105 cameraPow = 1; //カメラの電源スイッチON
MatsumotoKouki 2:2c73772e8a8b 106 wait(3);
MatsumotoKouki 2:2c73772e8a8b 107 cameraPow = 0;
MatsumotoKouki 2:2c73772e8a8b 108 //wait(10); //カメラの電源ON
MatsumotoKouki 2:2c73772e8a8b 109 return 1;
MatsumotoKouki 2:2c73772e8a8b 110 }
MatsumotoKouki 2:2c73772e8a8b 111 else if(str[i-2]=='2'&&str[i-1]=='2'){ //撮影開始の際にはコマンド"22"
MatsumotoKouki 2:2c73772e8a8b 112 cameraRec = 1; //撮影スイッチON(撮影開始指示)
MatsumotoKouki 2:2c73772e8a8b 113 wait(0.2); //撮影開始
MatsumotoKouki 2:2c73772e8a8b 114 cameraRec=0;
MatsumotoKouki 2:2c73772e8a8b 115 printf("get 22\r\n");
MatsumotoKouki 2:2c73772e8a8b 116 return 2;
MatsumotoKouki 2:2c73772e8a8b 117 }
MatsumotoKouki 2:2c73772e8a8b 118 else if(str[i-2]=='3'&&str[i-1]=='3'){ //撮影終了の際にはコマンド"33"
MatsumotoKouki 2:2c73772e8a8b 119 printf("get 33\r\n");
MatsumotoKouki 2:2c73772e8a8b 120 L432.putc('s'); //L432にセンサ動作開始のコマンド送信
MatsumotoKouki 2:2c73772e8a8b 121 cameraRec=1; //撮影スイッチON(撮影終了指示)
MatsumotoKouki 2:2c73772e8a8b 122 wait(0.2); //撮影終了
MatsumotoKouki 2:2c73772e8a8b 123 cameraRec=0;
MatsumotoKouki 2:2c73772e8a8b 124 return 3;
MatsumotoKouki 2:2c73772e8a8b 125 }
MatsumotoKouki 2:2c73772e8a8b 126 else if(str[i-2]=='9'&&str[i-1]=='9'){ //異常が起きた時に中断するよう
MatsumotoKouki 2:2c73772e8a8b 127 return 9;
MatsumotoKouki 1:b12e35a43ee1 128 }
MatsumotoKouki 1:b12e35a43ee1 129 }
MatsumotoKouki 2:2c73772e8a8b 130 }
MatsumotoKouki 2:2c73772e8a8b 131
MatsumotoKouki 2:2c73772e8a8b 132 void sendStatus(){
MatsumotoKouki 2:2c73772e8a8b 133 im920.printf("TXDA ");
MatsumotoKouki 2:2c73772e8a8b 134 im920.putc(flag);
MatsumotoKouki 2:2c73772e8a8b 135 im920.printf("\r\n");
MatsumotoKouki 2:2c73772e8a8b 136 }
MatsumotoKouki 2:2c73772e8a8b 137
MatsumotoKouki 2:2c73772e8a8b 138 void FlightPinDriver(){
MatsumotoKouki 2:2c73772e8a8b 139 if(flightPin==1){
MatsumotoKouki 2:2c73772e8a8b 140 printf("Flight Pin Worked!!\n\r");
MatsumotoKouki 2:2c73772e8a8b 141 warikomi.detach();
MatsumotoKouki 2:2c73772e8a8b 142 t.attach(nichrome_ON,8);//ニクロムを作動させるまでの時間
MatsumotoKouki 2:2c73772e8a8b 143 }
MatsumotoKouki 2:2c73772e8a8b 144 }