如何在 Arduino 蜂鸣器上制作保存和重放提示音的功能?
How to make function for save and replay tones on Arduino buzzer?
我对我在 Arduino 中的项目有疑问,
我有这个音符频率数组:
int note[] = {261, 293, 329, 349, 392, 440, 494, 523};
如果按下其中一个按钮,此函数用于播放音符:
void play(float U_ADC0){
if(U_ADC0 >= 4.80) { // ADC conversion (Voltage value) PB1
BUZZ (0.1 , note[0]) ; _delay_ms (100) ; // buzz
lcd_clear();
lcd_write("C4"); // lcd display
}
if(U_ADC0 < 4.80 && U_ADC0 >= 4.70){ //PB2
BUZZ (0.1 , note[1]) ; _delay_ms (100) ;
lcd_clear();
lcd_write("D4");
}
if(U_ADC0 < 4.72 && U_ADC0 >= 4.65){ //PB3
BUZZ (0.1 , note[2]) ; _delay_ms (100) ;
lcd_clear();
lcd_write("E4");
}
if(U_ADC0 < 4.60 && U_ADC0 >= 4.50){ //PB4
BUZZ (0.1 , note[3]) ; _delay_ms (100) ;
lcd_clear();
lcd_write("F4");
}
if(U_ADC0 < 4.20 && U_ADC0 >= 4.05){ //PB5
BUZZ (0.1 , note[4]) ; _delay_ms (100) ;
lcd_clear();
lcd_write("G4");
}
if(U_ADC0 < 3.80 && U_ADC0 >= 3.70){ //PB6
BUZZ (0.1 , note[5]) ; _delay_ms (100) ;
lcd_clear();
lcd_write("A4");
}
if(U_ADC0 < 3.55 && U_ADC0 >= 3.30){ //PB7
BUZZ (0.1 , note[6]) ; _delay_ms (100) ;
lcd_clear();
lcd_write("B4");
}
if(U_ADC0 < 2.55 && U_ADC0 >= 2.45){ //PB8
BUZZ (0.1 , note[7]) ; _delay_ms (100) ;
lcd_clear();
lcd_write("C5");
}
}
那么,我怎样才能通过按下按钮按顺序创建新的频率场,这样我就可以在蜂鸣器上保存和重播我的旋律?
我用了我所有的想法,但没有用,而且我没有新的想法。所以如果有人有想法,你能帮我吗?
我会使用一个按钮(我们称之为 录音按钮 )在 播放和录音 和 之间切换]玩。这样,无论何时按下按钮,获得的蜂鸣器频率都不会保存,但是当您喜欢旋律并想要保存时,可以单击记录按钮并开始保存。要做到这一点,请遵循以下算法:
在你的第一个函数之后,为记录按钮创建一个函数。在此函数中,您需要调用您已经编写的第一个函数(void play)并添加一段代码,用于将按下按钮的值分配到您将创建的 int 数组 中代码的开头(我们称之为 int recorded[])。
还剩下一个步骤,那就是检查(如果 录音按钮 被按下)切换按钮,因此它会在 录音和播放之间切换 和 play 并调用相应的函数。最后,您可以再添加一个按钮来播放 int recorded[].
中的旋律
我已经完成了代码。您可以在整个代码中查看我的注释。这可能不是工作、模拟和测试结果的最短方法,但我相信它会解决您的问题。如果对您有帮助,请告诉我。
Link: https://onlinegdb.com/PV7Mu_51q
嵌入式:
<script src="//onlinegdb.com/embed/js/PV7Mu_51q?theme=dark"></script>
我对我在 Arduino 中的项目有疑问, 我有这个音符频率数组:
int note[] = {261, 293, 329, 349, 392, 440, 494, 523};
如果按下其中一个按钮,此函数用于播放音符:
void play(float U_ADC0){
if(U_ADC0 >= 4.80) { // ADC conversion (Voltage value) PB1
BUZZ (0.1 , note[0]) ; _delay_ms (100) ; // buzz
lcd_clear();
lcd_write("C4"); // lcd display
}
if(U_ADC0 < 4.80 && U_ADC0 >= 4.70){ //PB2
BUZZ (0.1 , note[1]) ; _delay_ms (100) ;
lcd_clear();
lcd_write("D4");
}
if(U_ADC0 < 4.72 && U_ADC0 >= 4.65){ //PB3
BUZZ (0.1 , note[2]) ; _delay_ms (100) ;
lcd_clear();
lcd_write("E4");
}
if(U_ADC0 < 4.60 && U_ADC0 >= 4.50){ //PB4
BUZZ (0.1 , note[3]) ; _delay_ms (100) ;
lcd_clear();
lcd_write("F4");
}
if(U_ADC0 < 4.20 && U_ADC0 >= 4.05){ //PB5
BUZZ (0.1 , note[4]) ; _delay_ms (100) ;
lcd_clear();
lcd_write("G4");
}
if(U_ADC0 < 3.80 && U_ADC0 >= 3.70){ //PB6
BUZZ (0.1 , note[5]) ; _delay_ms (100) ;
lcd_clear();
lcd_write("A4");
}
if(U_ADC0 < 3.55 && U_ADC0 >= 3.30){ //PB7
BUZZ (0.1 , note[6]) ; _delay_ms (100) ;
lcd_clear();
lcd_write("B4");
}
if(U_ADC0 < 2.55 && U_ADC0 >= 2.45){ //PB8
BUZZ (0.1 , note[7]) ; _delay_ms (100) ;
lcd_clear();
lcd_write("C5");
}
}
那么,我怎样才能通过按下按钮按顺序创建新的频率场,这样我就可以在蜂鸣器上保存和重播我的旋律? 我用了我所有的想法,但没有用,而且我没有新的想法。所以如果有人有想法,你能帮我吗?
我会使用一个按钮(我们称之为 录音按钮 )在 播放和录音 和 之间切换]玩。这样,无论何时按下按钮,获得的蜂鸣器频率都不会保存,但是当您喜欢旋律并想要保存时,可以单击记录按钮并开始保存。要做到这一点,请遵循以下算法:
在你的第一个函数之后,为记录按钮创建一个函数。在此函数中,您需要调用您已经编写的第一个函数(void play)并添加一段代码,用于将按下按钮的值分配到您将创建的 int 数组 中代码的开头(我们称之为 int recorded[])。
还剩下一个步骤,那就是检查(如果 录音按钮 被按下)切换按钮,因此它会在 录音和播放之间切换 和 play 并调用相应的函数。最后,您可以再添加一个按钮来播放 int recorded[].
中的旋律我已经完成了代码。您可以在整个代码中查看我的注释。这可能不是工作、模拟和测试结果的最短方法,但我相信它会解决您的问题。如果对您有帮助,请告诉我。
Link: https://onlinegdb.com/PV7Mu_51q
嵌入式:
<script src="//onlinegdb.com/embed/js/PV7Mu_51q?theme=dark"></script>