Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 8917|回復: 26
打印 上一主題 下一主題

遇到了動作問題~新手求解^^

[複製鏈接]
跳轉到指定樓層
1#
發表於 2012-9-27 04:21:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是電子琴的程式:int inputPinG = 7;
int inputPinF = 6;
int inputPinE = 5;
int inputPinD = 4;
int inputPinC = 3;
int inputPinB = 2;
int inputPinA = 1;
int BuzzerPin = 0;
void setup() {
  pinMode(inputPinG, INPUT);
  pinMode(inputPinF, INPUT);
  pinMode(inputPinE, INPUT);
  pinMode(inputPinD, INPUT);
  pinMode(inputPinC, INPUT);
  pinMode(inputPinB, INPUT);
  pinMode(inputPinA, INPUT);
  pinMode(BuzzerPin, OUTPUT);
}
void loop() {
int valG = digitalRead(inputPinG);
int valF = digitalRead(inputPinF);
int valE = digitalRead(inputPinE);
int valD = digitalRead(inputPinD);
int valC = digitalRead(inputPinC);
int valB = digitalRead(inputPinB);
int valA = digitalRead(inputPinA);
digitalWrite(BuzzerPin, LOW);
if (valG == HIGH){
  digitalWrite(BuzzerPin, HIGH);
  delayMicroseconds(1915);
  digitalWrite(BuzzerPin, LOW);
  delayMicroseconds(1915);
  }
else if (valF == HIGH){
  digitalWrite(BuzzerPin, HIGH);
  delayMicroseconds(1700);
  digitalWrite(BuzzerPin, LOW);
  delayMicroseconds(1700);
  }
else if (valE == HIGH){
  digitalWrite(BuzzerPin, HIGH);
  delayMicroseconds(1519);
  digitalWrite(BuzzerPin, LOW);
  delayMicroseconds(1519);
  }
else if (valD == HIGH){
  digitalWrite(BuzzerPin, HIGH);
  delayMicroseconds(1432);
  digitalWrite(BuzzerPin, LOW);
  delayMicroseconds(1432);
  }
else if (valC == HIGH){
  digitalWrite(BuzzerPin, HIGH);
  delayMicroseconds(1275);
  digitalWrite(BuzzerPin, LOW);
  delayMicroseconds(1275);
  }
else if (valB == HIGH){
  digitalWrite(BuzzerPin, HIGH);
  delayMicroseconds(1136);
  digitalWrite(BuzzerPin, LOW);
  delayMicroseconds(1136);
  }
  else if (valA == HIGH){
  digitalWrite(BuzzerPin, HIGH);
  delayMicroseconds(990);
  digitalWrite(BuzzerPin, LOW);
  delayMicroseconds(990);
  }
else digitalWrite(BuzzerPin, LOW);  
}

最大的問題就是輸出接了蜂鳴器,就響個不停,完全不知道是怎麼回事= =
我連接腳都還沒接,光接喇叭就響個不停了,真的不知到問題出在哪= =
2#
發表於 2012-9-27 21:53:15 | 只看該作者
回復 1# dream87694

你可以就照著以下網站的做:
Arduino實驗筆記(四) 按鍵開關控制蜂鳴器-簡易電子琴
http://g3mk.blog.163.com/blog/static/2002041302012141022992/
3#
發表於 2012-9-27 22:14:01 | 只看該作者
輸入腳位在沒有接任何電路時,而且也沒有設定 pullup,輸入值可能為 high 或 low。只要有一個腳位是 high,按照程式的邏輯,蜂鳴器就會叫了。
判斷條件若是 high,輸入腳位必須接上 pulldown 電阻到 ground,確保未按鍵時為 low。
判斷條件若是 low,輸入腳位必須接上 pullup 電阻到 +5V,確保未按鍵時為 high。
arduino 有內部的 pullup 功能,對輸入腳下一個 digitalWrite(pin, HIGH)即可。
4#
 樓主| 發表於 2012-9-27 22:44:49 | 只看該作者
回復 2# vegewell


   我照他寫的,程式對,但就是喇叭會響不停!!
5#
 樓主| 發表於 2012-9-27 22:47:13 | 只看該作者
回復 3# Curtiss


   所以程式要改過??^^
6#
發表於 2012-9-27 23:46:27 | 只看該作者
回復 4# dream87694


    電路也是照接的嗎?
(他有個圖片多接一條線)
你也可以秀你的線路,
你也可以把所有接線拆掉,
然後先接一個按鍵開關,
試試,沒問題再接第二個,
看看哪個有問題,
7#
發表於 2012-9-28 00:57:42 | 只看該作者
回復  Curtiss


   所以程式要改過??^^
