f303k8(メイン)用のプログラム。 ver1
Dependencies: mbed BufferedSerial
main.cpp@6:c7d2083ab55c, 2022-09-11 (annotated)
- 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?
User | Revision | Line number | New 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 | } |