2026.10.3 — 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 修正版
  功能:
  1. 8 LED + 11 按键 + 无源蜂鸣器
  2. KEY0~KEY7:对应 8 个 LED,在练习模式中作为音符按键
  3. KEY8:长按(>=700ms)开/关机
  4. KEY9:短按切换“放歌模式 / 节拍练习模式”
  5. KEY10:短按切换歌曲
  6. 播放模式:声音与 LED 节拍同步,LED 使用非阻塞呼吸效果
  7. 练习模式:亮灯提示目标按键,按对后进入下一音符;REST 自动跳过

  重要改动:
  - 不再使用 delay() / while() 阻塞主循环
  - KEY9、KEY10 独立扫描并正确消抖
  - 修复 REST(休止符)处理逻辑
  - 修复切歌按键消抖变量生命周期问题
  - 播放、练习、灯光、按键全部由 millis() 状态机驱动
*/

// =========================
// ESP32-S3 引脚定义
// =========================
const int ledPins[] = {4, 5, 6, 7, 15, 16, 17, 18};
const int keyPins[] = {1, 8, 9, 10, 11, 12, 13, 14, 21, 47, 2};
// KEY0~KEY9,KEY8=21总控, KEY9 = 47是切换按钮,KEY10=2是切换歌曲的按钮 
const int BUZZER = 40;

#define LED_COUNT 8
#define KEY_TOTAL 11

// =========================
// 音调定义
// =========================
#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 REST 0

//所有歌曲的旋律格式:{音调,节拍,对应LED编号}
//小星星
int melody_star[][3] = {
  {NOTE_C4,4,0}, {NOTE_C4,4,1}, {NOTE_G4,4,2}, {NOTE_G4,4,3},
  {NOTE_A4,4,4}, {NOTE_A4,4,5}, {NOTE_G4,2,6},
  {NOTE_F4,4,0}, {NOTE_F4,4,1}, {NOTE_E4,4,2}, {NOTE_E4,4,3},
  {NOTE_D4,4,4}, {NOTE_D4,4,5}, {NOTE_C4,2,6},
  {REST,2,7}
};
//欢乐颂
int melody_happy[][3] = {
  {NOTE_E4,4,0}, {NOTE_E4,4,1}, {NOTE_F4,4,2}, {NOTE_G4,4,3},
  {NOTE_G4,4,4}, {NOTE_F4,4,5}, {NOTE_E4,4,6}, {NOTE_D4,4,7},
  {NOTE_C4,4,0}, {NOTE_C4,4,1}, {NOTE_D4,4,2}, {NOTE_E4,4,3},
  {NOTE_E4,4,4}, {NOTE_D4,2,5}, {REST,2,6},
  {NOTE_E4,4,0}, {NOTE_E4,4,1}, {NOTE_F4,4,2}, {NOTE_G4,4,3},
  {NOTE_G4,4,4}, {NOTE_F4,4,5}, {NOTE_E4,4,6}, {NOTE_D4,4,7},
  {NOTE_C4,4,0}, {NOTE_C4,4,1}, {NOTE_D4,4,2}, {NOTE_E4,4,3},
  {NOTE_D4,2,4}, {NOTE_C4,2,5}, {REST,2,6}
};
//两只老虎
int melody_tiger[][3] = {
  {NOTE_C4,4,0}, {NOTE_D4,4,1}, {NOTE_E4,4,2}, {NOTE_C4,4,3},
  {NOTE_C4,4,4}, {NOTE_D4,4,5}, {NOTE_E4,4,6}, {NOTE_C4,4,7},
  {NOTE_E4,4,0}, {NOTE_F4,4,1}, {NOTE_G4,2,2}, {REST,2,3},
  {NOTE_E4,4,4}, {NOTE_F4,4,5}, {NOTE_G4,2,6}, {REST,2,7},
  {NOTE_G4,8,0}, {NOTE_A4,8,1}, {NOTE_G4,8,2}, {NOTE_F4,8,3},
  {NOTE_E4,4,4}, {NOTE_C4,4,5},
  {NOTE_G4,8,0}, {NOTE_A4,8,1}, {NOTE_G4,8,2}, {NOTE_F4,8,3},
  {NOTE_E4,4,4}, {NOTE_C4,4,5},
  {NOTE_C4,4,0}, {NOTE_G4,4,1}, {NOTE_C4,2,2}, {REST,2,3}
};
//生日快乐
int melody_birthday[][3] = {
  {NOTE_C4,4,0}, {NOTE_C4,8,1},
  {NOTE_D4,4,2}, {NOTE_C4,4,3}, {NOTE_F4,4,4},
  {NOTE_E4,2,5}, {REST,2,6},
  {NOTE_C4,4,0}, {NOTE_C4,8,1},
  {NOTE_D4,4,2}, {NOTE_C4,4,3}, {NOTE_G4,4,4},
  {NOTE_F4,2,5}, {REST,2,6},
  {NOTE_C4,4,0}, {NOTE_C4,8,1},
  {NOTE_C5,4,2}, {NOTE_A4,4,3}, {NOTE_F4,4,4},
  {NOTE_E4,4,5}, {NOTE_D4,2,6}, {REST,2,7},
  {NOTE_B4,4,0}, {NOTE_B4,8,1},
  {NOTE_A4,4,2}, {NOTE_F4,4,3}, {NOTE_G4,4,4},
  {NOTE_F4,2,5}, {REST,2,6}
};
//送别 简易
int melody_farewell[][3] = {
  {NOTE_C4,4,0}, {NOTE_E4,4,1}, {NOTE_G4,4,2}, {NOTE_C5,2,3},
  {NOTE_C5,4,4}, {NOTE_G4,4,5}, {NOTE_E4,4,6}, {NOTE_C4,2,7},
  {NOTE_C4,4,0}, {NOTE_E4,4,1}, {NOTE_G4,4,2}, {NOTE_C5,2,3},
  {NOTE_C5,4,4}, {NO

More projects by a2982887131