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

Dependencies:   mbed BufferedSerial

Committer:
taquto
Date:
Sun Sep 11 08:32:46 2022 +0000
Revision:
6:c7d2083ab55c
Parent:
5:c1ad551c6c8c
2022 0911

Who changed what in which revision?

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