sensor humikiri

Dependencies:   mbed

Committer:
kohacraft
Date:
Mon Jun 14 23:52:38 2021 +0000
Revision:
0:3c6166546366
ver1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kohacraft 0:3c6166546366 1 #include "mbed.h"
kohacraft 0:3c6166546366 2
kohacraft 0:3c6166546366 3 /* 踏切を再現するプログラム */
kohacraft 0:3c6166546366 4 /* 作り方 */
kohacraft 0:3c6166546366 5 /* https://kohacraft.com/archives/1035056914.html */
kohacraft 0:3c6166546366 6 /* https://kohacraft.com/archives/202106150823.html */
kohacraft 0:3c6166546366 7
kohacraft 0:3c6166546366 8 DigitalOut sp(dp1); //スピーカーをつなぐピンを出力に設定
kohacraft 0:3c6166546366 9 DigitalIn sw(dp2); //スイッチをつなぐピンを入力に設定
kohacraft 0:3c6166546366 10 DigitalOut led1(dp14); //LED1をつなぐピンを出力に設定
kohacraft 0:3c6166546366 11 DigitalOut led2(dp18); //LED2をつなぐピンを出力に設定
kohacraft 0:3c6166546366 12
kohacraft 0:3c6166546366 13 const int humikiriMax = 3; //スイッチが反応してから踏切が終わるまでの長さ
kohacraft 0:3c6166546366 14
kohacraft 0:3c6166546366 15 int main() {
kohacraft 0:3c6166546366 16 //低い方の音
kohacraft 0:3c6166546366 17 double MIonTime = (1.0/678)/4; //ミ
kohacraft 0:3c6166546366 18 double MIoffTime = (1.0/678)/4;
kohacraft 0:3c6166546366 19 double MISyuuki = MIonTime + MIoffTime;
kohacraft 0:3c6166546366 20
kohacraft 0:3c6166546366 21 //高い方の音
kohacraft 0:3c6166546366 22 double DOonTime = (1.0/761)/4; //ファ#
kohacraft 0:3c6166546366 23 double DOoffTime = (1.0/761)/4;
kohacraft 0:3c6166546366 24 double DOSyuuki = DOonTime + DOoffTime;
kohacraft 0:3c6166546366 25
kohacraft 0:3c6166546366 26 int count = 0; //踏切がなり終わるまでのカウント 0になったら鳴り終わる
kohacraft 0:3c6166546366 27
kohacraft 0:3c6166546366 28 while(1) {
kohacraft 0:3c6166546366 29
kohacraft 0:3c6166546366 30 //両方のLEDを消す
kohacraft 0:3c6166546366 31 led1 = 0;
kohacraft 0:3c6166546366 32 led2 = 0;
kohacraft 0:3c6166546366 33
kohacraft 0:3c6166546366 34 //センサが反応したらカウンターに踏切が終わるまでの長さを入れる
kohacraft 0:3c6166546366 35 if( sw == 0 )
kohacraft 0:3c6166546366 36 count = humikiriMax;
kohacraft 0:3c6166546366 37
kohacraft 0:3c6166546366 38 //踏切がなり終わるまでのカウントが0以上ならば踏切が鳴る
kohacraft 0:3c6166546366 39 while(count > 0)
kohacraft 0:3c6166546366 40 {
kohacraft 0:3c6166546366 41
kohacraft 0:3c6166546366 42 //片方のLEDだけを点灯
kohacraft 0:3c6166546366 43 led1 = 1;
kohacraft 0:3c6166546366 44 led2 = 0;
kohacraft 0:3c6166546366 45
kohacraft 0:3c6166546366 46 for( int i=0 ; i<1000 ; i+=5 )
kohacraft 0:3c6166546366 47 {
kohacraft 0:3c6166546366 48 //音をだんだん小さくするための計算
kohacraft 0:3c6166546366 49 double duty = (i / 1000.0)/2;
kohacraft 0:3c6166546366 50 double MIonTimeNow = MIonTime - (MISyuuki * duty);
kohacraft 0:3c6166546366 51 double MIoffTimeNow = MIoffTime + (MISyuuki * duty);
kohacraft 0:3c6166546366 52 double DOonTimeNow = DOonTime - (DOSyuuki * duty);
kohacraft 0:3c6166546366 53 double DOoffTimeNow = DOoffTime + (DOSyuuki * duty);
kohacraft 0:3c6166546366 54
kohacraft 0:3c6166546366 55 sp = 1; //低い方の音をちょっと出す
kohacraft 0:3c6166546366 56 wait(MIonTimeNow);
kohacraft 0:3c6166546366 57 sp = 0;
kohacraft 0:3c6166546366 58 wait(MIoffTimeNow);
kohacraft 0:3c6166546366 59 sp = 1; //高い方の音ちょっと出す
kohacraft 0:3c6166546366 60 wait(DOonTimeNow);
kohacraft 0:3c6166546366 61 sp = 0;
kohacraft 0:3c6166546366 62 wait(DOoffTimeNow);
kohacraft 0:3c6166546366 63
kohacraft 0:3c6166546366 64 //センサが反応したらカウンターに踏切が終わるまでの長さを入れる
kohacraft 0:3c6166546366 65 if( sw == 0 )
kohacraft 0:3c6166546366 66 count = humikiriMax;
kohacraft 0:3c6166546366 67 }
kohacraft 0:3c6166546366 68 wait (0.1);
kohacraft 0:3c6166546366 69
kohacraft 0:3c6166546366 70 //もう片方のLEDだけを点灯
kohacraft 0:3c6166546366 71 led1 = 0;
kohacraft 0:3c6166546366 72 led2 = 1;
kohacraft 0:3c6166546366 73
kohacraft 0:3c6166546366 74 for( int i=0 ; i<1000 ; i+=5 )
kohacraft 0:3c6166546366 75 {
kohacraft 0:3c6166546366 76 //音をだんだん小さくするための計算
kohacraft 0:3c6166546366 77 double duty = (i / 1000.0)/2;
kohacraft 0:3c6166546366 78 double MIonTimeNow = MIonTime - (MISyuuki * duty);
kohacraft 0:3c6166546366 79 double MIoffTimeNow = MIoffTime + (MISyuuki * duty);
kohacraft 0:3c6166546366 80 double DOonTimeNow = DOonTime - (DOSyuuki * duty);
kohacraft 0:3c6166546366 81 double DOoffTimeNow = DOoffTime + (DOSyuuki * duty);
kohacraft 0:3c6166546366 82
kohacraft 0:3c6166546366 83 sp = 1; //低い方の音をちょっと出す
kohacraft 0:3c6166546366 84 wait(MIonTimeNow);
kohacraft 0:3c6166546366 85 sp = 0;
kohacraft 0:3c6166546366 86 wait(MIoffTimeNow);
kohacraft 0:3c6166546366 87 sp = 1; //高い方の音ちょっと出す
kohacraft 0:3c6166546366 88 wait(DOonTimeNow);
kohacraft 0:3c6166546366 89 sp = 0;
kohacraft 0:3c6166546366 90 wait(DOoffTimeNow);
kohacraft 0:3c6166546366 91
kohacraft 0:3c6166546366 92 //センサが反応したらカウンターに踏切が終わるまでの長さを入れる
kohacraft 0:3c6166546366 93 if( sw == 0 )
kohacraft 0:3c6166546366 94 count = humikiriMax;
kohacraft 0:3c6166546366 95 }
kohacraft 0:3c6166546366 96 wait (0.1);
kohacraft 0:3c6166546366 97
kohacraft 0:3c6166546366 98 count--; //カウンタを1減らす
kohacraft 0:3c6166546366 99 }
kohacraft 0:3c6166546366 100
kohacraft 0:3c6166546366 101 }
kohacraft 0:3c6166546366 102
kohacraft 0:3c6166546366 103 }