dream87694 發表於 2012-9-27 22:47



    電路要改。輸入腳必須有 pullup 或 pulldown 電路。如下圖:(參考自http://www.christec.co.nz/blog/archives/56)
   
    使用 pullup,未按 = HIGH,按下 = LOW
    使用 pulldown,未按 = LOW,按下 = HIGH
8#
 樓主| 發表於 2012-9-28 07:59:41 | 只看該作者
回復 6# vegewell


   我的確是照著他接的!!^^
動作也都正確,不過就是會一直響= =
9#
 樓主| 發表於 2012-9-28 21:21:32 | 只看該作者
回復 6# vegewell


   我把我接的拍成影片,用好了我會傳給您過目^^
10#
 樓主| 發表於 2012-9-28 21:22:42 | 只看該作者
回復 7# Curtiss


   我把我接的拍成影片,用好了我會傳給您過目^^
11#
 樓主| 發表於 2012-9-28 21:51:37 | 只看該作者
本帖最後由 dream87694 於 2012-9-28 22:03 編輯

回復 6# vegewell


    VIDEO0006.3gp (23.45 MB, 下載次數: 888) 我輸出定義為0腳
然後1~7相對的7個音階
問題就在於輸出腳接喇叭就一直嚮
影片可能需要下載,請笑納^^
12#
 樓主| 發表於 2012-9-28 22:04:59 | 只看該作者
回復 7# Curtiss


    VIDEO0006.3gp (23.45 MB, 下載次數: 710) 然後1~7相對的7個音階
問題就在於輸出腳接喇叭就一直嚮
影片可能需要下載,請笑納^^
13#
發表於 2012-9-28 22:09:36 | 只看該作者
回復  vegewell


    我輸出定義為0腳
然後1~7相對的7個音階
問題就在於輸出腳接喇叭就一直嚮影片可 ...
dream87694 發表於 2012-9-28 21:51



    從影片可以明顯的看出輸入腳並沒有接到其他的電路,所以在未接觸鱷魚夾之間,均為浮接的狀態。
    最簡單的修改方式是使用 Arduino 的內建 pullup 功能。在 setup() 中,對每一個輸入腳位增加 digitalWrite( 腳位, HIGH) 指令即可。
    然後判斷式的" == HIGH" 改為 " == LOW"。鱷魚夾的另一端改為接地,而非 +5V。這樣就可以解決浮接的問題。
14#
 樓主| 發表於 2012-9-28 22:48:10 | 只看該作者
回復 13# Curtiss


   謝謝你^^我試看看如何在跟你說!!
被者個問題搞到火燒屁股= =
15#
 樓主| 發表於 2012-9-29 05:28:49 | 只看該作者
回復 13# Curtiss


  大大^^請問~我現在只有這七個音,想再多加6個音要怎麼辦??@口@
16#
發表於 2012-10-1 21:43:30 | 只看該作者
回復  Curtiss


  大大^^請問~我現在只有這七個音,想再多加6個音要怎麼辦??@口@
dream87694 發表於 2012-9-29 05:28



    1. 把所有腳位都用上,應該還夠用。不夠的話,換用 Arduino Mega。
    2. 去找介紹單晶片的書,查一查鍵盤掃瞄的作法,可以擴充出很多按鍵。
17#
 樓主| 發表於 2012-10-2 12:11:53 | 只看該作者
回復 16# Curtiss


   謝謝大大呢^^超強的呢!!~幫助我很大!!
你有推薦arduino 的書嗎??
我去書店都沒找到!!
18#
發表於 2012-10-4 20:24:09 | 只看該作者
回復 17# dream87694


    實體書店通常不會放這一類的書,直接到網路書店找比較快。中文書應該還不多,我知道鯨魚大大有出一本。
19#
 樓主| 發表於 2012-10-6 07:46:01 | 只看該作者
回復 18# Curtiss


   我又遇到一個問題是!!以下是LED明滅的程式:

void setup()                           

{

    pinMode(13, OUTPUT);   

}

void loop()                           

{

    digitalWrite(13, HIGH);      

    delay(500);                        

    digitalWrite(13, LOW);      

    delay(500);                        

}


我把他跟電子琴寫在一起,結果電子琴居然沒聲音= =

我不知道發生甚麼事="=??

程式互相干擾嗎??

20#
發表於 2012-10-6 11:46:34 | 只看該作者
問題在 delay(500) 。
程式碼執行到此處會停下來數時間,數完了才會執行下一行,因此就不會執行到發聲控制的程式碼。
原本電子琴的程式是仰賴 loop() { ... } 程序不斷的運行,才能快速的偵測按鍵動作與發出準確音調,delay指令破壞了此一條件。
可參考Arduino範例中的 BlinkWithoutDelay 的作法 ( File => Examples => 02.Digital )
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-6-26 21:14 , Processed in 0.777047 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表