フォトインタラプタ(コメント付き)です

Dependencies:   mbed

Fork of photosensor by cansat-d_2018

Committer:
YumaFURUTA
Date:
Tue Oct 16 12:08:33 2018 +0000
Revision:
3:55ec8c82ec41
Parent:
2:4f9ed1327327
???????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YumaFURUTA 0:149ad32ad819 1 #include "mbed.h"
YumaFURUTA 0:149ad32ad819 2 //
YumaFURUTA 0:149ad32ad819 3 InterruptIn button1(p15);
YumaFURUTA 3:55ec8c82ec41 4 InterruptIn button2(p18);
YumaFURUTA 0:149ad32ad819 5 DigitalOut led1(LED1);
YumaFURUTA 0:149ad32ad819 6 DigitalOut led2(LED2);
YumaFURUTA 0:149ad32ad819 7 DigitalOut flash(LED4);
YumaFURUTA 1:09c7cfcb680a 8 DigitalIn test(p15); //ここでピン15からの電圧の値、つまりフォトインタラプタが何か遮るものを検知すればハイの1を返して、
YumaFURUTA 1:09c7cfcb680a 9 //何もないつまりスリットの部分ではローの0を返す。それを変数testに代入している
YumaFURUTA 3:55ec8c82ec41 10 DigitalIn test2(p18);
YumaFURUTA 2:4f9ed1327327 11
YumaFURUTA 2:4f9ed1327327 12
YumaFURUTA 1:09c7cfcb680a 13 int flag; //変数flagを整数で型づけする。これがスイッチで、1の間は瞬間は何もしないけど、
YumaFURUTA 1:09c7cfcb680a 14 //スリットの間隔であるπ/4とタイヤの半径70mmつまり一つのスリットを通過するごとに52.5mm加算していく必要があるから
YumaFURUTA 1:09c7cfcb680a 15 //0になった瞬間はこれを総距離に加えるというスイッチの役割をする。
YumaFURUTA 2:4f9ed1327327 16 int flag2;
YumaFURUTA 2:4f9ed1327327 17 float rightrun; //変数runをフロートで型づけする
YumaFURUTA 2:4f9ed1327327 18 float leftrun2;
YumaFURUTA 0:149ad32ad819 19
YumaFURUTA 0:149ad32ad819 20 void rise1() {
YumaFURUTA 0:149ad32ad819 21 led1 = !led1;
YumaFURUTA 0:149ad32ad819 22 }
YumaFURUTA 0:149ad32ad819 23
YumaFURUTA 0:149ad32ad819 24 void fall1() {
YumaFURUTA 0:149ad32ad819 25 led1 = !led1;
YumaFURUTA 0:149ad32ad819 26 }
YumaFURUTA 0:149ad32ad819 27
YumaFURUTA 0:149ad32ad819 28 int main() {
YumaFURUTA 1:09c7cfcb680a 29 while(1) { //常にtrueとして以下の作業を繰り返す
YumaFURUTA 2:4f9ed1327327 30 // printf("%d\r\n", test.read()); //ピン15から読み込んだtestを読み込んでそれを表示する。だからずーっとだーって0か1が表示される
YumaFURUTA 1:09c7cfcb680a 31 if (test.read() == 1 and flag == 0){ //もしtestが1つまり何か障害物があって、かつflagが0つまりスイッチが切れているときは
YumaFURUTA 1:09c7cfcb680a 32 flag = 1; //この時はスイッチを1に切る。ただ障害物があるかつスイッチが1で切れているときはそのまま
YumaFURUTA 0:149ad32ad819 33 }
YumaFURUTA 1:09c7cfcb680a 34 else if (test.read() == 0 and flag == 1){ //そうじゃなくて今度はとうとうtestが0でスリットの部分になった瞬間なのにスイッチが1で切れているときは
YumaFURUTA 1:09c7cfcb680a 35 flag = 0; //まずこれでスイッチを0にして入れる。
YumaFURUTA 1:09c7cfcb680a 36 //こうすることで同じスリットの中でtestが複数回0を返した時に何回も52.5mmを加算しつづけるということがなくなる
YumaFURUTA 2:4f9ed1327327 37 rightrun += 52.5; //総距離runに52.5を加算する
YumaFURUTA 2:4f9ed1327327 38 }
YumaFURUTA 2:4f9ed1327327 39 if (test2.read() == 1 and flag2 == 0){
YumaFURUTA 2:4f9ed1327327 40 flag2 = 1;
YumaFURUTA 0:149ad32ad819 41 }
YumaFURUTA 2:4f9ed1327327 42 else if (test2.read() == 0 and flag2 == 1){
YumaFURUTA 2:4f9ed1327327 43 flag2 = 0;
YumaFURUTA 2:4f9ed1327327 44 leftrun2 += 52.5;
YumaFURUTA 2:4f9ed1327327 45 }
YumaFURUTA 2:4f9ed1327327 46 printf("%f", rightrun);
YumaFURUTA 2:4f9ed1327327 47 printf("\t%f\r\n", leftrun2);
YumaFURUTA 2:4f9ed1327327 48 if (rightrun > 250){ //もし総距離が250以上ならば、というのもここの値は暫定値。とりあえずゴール地点が決まればまたその値に修正する
YumaFURUTA 1:09c7cfcb680a 49 break; //つまりゴールについたらこのループからぬける
YumaFURUTA 0:149ad32ad819 50 }
YumaFURUTA 0:149ad32ad819 51 // wait_us(1);
YumaFURUTA 0:149ad32ad819 52 }
YumaFURUTA 2:4f9ed1327327 53 printf("%f\r\n", rightrun); //最後に総距離runを表示する。下のは少し動作確認で使ったプログラムやから今回にはあまり関係ない
YumaFURUTA 2:4f9ed1327327 54 printf("%f\r\n", leftrun2);
YumaFURUTA 0:149ad32ad819 55 // button1.rise(&rise1);
YumaFURUTA 0:149ad32ad819 56 // button1.fall(&fall1);
YumaFURUTA 0:149ad32ad819 57 // printf("hello world\r\n");
YumaFURUTA 0:149ad32ad819 58
YumaFURUTA 0:149ad32ad819 59 // while(1) {
YumaFURUTA 0:149ad32ad819 60 // flash = !flash;
YumaFURUTA 0:149ad32ad819 61 // wait(0.25);
YumaFURUTA 0:149ad32ad819 62 // }
YumaFURUTA 0:149ad32ad819 63 }