Звуковая музыка Arduino ожидала '}' перед числовой константой - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь создать контроллер зуммера Arduino для воспроизведения музыки, но когда я определяю H (половину) для продолжительности нот, это дает мне ошибки

sketch_jan30g: 24:11: ошибка: ожидается '}' перед числовой константой

# определить H 2 * Q // половина 2/4

       ^

C: \ Users \ koumakpet \ AppData \ Local \ Temp\ arduino_modified_sketch_955882 \ sketch_jan30g.ino: 49: 3: примечание: в расширении макроса 'H'

H + Q, Q, Q

^

sketch_jan30g: 24:11: ошибка: ожидается ',' или ';'перед числовой константой

# определить H 2 * Q // половина 2/4

       ^

C: \ Users \ koumakpet \ AppData \ Local \ Temp \ arduino_modified_sketch_955882 \ sketch_jan30g.ino: 49: 3: примечание: в расширении макроса 'H'

H + Q, Q, Q

^

sketch_jan30g: 57: 1: ошибка: ожидаемое объявление раньше '} 'token

};

^

ожидаемый статус выхода 1'} 'перед числовой константой

Я не уверен, чтоэто ошибка, код:

//*****************************************
#define B3  247
#define C4  262   //Defining note frequency
#define D4  294
#define E4  330
#define F4  349
#define G4  392
#define LA4  440
#define B4  494
#define Bb4 466
#define C5  523
#define D5  587
#define E5  659
#define F5  698
#define G5  784
#define LA5  880
#define B5  988

// DURATION OF THE NOTES 
#define BPM 120    //  you can change this value changing all the others
#define H 2*Q //half 2/4
#define Q 60000/BPM //quarter 1/4 
#define E Q/2   //eighth 1/8
#define S Q/4 // sixteenth 1/16
#define W 4*Q // whole 4/4
//*****************************************
int notes[] = {       //Note of the song, 0 is a rest/pulse
   E4, C5, E5,
   D5, F5, G5,
   E5,
   0, Bb4, F5, G5, LA5, F5,
   E5, E5, C5, E5,
   B4, 0,

   E4, C5, E5,
   D5, F5, G5,
   E5,
   0, Bb4, F5, G5, LA5, F5,
   E5, E5, C5, E5,
   B4, 0,
   0
};
//*****************************************
int duration[] = { 
  H+Q, Q, Q
  H+Q, Q, Q
  W,
  Q, Q, Q, Q, Q, Q,
  H, H
  H, Q, Q, Q,
  W+H+Q, Q,
  3*W

};

void setup() {
  for (int i=0;i<203;i++){              //203 is the total number of music notes in the song
  int wait = duration[i];
  tone(buzzer,notes[i],wait);          //tone(pin,frequency,duration)
  delay(wait);}                        //delay is used so it doesn't go to the next loop before tone is finished playing
  //You can click reset on Arduino to replay the song
}

void loop() {

}

РЕДАКТИРОВАТЬ: Обратите внимание, что я пытался заменить позиции H и Q (потому что H зависит от Q), ошибка все еще там.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

В этом коде:

int duration[] = { 
  H+Q, Q, Q
  H+Q, Q, Q
  W,
  Q, Q, Q, Q, Q, Q,
  H, H
  H, Q, Q, Q,
  W+H+Q, Q,
  3*W
};

вам не хватает запятых в конце первых двух строк.

0 голосов
/ 31 января 2019

Прошло много времени с тех пор, как я поиграл с расширениями макросов, но попробуйте поменять местами свое определение H и определение Q. Возможно, H не раскрывается должным образом, так как он опирается на Q.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...