real sound humikiri

Dependencies:   mbed ck_humikiri

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 
00003 /* 踏切を再現するプログラム */
00004 /* 配線の仕方 */
00005 /*  https://kohacraft.com/archives/1035056914.html */
00006  
00007 
00008 DigitalOut sp(dp1);     //スピーカーをつなぐピンを出力に設定
00009 DigitalIn sw(dp2);      //スイッチをつなぐピンを入力に設定
00010 DigitalOut led1(dp14);  //LED1をつなぐピンを出力に設定
00011 DigitalOut led2(dp18);  //LED2をつなぐピンを出力に設定
00012 
00013 int main() {
00014     //低い方の音
00015     double  MIonTime = (1.0/678)/4; //ミ
00016     double  MIoffTime = (1.0/678)/4;
00017     double  MISyuuki = MIonTime + MIoffTime;
00018         
00019     //高い方の音
00020     double  DOonTime = (1.0/761)/4; //ファ#
00021     double  DOoffTime = (1.0/761)/4;
00022     double  DOSyuuki = DOonTime + DOoffTime;
00023     
00024     while(1) {
00025         
00026         //両方のLEDを消す
00027         led1 = 0;
00028         led2 = 0;
00029 
00030         //スイッチが押されている間は踏切が鳴る
00031         while( sw == 1 )
00032         {
00033                     
00034             //片方のLEDだけを点灯
00035             led1 = 1;
00036             led2 = 0;
00037 
00038             for( int i=0 ; i<1000 ; i+=5 )
00039             {   
00040                 //音をだんだん小さくするための計算
00041                 double duty = (i / 1000.0)/2;
00042                 double MIonTimeNow = MIonTime - (MISyuuki * duty);
00043                 double MIoffTimeNow = MIoffTime + (MISyuuki * duty);
00044                 double DOonTimeNow = DOonTime - (DOSyuuki * duty);
00045                 double DOoffTimeNow = DOoffTime + (DOSyuuki * duty);
00046                 
00047                 sp = 1; //低い方の音をちょっと出す
00048                 wait(MIonTimeNow); 
00049                 sp = 0;
00050                 wait(MIoffTimeNow); 
00051                 sp = 1; //高い方の音ちょっと出す
00052                 wait(DOonTimeNow); 
00053                 sp = 0;
00054                 wait(DOoffTimeNow);
00055 
00056             }
00057             wait (0.1);
00058             
00059             //もう片方のLEDだけを点灯
00060             led1 = 0;
00061             led2 = 1;
00062 
00063             for( int i=0 ; i<1000 ; i+=5 )
00064             {   
00065                 //音をだんだん小さくするための計算
00066                 double duty = (i / 1000.0)/2;                
00067                 double MIonTimeNow = MIonTime - (MISyuuki * duty);
00068                 double MIoffTimeNow = MIoffTime + (MISyuuki * duty);
00069                 double DOonTimeNow = DOonTime - (DOSyuuki * duty);
00070                 double DOoffTimeNow = DOoffTime + (DOSyuuki * duty);
00071                 
00072                 sp = 1; //低い方の音をちょっと出す
00073                 wait(MIonTimeNow); 
00074                 sp = 0;
00075                 wait(MIoffTimeNow); 
00076                 sp = 1; //高い方の音ちょっと出す
00077                 wait(DOonTimeNow); 
00078                 sp = 0;
00079                 wait(DOoffTimeNow);
00080 
00081             }
00082             wait (0.1);
00083             
00084         }
00085              
00086     }
00087         
00088 }