在 C 中出现错误,指出在“{”标记之前不允许在此处定义函数
Getting an error in C saying that function definition is not allowed here before '{' token
我为 Arduino 板制作了一个小 C 程序,通过压电蜂鸣器播放一些音调。我调整它尝试从串行监视器获取输入,使用 for 循环遍历输入并使用 if/if else.
播放相应的音调
不幸的是,我 运行 遇到了一个我无法解决的问题,因为我对 C 还是很陌生。如果你有时间,你介意给我指出正确的方向来修复它吗?
提前致谢。
我遇到一个错误:
/Assignment_02_V2.ino: In function 'void loop()':
/Assignment_02_V2.ino:38:16: error: a function-definition is not allowed here before '{' token
int main() {
^
exit status 1
代码如下:
#define noisyPin 11 // set pin 11 to "noisyPin"
// define notes
#define NOTE_A4 440 // set frequency of A
#define NOTE_B4 494 // set frequency of B
#define NOTE_C4 262 // set frequency of C
#define NOTE_D4 294 // set frequency of D
#define NOTE_E4 330 // set frequency of E
#define NOTE_F4 349 // set frequency of F
#define NOTE_G4 392 // set frequency of G
#define NOTE_C5 523 // set frequency to high C
// set strings for serial monitor input
String msgToUsr = "Enter your note selection (A-G). A space indicates a pause of 0.5 seconds: ";
String usrMelody;
void setup() {
pinMode(13, OUTPUT); // set the onboard LED to indicate when a sound is playing
pinMode(noisyPin, OUTPUT); // directs noisyPin (pin 3) to output
Serial.begin(9600);
}
void loop() {
Serial.println(msgToUsr);
while (Serial.available()==0) {
}
usrMelody = Serial.readString();
melodyLength = strlen(usrMelody);
int main() {
int i=0;
for (i = 1; i < melodyLength; i++) {
if (i == c || i == C) {
buzzer(noisyPin, NOTE_C4, 500); // activate buzzer to play NOTE_C4 for 0.5 seconds
}
// delay(500); // set delay between HIGH to 0.5 seconds
else if (i == d || i == D) {
buzzer(noisyPin, NOTE_D4, 500); // activate buzzer to play NOTE_D4 for 0.5 seconds
}
// delay(500); // set delay between HIGH to 0.5 seconds
else if (i == e || i == E) {
buzzer(noisyPin, NOTE_E4, 500); // activate buzzer to play NOTE_E4 for 0.5 seconds
}
// delay(500); // set delay between HIGH to 0.5 seconds
else if (i == f || i == F) {
buzzer(noisyPin, NOTE_F4, 500); // activate buzzer to play NOTE_F4 for 0.5 seconds
}
// delay(500); // set delay between HIGH to 0.5 seconds
else if (i == g || i == G) {
buzzer(noisyPin, NOTE_G4, 500); // activate buzzer to play NOTE_G4 for 0.5 seconds
}
// delay(500); // set delay between HIGH to 0.5 seconds
else if (i == a || i == A) {
buzzer(noisyPin, NOTE_A4, 500); // activate buzzer to play NOTE_A4 for 0.5 seconds
}
// delay(500); // set delay between HIGH to 0.5 seconds
else if (i == b || i == B) {
buzzer(noisyPin, NOTE_B4, 500); // activate buzzer to play NOTE_B4 for 0.5 seconds
}
// delay(500); // set delay between HIGH to 0.5 seconds
else if (i == " ") {
delay(500)
}
}
return 0;
}
}
void buzzer(int targetPin, long frequency, long length) {
digitalWrite(13, HIGH); // turn the onboard LED on
long delayValue = 1000000 / frequency / 2; // calculate delay value
// 1 second (in microseconds) divided by frequency divided into 2 (two phases in every cycle)
long cycleCount = frequency * length / 1000; // calculate the total number of cycles
// frequency (cycles per second) multiply by the number of seconds divded by 1 second
for (long t = 0; t < cycleCount; t++) { // for loop to play sound based on the calculations above
digitalWrite(targetPin, HIGH); // set pin to HIGH to play sound
delayMicroseconds(delayValue); // delay sound based on calculated delay value above
digitalWrite(targetPin, LOW); // set pin to HIGH to stop sound
delayMicroseconds(delayValue); // delay sound based on calculated delay value above
}
digitalWrite(13, LOW); // turn the onboard LED off
}
C 中不能有嵌套函数。在你的代码中,main 函数写在循环函数中。
查看 Nested function in C 以获取更多相关说明。
我为 Arduino 板制作了一个小 C 程序,通过压电蜂鸣器播放一些音调。我调整它尝试从串行监视器获取输入,使用 for 循环遍历输入并使用 if/if else.
播放相应的音调不幸的是,我 运行 遇到了一个我无法解决的问题,因为我对 C 还是很陌生。如果你有时间,你介意给我指出正确的方向来修复它吗?
提前致谢。
我遇到一个错误:
/Assignment_02_V2.ino: In function 'void loop()': /Assignment_02_V2.ino:38:16: error: a function-definition is not allowed here before '{' token
int main() { ^ exit status 1
代码如下:
#define noisyPin 11 // set pin 11 to "noisyPin"
// define notes
#define NOTE_A4 440 // set frequency of A
#define NOTE_B4 494 // set frequency of B
#define NOTE_C4 262 // set frequency of C
#define NOTE_D4 294 // set frequency of D
#define NOTE_E4 330 // set frequency of E
#define NOTE_F4 349 // set frequency of F
#define NOTE_G4 392 // set frequency of G
#define NOTE_C5 523 // set frequency to high C
// set strings for serial monitor input
String msgToUsr = "Enter your note selection (A-G). A space indicates a pause of 0.5 seconds: ";
String usrMelody;
void setup() {
pinMode(13, OUTPUT); // set the onboard LED to indicate when a sound is playing
pinMode(noisyPin, OUTPUT); // directs noisyPin (pin 3) to output
Serial.begin(9600);
}
void loop() {
Serial.println(msgToUsr);
while (Serial.available()==0) {
}
usrMelody = Serial.readString();
melodyLength = strlen(usrMelody);
int main() {
int i=0;
for (i = 1; i < melodyLength; i++) {
if (i == c || i == C) {
buzzer(noisyPin, NOTE_C4, 500); // activate buzzer to play NOTE_C4 for 0.5 seconds
}
// delay(500); // set delay between HIGH to 0.5 seconds
else if (i == d || i == D) {
buzzer(noisyPin, NOTE_D4, 500); // activate buzzer to play NOTE_D4 for 0.5 seconds
}
// delay(500); // set delay between HIGH to 0.5 seconds
else if (i == e || i == E) {
buzzer(noisyPin, NOTE_E4, 500); // activate buzzer to play NOTE_E4 for 0.5 seconds
}
// delay(500); // set delay between HIGH to 0.5 seconds
else if (i == f || i == F) {
buzzer(noisyPin, NOTE_F4, 500); // activate buzzer to play NOTE_F4 for 0.5 seconds
}
// delay(500); // set delay between HIGH to 0.5 seconds
else if (i == g || i == G) {
buzzer(noisyPin, NOTE_G4, 500); // activate buzzer to play NOTE_G4 for 0.5 seconds
}
// delay(500); // set delay between HIGH to 0.5 seconds
else if (i == a || i == A) {
buzzer(noisyPin, NOTE_A4, 500); // activate buzzer to play NOTE_A4 for 0.5 seconds
}
// delay(500); // set delay between HIGH to 0.5 seconds
else if (i == b || i == B) {
buzzer(noisyPin, NOTE_B4, 500); // activate buzzer to play NOTE_B4 for 0.5 seconds
}
// delay(500); // set delay between HIGH to 0.5 seconds
else if (i == " ") {
delay(500)
}
}
return 0;
}
}
void buzzer(int targetPin, long frequency, long length) {
digitalWrite(13, HIGH); // turn the onboard LED on
long delayValue = 1000000 / frequency / 2; // calculate delay value
// 1 second (in microseconds) divided by frequency divided into 2 (two phases in every cycle)
long cycleCount = frequency * length / 1000; // calculate the total number of cycles
// frequency (cycles per second) multiply by the number of seconds divded by 1 second
for (long t = 0; t < cycleCount; t++) { // for loop to play sound based on the calculations above
digitalWrite(targetPin, HIGH); // set pin to HIGH to play sound
delayMicroseconds(delayValue); // delay sound based on calculated delay value above
digitalWrite(targetPin, LOW); // set pin to HIGH to stop sound
delayMicroseconds(delayValue); // delay sound based on calculated delay value above
}
digitalWrite(13, LOW); // turn the onboard LED off
}
C 中不能有嵌套函数。在你的代码中,main 函数写在循环函数中。
查看 Nested function in C 以获取更多相关说明。