找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 1240|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

想做一個(gè)Arduino蜂鳴器按鍵唱歌的,但是出現(xiàn)了問(wèn)題,求各位大佬解答

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1081419 發(fā)表于 2023-6-7 22:11 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
想做一個(gè)arduino連接蜂鳴器,總共四個(gè)按鍵,前面三個(gè)按鍵按下發(fā)do,re,mi,后面一個(gè)按鍵按下放一首歌,但是現(xiàn)在寫(xiě)完實(shí)現(xiàn)不了前面三個(gè)按鍵的功能了,希望得到解答
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
#define NOTE_D0 -1
#define NOTE_D1 294
#define NOTE_D2 330
#define NOTE_D3 350
#define NOTE_D4 393
#define NOTE_D5 441
#define NOTE_D6 495
#define NOTE_D7 556

#define NOTE_DL1 147
#define NOTE_DL2 165
#define NOTE_DL3 175
#define NOTE_DL4 196
#define NOTE_DL5 221
#define NOTE_DL6 248
#define NOTE_DL7 278

#define NOTE_DH1 589
#define NOTE_DH2 661
#define NOTE_DH3 700
#define NOTE_DH4 786
#define NOTE_DH5 882
#define NOTE_DH6 990
#define NOTE_DH7 112/* 以上部分是定義是把每個(gè)音符和頻率值對(duì)應(yīng)起來(lái) */
/********** 這部分是用英文對(duì)應(yīng)了拍子 **********/
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625
/* 這部分就是整首曲子的音符部分,用了一個(gè)序列定義為tune,整數(shù) */
int tune[] = {  
NOTE_D0,NOTE_D0,NOTE_D0,NOTE_D6,NOTE_D7,NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D3,NOTE_D3,
NOTE_D6,NOTE_D5,NOTE_D6,NOTE_DH1,NOTE_D5,NOTE_D5,NOTE_D5,NOTE_D3,NOTE_D4,NOTE_D3,NOTE_D4,NOTE_DH1,
NOTE_D3,NOTE_D3,NOTE_D0,NOTE_DH1,NOTE_DH1,NOTE_DH1,NOTE_D7,NOTE_D4,NOTE_D4,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D0,NOTE_D6,NOTE_D7,
NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D3,NOTE_D3,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_DH1,
NOTE_D5,NOTE_D5,NOTE_D5,NOTE_D2,NOTE_D3,NOTE_D4,NOTE_DH1,NOTE_D7,NOTE_D7,NOTE_DH1,NOTE_DH1,NOTE_DH2,NOTE_DH2,NOTE_DH3,NOTE_DH1,NOTE_DH1,NOTE_DH1,
NOTE_DH1,NOTE_D7,NOTE_D6,NOTE_D6,NOTE_D7,NOTE_D5,NOTE_D6,NOTE_D6,NOTE_D6,NOTE_DH1,NOTE_DH2,NOTE_DH3,NOTE_DH2,NOTE_DH3,NOTE_DH5,
NOTE_DH2,NOTE_DH2,NOTE_DH2,NOTE_D5,NOTE_D5,NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,
NOTE_D6,NOTE_D7,NOTE_DH1,NOTE_D7,NOTE_DH2,NOTE_DH2,NOTE_DH1,NOTE_D5,NOTE_D5,NOTE_D5,NOTE_DH4,NOTE_DH3,NOTE_DH2,NOTE_DH1,
NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH6,NOTE_DH6,NOTE_DH5,NOTE_DH5,NOTE_DH3,NOTE_DH2,NOTE_DH1,NOTE_DH1,NOTE_D0,NOTE_DH1,
NOTE_DH2,NOTE_DH1,NOTE_DH2,NOTE_DH2,NOTE_DH5,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH6,NOTE_DH6,NOTE_DH5,NOTE_DH5,
NOTE_DH3,NOTE_DH2,NOTE_DH1,NOTE_DH1,NOTE_D0,……



/* 這部分是整首曲子的接拍部分,也定義個(gè)序列duration,浮點(diǎn)(數(shù)組的個(gè)數(shù)和前面音符的個(gè)數(shù)是一樣的) */
float durt[]= {  
  1,1,1,0.5,0.5,     1+0.5,0.5,1,1,     1,1,1,0.5,0.5,
  1+0.5,0.5,1,1,     1,1,1,1,          1+0.5,0.5,1,1,
  1,1,0.5,0.5,0.5,0.5,    1+0.5,0.5,1,1,     1,1,1,0.5,0.5,
  1+0.5,0.5,1,1,    1,1,1,0.5,0.5,     1+0.5,0.5,1,1,
  1,1,1,0.5,0.5,    1,0.5,0.25,0.25,0.25,0.5,    0.5,0.5,0.5,0.25,0.5,1,
  0.5,0.5,0.5,0.5,1,1,    1,1,1,0.5,0.5,    1+0.5,0.5,1,1,
  1,1,1,0.5,0.5,    1.5,0.5,1,1,    1,1,1,1,
  0.5,0.5,1,1,0.5,0.5,    1.5,0.25,0.5,1,    1,1,1,1,
  1,1,1,1,    1,1,1,1,    0.5,0.5,1,1,0.5,0.5,
  1,0.5,0.5,1,1,    1,1,1,1,    1,1,1,1,
  0.5,0.5,1,1,0.5,0.5,    1,0.5,0.25,0.5,1,    1,1,1,0.5,0.5
};
/**********************************************************************************/
int length;     /* 這里定義一個(gè)變量,后面用來(lái)表示共有多少個(gè)音符 */
int buttonPin = 5;//按鍵
boolean ledState = false;
LiquidCrystal lcd(0, 1, 8, 6, 10, 11); /// REGISTER SELECT PIN,ENABLE PIN,D4 PIN,D5 PIN, D6 PIN, D7 PIN

void setup()

{
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  pinMode(2,INPUT);//do
  pinMode(3,INPUT);//re
  pinMode(4,INPUT);//mi
  pinMode(9,OUTPUT);
  /* 這里用了一個(gè)sizeof函數(shù), 可以查出tone序列里有多少個(gè)音符 */
  length = sizeof(tune)/sizeof(tune[0]);
  pinMode(buttonPin, INPUT_PULLUP);
lcd.clear();  
}
int p;
void loop()
{
  // set the cursor to column 0, line 1
  lcd.setCursor(0, 0);
  lcd.print("MUSIC PLAYER");//print name
  //print name
  delay(750);//delay of 0.75sec
  // set the cursor to column 0, line1
   noTone(9);
   if(digitalRead(2)==HIGH)
   {
     tone(9,523);
     lcd.setCursor(0, 1);
     lcd.print("DO");
   }
   else if(digitalRead(3)==HIGH)
   {
      tone(9,587);
      lcd.setCursor(0, 1);
      lcd.print("RE");
   }
   else if(digitalRead(4)==HIGH)
   {
      tone(9,659);
      lcd.setCursor(0, 1);
      lcd.print("MI");
   }
   delay(5);
   for (int x = 0; x < length; x++)
  {
    if (digitalRead(buttonPin) == HIGH) {//如果讀取到按鍵被按壓改變ledStart
      ledState = !ledState ;
      delay(500);//這個(gè)延遲是你按壓按鍵的大概時(shí)間
      p = x;//記錄當(dāng)前播放的音樂(lè)的位置
    }

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1078332 發(fā)表于 2023-6-8 16:44 | 只看該作者
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
#define NOTE_D0 -1
#define NOTE_D1 294
#define NOTE_D2 330
#define NOTE_D3 350
#define NOTE_D4 393
#define NOTE_D5 441
#define NOTE_D6 495
#define NOTE_D7 556

#define NOTE_DL1 147
#define NOTE_DL2 165
#define NOTE_DL3 175
#define NOTE_DL4 196
#define NOTE_DL5 221
#define NOTE_DL6 248
#define NOTE_DL7 278

#define NOTE_DH1 589
#define NOTE_DH2 661
#define NOTE_DH3 700
#define NOTE_DH4 786
#define NOTE_DH5 882
#define NOTE_DH6 990
#define NOTE_DH7 112

#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.125
#define SIXTEENTH 0.0625

int tune[] = {  
  NOTE_D0,NOTE_D0,NOTE_D0,NOTE_D6,NOTE_D7,NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D3,NOTE_D3,
  NOTE_D6,NOTE_D5,NOTE_D6,NOTE_DH1,NOTE_D5,NOTE_D5,NOTE_D5,NOTE_D3,NOTE_D4,NOTE_D3,NOTE_D4,NOTE_DH1,
  NOTE_D3,NOTE_D3,NOTE_D0,NOTE_DH1,NOTE_DH1,NOTE_DH1,NOTE_D7,NOTE_D4,NOTE_D4,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D0,NOTE_D6,NOTE_D7,
  NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_D7,NOTE_D7,NOTE_D7,NOTE_D3,NOTE_D3,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_DH1,
  NOTE_D5,NOTE_D5,NOTE_D5,NOTE_D2,NOTE_D3,NOTE_D4,NOTE_DH1,NOTE_D7,NOTE_D7,NOTE_DH1,NOTE_DH1,NOTE_DH2,NOTE_DH2,NOTE_DH3,NOTE_DH1,NOTE_DH1,NOTE_DH1,
  NOTE_DH1,NOTE_D7,NOTE_D6,NOTE_D6,NOTE_D7,NOTE_D5,NOTE_D6,NOTE_D6,NOTE_D6,NOTE_DH1,NOTE_DH2,NOTE_DH3,NOTE_DH2,NOTE_DH3,NOTE_DH5,
  NOTE_DH2,NOTE_DH2,NOTE_DH2,NOTE_D5,NOTE_D5,NOTE_DH1,NOTE_D7,NOTE_DH1,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,
  NOTE_D6,NOTE_D7,NOTE_DH1,NOTE_D7,NOTE_DH2,NOTE_DH2,NOTE_DH1,NOTE_D5,NOTE_D5,NOTE_D5,NOTE_DH4,NOTE_DH3,NOTE_DH2,NOTE_DH1,
  NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH6,NOTE_DH6,NOTE_DH5,NOTE_DH5,NOTE_DH3,NOTE_DH2,NOTE_DH1,NOTE_DH1,NOTE_D0,NOTE_DH1,
  NOTE_DH2,NOTE_DH1,NOTE_DH2,NOTE_DH2,NOTE_DH5,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH3,NOTE_DH6,NOTE_DH6,NOTE_DH5,NOTE_DH5,
  NOTE_DH3,NOTE_DH2,NOTE_DH1,NOTE_DH1,NOTE_D0
};

float dur[] = {  
  1, 1, 1, 0.5, 0.5,
  1 + 0.5, 0.5, 1, 1,
  1, 1, 1, 0.5, 0.5,
  1 + 0.5, 0.5, 1, 1,
  1, 1, 1, 1,
  1 + 0.5, 0.5, 1, 1,
  1, 1, 0.5, 0.5,
  0.5, 0.5, 1 + 0.5, 0.5,
  1, 1, 0.5, 0.5,
  1 + 0.5, 0.5, 1, 1,
  1, 1, 1, 0.5, 0.5,
  1 + 0.5, 0.5, 1, 1,
  1, 1, 1, 0.5, 0.5,
  1.5, 0.5, 1, 1,
  1, 1, 1, 1,
  0.5, 0.5, 1, 1,
  0.5, 0.5, 0.25, 0.25,
  0.25, 0.5, 0.5, 0.5, 0.25,
  0.5, 1, 0.5, 0.5,
  0.5, 0.5, 0.5, 0.5,
  1, 0.5, 0.25, 0.5, 1,
  1, 1, 1, 0.5, 0.5
};

const int buzzerPin = 9;
const int doPin = 2;
const int rePin = 3;
const int miPin = 4;
const int playPin = 5;

int length;
boolean isPlaying = false;
LiquidCrystal lcd(0, 1, 8, 6, 10, 11);

void setup() {
  lcd.begin(16, 2);
  pinMode(doPin, INPUT_PULLUP);
  pinMode(rePin, INPUT_PULLUP);
  pinMode(miPin, INPUT_PULLUP);
  pinMode(playPin, INPUT_PULLUP);
  pinMode(buzzerPin, OUTPUT);
  length = sizeof(tune) / sizeof(tune[0]);
  lcd.setCursor(0, 0);
  lcd.print("MUSIC PLAYER");
}

int currentNote = 0;

void loop() {
  if (digitalRead(doPin) == LOW) {
    tone(buzzerPin, NOTE_D1);
    lcd.setCursor(0, 1);
    lcd.print("DO          ");
  } else if (digitalRead(rePin) == LOW) {
    tone(buzzerPin, NOTE_D2);
    lcd.setCursor(0, 1);
    lcd.print("RE          ");
  } else if (digitalRead(miPin) == LOW) {
    tone(buzzerPin, NOTE_D3);
    lcd.setCursor(0, 1);
    lcd.print("MI          ");
  } else if (digitalRead(playPin) == LOW && !isPlaying) {
    lcd.setCursor(0, 1);
    lcd.print("Playing...  ");
    isPlaying = true;
    currentNote = 0;
  } else if (currentNote < length && isPlaying) {
    int note = tune[currentNote];
    float duration = dur[currentNote];
    if (note == NOTE_D0) {
      noTone(buzzerPin);
    } else {
      tone(buzzerPin, note, duration * 1000);
    }
    delay(duration * 1000 * 0.8);
    noTone(buzzerPin);
    delay(duration * 1000 * 0.2);
    currentNote++;
  } else if (currentNote >= length && isPlaying) {
    isPlaying = false;
    lcd.setCursor(0, 1);
    lcd.print("             ");
  }
}
回復(fù)

使用道具 舉報(bào)

板凳
ID:1098105 發(fā)表于 2023-11-1 16:23 | 只看該作者
不行啊,報(bào)錯(cuò)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表