美文网首页
【树莓派+arduino实验记录6】无源与有源蜂鸣器

【树莓派+arduino实验记录6】无源与有源蜂鸣器

作者: Geekero | 来源:发表于2020-07-14 13:43 被阅读0次

    Arduino

    有源蜂鸣器

    /********************************************************
     * function: you can hear the activate buzzer beeping.
     * But it won't work if you can use a passive one here
    **************************************************** */
    
    int buzzerPin = 7;//the pin of the activate buzzer attach to pin7
    
    void setup()
    {
        pinMode(buzzerPin, OUTPUT);
        digitalWrite(buzzerPin, LOW);
    }
    
    void loop()
    
    {
    
    }
    

    无源蜂鸣器

    //function:buzzer beeping in a different frequence
    /*****************************************************/
    const int buzzerPin = 7;
    int fre; //frequenze value
    /****************************************************/
    void setup()
    {
        pinMode(buzzerPin, OUTPUT);//set the buzzerPin as OUTPUT
      
    }
    /*****************************************************/
    void loop()
    {
      for (int i=200; i<=800; i++) //frequence loop from 200 to 800
      {
        tone(7,i); //in pin7 generate a tone, its frequency is i
        delay(5); //wait for 5 milliseconds
      }
      
      delay(4000); //wait for 4 seconds on highest frequence
    
      for(int i=800; i>=200; i--) //frequence loop from 800 to 200
      {
        tone(7,i);
        delay(10); //delay 10ms
      }
    }
    

    树莓派

    有源蜂鸣器

    C

    #include <wiringPi.h>
    #include <stdio.h>
    
    #define BuzzerPin  0
    
    int main(void)
    {
        if (wiringPiSetup() == -1){
            printf("setup wiringPi failed !");
            return 1;
        }
        pinMode(BuzzerPin, OUTPUT);
    
        while(1){
            digitalWrite(BuzzerPin, HIGH);
            delay(100);
            digitalWrite(BuzzerPin, LOW);
            delay(100);
        }
    
        return 0;
    }
    

    Python

    #!/usr/bin/env python
    import RPi.GPIO as GPIO
    import time
    
    Buzzer = 11 #pin11
    
    def setup(pin):
        global BuzzerPin
        BuzzerPin = pin
        GPIO.setmode(GPIO.BOARD)  #Numbers GPIOs by physical location
        GPIO.setup(BuzzerPin, GPIO.OUT)
        GPIO.output(BuzzerPin, GPIO.HIGH)
    
    def on():
        GPIO.output(BuzzerPin, GPIO.LOW)
    
    def off():
        GPIO.output(BuzzerPin, GPIO.HIGH)
    
    def beep(x):
        on()
        time.sleep(x)
        off()
        time.sleep(x)
    
    def loop():
        while True:
            beep(0.5)
    
    def destroy():
        GPIO.output(BuzzerPin, GPIO.HIGH)
        GPIO.cleanup()
    
    
    if __name__ == '__main__':
        setup(Buzzer)
        try:
            loop()
        except KeyboardInterrupt:
            destroy()
    

    无源蜂鸣器

    C

    #include <wiringPi.h>
    #include <softTone.h>
    #include <stdio.h>
    
    #define BuzPin  0
    
    #define CL1 131
    #define CL2 147
    #define CL3 165
    #define CL4 175
    #define CL5 196
    #define CL6 221
    #define CL7 248
    
    #define CM1 262
    #define CM2 294
    #define CM3 330
    #define CM4 350
    #define CM5 393
    #define CM6 441
    #define CM7 495
    
    #define CH1 525
    #define CH2 589
    #define CH3 661
    #define CH4 700
    #define CH5 786
    #define CH6 882
    #define CH7 990
    
    int song_1[] = {CM3,CM5,CM6,CM3,CM2,CM3,CM5,CM6,CH1,CM6,CM5,CM1,CM3,CM2,
                    CM2,CM3,CM5,CM2,CM3,CM3,CL6,CL6,CL6,CM1,CM2,CM3,CM2,CL7,
                    CL6,CM1,CL5};
    
    int beat_1[] = {1,1,3,1,1,3,1,1,1,1,1,1,1,1,3,1,1,3,1,1,1,1,1,1,1,2,1,1,
                    1,1,1,1,1,1,3};
    
    int song_2[] = {CM1,CM1,CM1,CL5,CM3,CM3,CM3,CM1,CM1,CM3,CM5,CM5,CM4,CM3,CM2,
                    CM2,CM3,CM4,CM4,CM3,CM2,CM3,CM1,CM1,CM3,CM2,CL5,CL7,CM2,CM1};
    
    int beat_2[] = {1,1,1,3,1,1,1,3,1,1,1,1,1,1,3,1,1,1,2,1,1,1,3,1,1,1,3,3,2,3};
    
    int main(void)
    {
        int i, j;
        if (wiringPiSetup() == -1){
            printf("setup wiringPi failed !");
            return 1;
        }
    
        if (softToneCreate(BuzPin) == -1){
            printf("setup softTone failed !");
            return 1;
        }
    
        while(1){
            printf("music is being played...\n");
            
            printf("song_1...\n");
            for (i=0;i<sizeof(song_1)/4;i++){
                softToneWrite(BuzPin, song_1[i]);
                delay(beat_1[i] * 500);
            }
            
            printf("song_2...\n");
            for (i=0;i<sizeof(song_2)/4;i++){
                softToneWrite(BuzPin, song_2[i]);
                delay(beat_2[i] * 500);
            }
        }
        return 0;
    }
    

    Python

    #!/usr/bin/env python
    #-------------------------------------------------
    #
    #  This is a program for Passive Buzzer Module
    #       It will play simple songs.
    #  You could try to make songs by yourselves!
    #
    #     Passive buzzer              Pi
    #          VCC ------------------ 3.3V
    #          GND ------------------ GND
    #          SIG ------------------ Pin 11
    #
    #------------------------------------------------
    
    import RPi.GPIO as GPIO
    import time
    
    Buzzer = 11
    
    CL = [0, 131, 147, 165, 175, 196, 211, 248]    # Frequency of Low C notes
    
    CM = [0, 262, 294, 330, 350, 393, 441, 495]    # Frequency of Middle C notes
    
    CH = [0, 525, 589, 661, 700, 786, 882, 990]    # Frequency of High C notes
    
    song_1 = [ CM[3], CM[5], CM[6], CM[3], CM[2], CM[3], CM[5], CM[6], # Notes for song1
               CH[1], CM[6], CM[5], CM[1], CM[3], CM[2], CM[2], CM[3],
               CM[5], CM[2], CM[3], CM[3], CL[6], CL[6], CL[6], CM[1],
               CM[2], CM[3], CM[2], CL[7], CL[6], CM[1], CL[5]      ]
    
    beat_1 = [  1, 1, 3, 1, 1, 3, 1, 1,  #Beats of song 1, 1 means 1/8 beats
                1, 1, 1, 1, 1, 1, 3, 1,
                1, 3, 1, 1, 1, 1, 1, 1,
                1, 2, 1, 1, 1, 1, 1, 1,
                1, 1, 3  ]
    
    song_2 = [ CM[1], CM[1], CM[1], CL[5], CM[3], CM[3], CM[3], CM[1], # Notes for song2
               CM[1], CM[3], CM[5], CM[5], CM[4], CM[3], CM[2], CM[2],
               CM[3], CM[4], CM[4], CM[3], CM[2], CM[3], CM[1], CM[1],
               CM[3], CM[2], CL[5], CL[7], CM[2], CM[1]  ]
    
    beat_2 = [ 1, 1, 2, 2, 1, 1, 2, 2, #Beats of song 2, 1 means 1/8 beats
              1, 1, 2, 2, 1, 1, 3, 1,
              1, 2, 2, 1, 1, 2, 2, 1,
              1, 2, 2, 1, 1, 3  ]
    
    def setup():
        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(Buzzer, GPIO.OUT)
        global Buzz
        Buzz = GPIO.PWM(Buzzer, 440)   # 440 is initial frequency
        Buzz.start(50)    #Start Buzzer pin with 50% duty ration
    
    def loop():
        while True:
            print('\n Playing song_1...')
            for i in range(1, len(song_1)):
                Buzz.ChangeFrequency(song_1[i]) #Change the frequency along the song note
                time.sleep(beat_1[i] * 0.5)   # delay a note for beat * 0.5
            time.sleep(1)
    
            print('\n\n Playing song_2...')
            for i in range(1, len(song_2)):
                Buzz.ChangeFrequency(song_2[i])
                time.sleep(beat_2[i] * 0.5)
    
    def destroy():
        Buzz.stop() # Stop the buzzer
        GPIO.output(Buzzer, 1) # Set Buzzer pin to High
        GPIO.cleanup()
    
    
    if __name__ == '__main__':
        setup()
        try:
            loop()
        except KeyboardInterrupt:
            destroy()
    

    相关文章

      网友评论

          本文标题:【树莓派+arduino实验记录6】无源与有源蜂鸣器

          本文链接:https://www.haomeiwen.com/subject/wkgxhktx.html