Advertisement
pigg

Arduino麥克風拍手控制開關

May 26th, 2015
404
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.86 KB | None | 0 0
  1. /*
  2. 拍一下開,拍一下關
  3. 範例3
  4. 使用麥克風感測拍手的聲音控制led亮滅,拍一下手led則亮,再拍一下手led則滅,依此循環。
  5.  
  6. */
  7.  
  8. int LED=13; //設定LED腳位
  9. void setup() {
  10. Serial.begin(9600);
  11. pinMode(LED,OUTPUT);
  12. }
  13.  
  14. void loop() {
  15. //若要看A0值請加入這句,一般來說是不用變 Serial.println(analogRead(A0));
  16. if (analogRead(A0)>500) //設定A0達成條件值500
  17. {
  18.     if (digitalRead(LED)==1)   //讀取LED目前狀況(亮=1)
  19.     {
  20.        digitalWrite(LED,0);    //如果亮著,讓他滅掉
  21.     }
  22.     else                          //如果沒亮
  23.     {
  24.       digitalWrite(LED,1);       //讓他亮
  25.     }
  26.     delay(100);                  //避免誤動作,加延遲時間
  27. }
  28. }
  29. ----------------------------我是分隔線------------------------------
  30. /*
  31. 拍兩下開關
  32.  
  33. 範例4
  34. 使用麥克風感測拍手的聲音控制led亮滅,拍兩下手led則亮,再拍兩下手led則滅,依此循環。
  35.  
  36. 我寫得有點亂 但我自己覺得比較好理解
  37. 如果無法理解的請自己參閱課本
  38. */
  39. int LED = 13;
  40. void setup()
  41. {
  42.   Serial.begin(9600);
  43.   pinMode(LED,OUTPUT);
  44. }
  45. double first=0,second=0,clap=0,aaa;   //預設宣告第一次=0 第二次=0 拍的數量=0 以及aaa
  46. void loop()
  47. {
  48.   double time = millis();     //time = Arduino 執行到的秒數
  49.  
  50.   if (analogRead(A0)>500)    //如果讀到>500
  51.   {
  52.     clap++;                 //拍的次數+1
  53.      if (clap == 1)         //如果拍的次數是1
  54.      {
  55.        first = time;        //那第一次拍的時間=Arduino目前執行到的時間
  56.      }
  57.      else if (clap == 2)    //如果拍的次數是2
  58.      {
  59.        second = time;       //那第二次的時間=Arduino目前執行到的時間
  60.        aaa = second - first; //aaa=第二次-第一次的時間差
  61.        if ((aaa>300)&&(aaa<1500))  //如果300<aaa<1500(毫秒)
  62.             {
  63.               if (digitalRead(LED)==0)  //如果目前LED是滅的
  64.               {
  65.                 digitalWrite(LED,1);     //把LED點亮
  66.                 delay(100);             //避免錯誤 自己延遲100ms
  67.               }
  68.               else                      //如果目前LED是亮的
  69.               {
  70.                 digitalWrite(LED,0);     //把LED關掉
  71.                 delay(100);             //避免誤判 自己延遲100ms
  72.               }
  73.               clap = 0;                 //做完一次完整流程了,把所有記數給歸0
  74.               first = 0;
  75.               second = 0;
  76.             }
  77.             else                       //如果300<aaa<1500不成立
  78.             {
  79.               clap = 1;                //把拍的次數2改1
  80.               first = second;          //把第二次拍的時間存到第一次
  81.               second = 0;              //把第二次歸0
  82.               delay(100);              //避免誤判延遲100ms
  83.             }
  84.      }
  85.   }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement