Блок с датойБлок с временемБлок с возрастом сайта
Mr.ALB

    Анатолий Беляев (aka Mr.ALB). Персональный сайт

    Да пребудут с вами Силы СВЕТА!

     

    Ардуино (Arduino). #11

    Используем звуки

    Бывает при изготовлении какого-нибудь устройства необходима не только световая индикация, но и звуковая. На этой странице сайта привожу небольшую программку, которая показывает как можно применять звуки.

    Для создания звуков в Ардуино используется функция tone. С помощью неё можно создавать свои мелодии, или сложные звуки.

    /**********************************************************
     * 2019-10-27 Mr.ALB Тренировка в программировании Ардуино
     * Применение звуков
     **********************************************************/
    
    #include "notes.h"    // Библиотека для звуковых нот
    
    #define speakerPin 10 // buzzer к pin 10 через 220...470 Ом и к GND
    #define buttonPin  2  // Подключаем кнопку на 2-й pin и к GND
    #define ledPin     11 // Led к pin 11(любой PWM) через 2 кОм и к GND
    
    // Переменные для хранения состояния кнопки и светодиода
    boolean lastButton = HIGH;
    boolean currentButton = HIGH;
    int blink_delay = 500;
    
    void setup() 
    {
      pinMode(speakerPin, OUTPUT);       // pin на выход звука
      pinMode(buttonPin, INPUT_PULLUP);  // Подтянут на +5В
      pinMode(ledPin, OUTPUT);           // Для светодиода
      Sd_StartOK();                      // звук "Успешное включение"
    }
    
    void loop()
    {
     currentButton = debounse(lastButton);  // Опрос кнопки
     
     if(lastButton == HIGH && currentButton == LOW) 
     {
       Sd_NextStep(); // звук "очередной шаг"
       digitalWrite(ledPin, HIGH);
       delay(blink_delay);
       Sd_ErrorBeep; 
       digitalWrite(ledPin, LOW);
      
       Sd_ReadOK(); // Сигнал звуком OK
     }
     lastButton = currentButton;  // Переписываем состояние кнопки
    }
    
    /* Функция для подавления дребезга */ 
    boolean debounse(boolean last) 
    {
      // Читаем состояние кнопки
      boolean current = digitalRead(buttonPin);
      if(last != current) 
      {
        delay(5);
        current = digitalRead(buttonPin);
      }
      return current;
    }
    
    /***************************************************************
     * *** ЗВУКИ ***
     * Взято тут https://github.com/AlexMalov/EasyKeyDublicatorRFID
     ***************************************************************/
     
    /* звук ОК */
    void Sd_ReadOK() 
    {
      for (int i = 400; i < 6000; i = i * 1.5)
        {tone(speakerPin, i); delay(20);}
      noTone(speakerPin); // Отключение звука
    }
    
    /* звук "очередной шаг" */
    void Sd_NextStep()
    {
      for (int i = 2500; i < 6000; i = i * 1.5)
        {tone(speakerPin, i); delay(10);}
      noTone(speakerPin); // Отключение звука
    }
    
    /* звук "ERROR" */
    void Sd_ErrorBeep() 
    {  
      for (int j = 0; j < 3; j++)
      {
        for (int i = 1000; i < 2000; i = i * 1.1)
          {tone(speakerPin, i); delay(10);}
        delay(50);
        for (int i = 1000; i > 500; i = i * 1.9)
          {tone(speakerPin, i); delay(10);}
        delay(50);
      }
      noTone(speakerPin); // Отключение звука
    }
    
    /* звук "Успешное включение" */
    void Sd_StartOK()
    {
      tone(speakerPin, NOTE_A7); delay(100);
      tone(speakerPin, NOTE_G7); delay(100);
      tone(speakerPin, NOTE_E7); delay(100); 
      tone(speakerPin, NOTE_C7); delay(100);
      tone(speakerPin, NOTE_D7); delay(100); 
      tone(speakerPin, NOTE_B7); delay(100); 
      tone(speakerPin, NOTE_F7); delay(100); 
      tone(speakerPin, NOTE_C7); delay(100);
      noTone(speakerPin); // Отключение звука
    }
    

    Скетч скачать тут: my_tone.zip

    Библиотека нот:    Notes.zip


    . Mr.ALB
    Предыдущая страница Страница 12