kohacraft Lab
/
kc_humikiriSensor
sensor humikiri
main.cpp@0:3c6166546366, 2021-06-14 (annotated)
- Committer:
- kohacraft
- Date:
- Mon Jun 14 23:52:38 2021 +0000
- Revision:
- 0:3c6166546366
ver1.0
Who changed what in which revision?
User | Revision | Line number | New 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 | } |