![](/media/cache/group/mebd_thumbnail.jpg.50x50_q85.jpg)
f303k8(メイン)用のプログラム。 ver1
Dependencies: mbed BufferedSerial
main.cpp@5:c1ad551c6c8c, 22 months ago (annotated)
- 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?
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 | |
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 | } |