Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

M5Stack. Динамик

В правой части M5Stack размещается динамик.

Для работы с динамиком используются три функции:

  • M5.Speaker.tone(uint32_t freq) - генерирует звук заданной частоты (Hz)
  • M5.Speaker.mute() - прерывает звук
  • M5.Speaker.beep() - простой бип

Существует несколько готовых констант для некоторых нот. Ниже представлены константы для музыкальных нот первой октавы (в английском формате)

  • #define NOTE_D0 -1 (тишина)
  • #define NOTE_B1 262 = Si (C)
  • #define NOTE_Cd1 277 = (C#)
  • #define NOTE_D1 294 = Re (D)
  • #define NOTE_Dd1 311 = (D#)
  • #define NOTE_E1 330 = Mi (E)
  • #define NOTE_F1 349 = FA (F)
  • #define NOTE_Fd1 370 = (F#)
  • #define NOTE_G1 392 = Sol (G)
  • #define NOTE_Gd1 415 = (G#)
  • #define NOTE_A1 440 = La (A)
  • #define NOTE_Ad1 466 = (A#)
  • #define NOTE_H1 494 = Si (B)

Speaker

В примере File | Examples | M5Stack | Basis | Speaker показано, как извлечь бип и ноту при нажатий кнопок A и B. Дополним пример и запустим мелодию из нот при нажатии кнопки C.


#include <M5Stack.h>

#define NOTE_D0 -1
#define NOTE_D1 294
#define NOTE_D2 330
#define NOTE_D3 350
#define NOTE_D4 393
#define NOTE_D5 441
#define NOTE_D6 495
#define NOTE_D7 556

#define NOTE_DL1 147
#define NOTE_DL2 165
#define NOTE_DL3 175
#define NOTE_DL4 196
#define NOTE_DL5 221
#define NOTE_DL6 248
#define NOTE_DL7 278

#define NOTE_DH1 589
#define NOTE_DH2 661
#define NOTE_DH3 700
#define NOTE_DH4 786
#define NOTE_DH5 882
#define NOTE_DH6 990
#define NOTE_DH7 112


#define NOTE_B1 262
#define NOTE_Cd1 277
#define NOTE_Dd1 311
#define NOTE_E1 330
#define NOTE_F1 349
#define NOTE_Fd1 370
#define NOTE_G1 392
#define NOTE_Gd1 415
#define NOTE_A1 440
#define NOTE_Ad1 466
#define NOTE_H1 494

int music[] =
{
  NOTE_B1, NOTE_Cd1, NOTE_D1,
  NOTE_Dd1, NOTE_E1, NOTE_F1,
  NOTE_Fd1, NOTE_G1, NOTE_Gd1,
  NOTE_A1, NOTE_Ad1, NOTE_H1
};

void setup() {
  // Initialize the M5Stack object
  M5.begin();
  
  /*
    Power chip connected to gpio21, gpio22, I2C device
    Set battery charging voltage and current
    If used battery, please call this function in your project
  */
  M5.Power.begin();

  M5.Lcd.printf("M5Stack Speaker test:\r\n");
}

void loop() {
  if(M5.BtnA.wasPressed()) {
    M5.Lcd.printf("A wasPressed \r\n");
    M5.Speaker.beep(); //beep
  }

  if(M5.BtnB.wasPressed())
  {
    M5.Lcd.printf("B wasPressed \r\n");
    M5.Speaker.tone(NOTE_DH2, 200); //frequency 3000, with a duration of 200ms
  }

  if(M5.BtnC.wasPressed())
  {
    M5.Lcd.printf("C was pressed\r\n");
    
    for (int t = 0; t < 12; t++) {
      M5.Speaker.tone(music[t]);
      delay(500);
    }
    M5.Speaker.mute();
  }

  M5.update();
}

Дополнительные материалы

Реклама