這是我在測試版子的程式碼: int OUT = 2; int FIN = A0; int FOUT = A1; int ROUT = A2; // 放大 int val; int count; void setup(){ Serial.begin(9600); pinMode(OUT, INPUT); pinMode(FIN, OUTPUT); pinMode(FOUT, INPUT); pinMode(ROUT, OUTPUT); } void loop(){ val= digitalRead(OUT); //anval=analogRead(A0); if(val==LOW){ //當val為低電位時 count++; Serial.print("SEND MAIL\n"); Serial.println(count); } Serial.println(FIN); Serial.println(FOUT); Serial.println(ROUT); Serial.print("-------------\n"); delay(1000); } 結果: 54 55 56 ------------- 54 55 56 ------------- 54 55 56 ------------- 54 55 56 ------------- 54 55 56 ------------- 54 55 56 ------------- 問題: (1) FIN FOUT ROUT 值都沒變化是正常的嗎?? (2) 麥克風 W503調到在一點點就可以讓OUT產生低電位 但是當低電話產生後他無法重置 會永遠保持低電位 W503 調多一點的話就無法到低電位 不懂哪邊有設定錯誤或是沒有增測到需要的值 |
既然是模組的話,我是不太建議說去做任何更動! |
以我的看法,因為你是買模組,所以你的硬體是被"綁死"的, 所以AO那個腳位,在接放大倍率的IC,如ua741(OPA)這一顆看看, 可是需要接示波器,你要增長的不是距離,而是把接收"更微小"的訊號給放大 但是越大會越受到"環境音"的影響更大,所以要斟酌一下放大倍率! |
謝謝大家 ~ 可以測了 但是測量距離只有5CM 是否有什麼方法可以增長距離!!?? |
ㄟ.....那個 1. pinMode(AO, INPUT); <<< 這行完全不必要,analog 是不需要設定的,除非你想把他變digital腳位 2. Serial.println(val); 就能自動換行,並不需要換行控制碼,且C語言的換行是\n 3. analogRead回來的數值介於0~1023 (10bit 解析度) 另外這種麥克風受環境音的影響滿大,所以通常要很接近,或是叫很大聲/拍手很大聲 |
本帖最後由 ates1687 於 2014-11-27 23:33 編輯 int DO = 2; int AO = AO; int val; int val1; //建立數位的存取數值 int count=0; //<-不懂為什麼要宣告count @@? void setup(){ Serial.begin(9600); pinMode(DO, INPUT); pinMode(AO, INPUT); //<-沒有宣告AO為類比輸入(關鍵是這一個) } void loop(){ Serial.print("val:"); val= analogRead(AO); val1= digitalRead(DO) //<-建議建立數位讀取,因為你都宣告int DO = 2; Serial.println(val); if(val==LOW){ //應該改成" if(val==HIGH){ " or " if(val>0){ " count++; Serial.print("val:/n"); // "/n"方便看而已,代表自動換行 Serial.println(val); //顯示類比電壓 Serial.print("count:/n"); Serial.println(count); delay(300); }else{ //就是val=LOW(沒有聲音的時候)<-只是註解,個人習慣這樣><" Serial.print("Sound too small "); //顯示"聲音太小了" Serial.println(val); delay(300); } } -------------------------------------------------(文章分割線) 以上程式是參考用,錯了希望能糾正,給予回復者進步的空間! 以下是個人意見:(還是僅供參考,錯了在糾正↑) analogRead代表類比輸入,讀取的數值假設是1~1025 digitalRead代表數位輸入,讀取的數值應該是0 1 高 低 你那個麥克風模組有兩個腳位分別是DO跟AO AO就要接類比輸入,DO就要接數位輸入 DO判斷式: if(val1==HIGH){ //HIGH=有聲音,LOW=沒有聲音 AO判斷式: if(val>50){ //當聲音到達"程度的音量",要看讀取的analogRead數值,自由發揮想要做什麼事 |
可以請拍一下照片你怎麼接的嗎? |
小黑屋|手機版|Archiver|機器人論壇 from 2005.07
GMT+8, 2024-11-22 00:04 , Processed in 0.171488 second(s), 11 queries , Apc On.
Powered by Discuz! X3.2
© 2001-2013 Comsenz Inc.