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

Dependencies:   mbed BufferedSerial

Committer:
MatsumotoKouki
Date:
Tue Aug 30 23:20:20 2022 +0000
Revision:
5:c1ad551c6c8c
Parent:
4:b0611c3abb7f
Child:
6:c7d2083ab55c
ver2(2022Apr)

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