如何在 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>