f303k8(メイン)用のプログラム。 ver1
Dependencies: mbed BufferedSerial
main.cpp@4:b0611c3abb7f, 2022-02-25 (annotated)
- Committer:
- MatsumotoKouki
- Date:
- Fri Feb 25 05:13:37 2022 +0000
- Revision:
- 4:b0611c3abb7f
- Parent:
- 2:2c73772e8a8b
- Child:
- 5:c1ad551c6c8c
2/25 sendStatus()
Who changed what in which revision?
User | Revision | Line number | New 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 | 4:b0611c3abb7f | 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 | 4:b0611c3abb7f | 69 | L432.putc("p"); //センサー側にフライトピン作動を知らせる |
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 | 4:b0611c3abb7f | 133 | im920.printf("TXDA 0%d",flag); |
MatsumotoKouki | 4:b0611c3abb7f | 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 | } |