004 — ESP32-S3 simulation

An interactive ESP32-S3 circuit simulation you can run free in your browser on Velxio, by a2982887131.

Components

Sketch code

/*
 * ESP32-S3 声光同步节奏联动设备
 * 9按键 + 9LED + 无源蜂鸣器
 * 
 * 功能:
 *   按键9 = 开始 → 灯光亮起
 *   按键1-8 = 选择曲目 → 进入节奏跟随模式
 *   节奏模式:灯光逐个推进,命中后发声并切换
 *   全部命中后自动播放整曲,灯光随音乐亮灭
 */

// ==================== 引脚定义 ====================
#define NUM_LEDS    9
#define NUM_BUTTONS 9
#define BUZZER_PIN  21

const int LED_PINS[NUM_LEDS]       = {1, 2, 3, 4, 5, 6, 7, 8, 9};
const int BUTTON_PINS[NUM_BUTTONS] = {10, 11, 12, 13, 14, 15, 16, 17, 18};

// ==================== 音符频率定义 ====================
#define NOTE_C4  262
#define NOTE_D4  294
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_G4  392
#define NOTE_A4  440
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_D5  587
#define NOTE_E5  659
#define NOTE_G5  784
#define NOTE_A5  880

// ==================== 节拍单位(毫秒) ====================
#define BEAT_QUARTER  600   // 四分音符 ≈ 600ms
#define BEAT_EIGHTH   300   // 八分音符
#define BEAT_HALF     1200  // 二分音符

// ==================== 曲目数据结构 ====================
struct Note {
  int frequency;   // 频率(Hz),0表示休止符
  int duration;    // 持续时长(ms)
};

// ---------- 8首曲目 ----------
// 每首曲子包含音符序列,最后一个音符的frequency=0作为终止标记

// 曲目1:小星星
Note song1[] = {
  {NOTE_C4, BEAT_QUARTER}, {NOTE_C4, BEAT_QUARTER}, {NOTE_G4, BEAT_QUARTER}, {NOTE_G4, BEAT_QUARTER},
  {NOTE_A4, BEAT_QUARTER}, {NOTE_A4, BEAT_QUARTER}, {NOTE_G4, BEAT_HALF},
  {NOTE_F4, BEAT_QUARTER}, {NOTE_F4, BEAT_QUARTER}, {NOTE_E4, BEAT_QUARTER}, {NOTE_E4, BEAT_QUARTER},
  {NOTE_D4, BEAT_QUARTER}, {NOTE_D4, BEAT_QUARTER}, {NOTE_C4, BEAT_HALF},
  {0, 0}
};

// 曲目2:欢乐颂
Note song2[] = {
  {NOTE_E4, BEAT_QUARTER}, {NOTE_E4, BEAT_QUARTER}, {NOTE_F4, BEAT_QUARTER}, {NOTE_G4, BEAT_QUARTER},
  {NOTE_G4, BEAT_QUARTER}, {NOTE_F4, BEAT_QUARTER}, {NOTE_E4, BEAT_QUARTER}, {NOTE_D4, BEAT_QUARTER},
  {NOTE_C4, BEAT_QUARTER}, {NOTE_C4, BEAT_QUARTER}, {NOTE_D4, BEAT_QUARTER}, {NOTE_E4, BEAT_QUARTER},
  {NOTE_E4, BEAT_QUARTER + BEAT_EIGHTH}, {NOTE_D4, BEAT_EIGHTH}, {NOTE_D4, BEAT_HALF},
  {0, 0}
};

// 曲目3:两只老虎
Note song3[] = {
  {NOTE_C4, BEAT_QUARTER}, {NOTE_D4, BEAT_QUARTER}, {NOTE_E4, BEAT_QUARTER}, {NOTE_C4, BEAT_QUARTER},
  {NOTE_C4, BEAT_QUARTER}, {NOTE_D4, BEAT_QUARTER}, {NOTE_E4, BEAT_QUARTER}, {NOTE_C4, BEAT_QUARTER},
  {NOTE_E4, BEAT_QUARTER}, {NOTE_F4, BEAT_QUARTER}, {NOTE_G4, BEAT_HALF},
  {NOTE_E4, BEAT_QUARTER}, {NOTE_F4, BEAT_QUARTER}, {NOTE_G4, BEAT_HALF},
  {0, 0}
};

// 曲目4:生日快乐
Note song4[] = {
  {NOTE_G4, BEAT_EIGHTH}, {NOTE_G4, BEAT_EIGHTH}, {NOTE_A4, BEAT_QUARTER}, {NOTE_G4, BEAT_QUARTER},
  {NOTE_C5, BEAT_QUARTER}, {NOTE_B4, BEAT_HALF},
  {NOTE_G4, BEAT_EIGHTH}, {NOTE_G4, BEAT_EIGHTH}, {NOTE_A4, BEAT_QUARTER}, {NOTE_G4, BEAT_QUARTER},
  {NOTE_D5, BEAT_QUARTER}, {NOTE_C5, BEAT_HALF},
  {0, 0}
};

// 曲目5:玛丽有只小羊羔
Note song5[] = {
  {NOTE_E4, BEAT_QUARTER}, {NOTE_D4, BEAT_QUARTER}, {NOTE_C4, BEAT_QUARTER}, {NOTE_D4, BEAT_QUARTER},
  {NOTE_E4, BEAT_QUARTER}, {NOTE_E4, BEAT_QUARTER}, {NOTE_E4, BEAT_HALF},
  {NOTE_D4, BEAT_QUARTER}, {NOTE_D4, BEAT_QUARTER}, {NOTE_D4, BEAT_HALF},
  {NOTE_E4, BEAT_QUARTER}, {NOTE_G4, BEAT_QUARTER

More projects by a2982887131