標(biāo)題: 想做一個Arduino蜂鳴器按鍵唱歌的,但是出現(xiàn)了問題,求各位大佬解答 [打印本頁]

作者: 回眸只為浮生    時間: 2023-6-7 22:11
標(biāo)題: 想做一個Arduino蜂鳴器按鍵唱歌的,但是出現(xiàn)了問題,求各位大佬解答
想做一個arduino連接蜂鳴器,總共四個按鍵,前面三個按鍵按下發(fā)do,re,mi,后面一個按鍵按下放一首歌,但是現(xiàn)在寫完實(shí)現(xiàn)不了前面三個按鍵的功能了,希望得到解答
#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/* 以上部分是定義是把每個音符和頻率值對應(yīng)起來 */
/********** 這部分是用英文對應(yīng)了拍子 **********/
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625
/* 這部分就是整首曲子的音符部分,用了一個序列定義為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,……



/* 這部分是整首曲子的接拍部分,也定義個序列duration,浮點(diǎn)(數(shù)組的個數(shù)和前面音符的個數(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;     /* 這里定義一個變量,后面用來表示共有多少個音符 */
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);
  /* 這里用了一個sizeof函數(shù), 可以查出tone序列里有多少個音符 */
  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);//這個延遲是你按壓按鍵的大概時間
      p = x;//記錄當(dāng)前播放的音樂的位置
    }


作者: ZzCp    時間: 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("             ");
  }
}
作者: 漂亮的    時間: 2023-11-1 16:23
不行啊,報錯




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1