กลับไปหน้ารวมไฟล์
arduino-midi-controller-rotary-oled.md

Arduino MIDI Controller with Encoder + OLED Display + EEPROM

งานวิศวกรรมสตูดิโอ: Arduino MIDI Controller ระดับโปร

การหมุน Potentiometer เพื่อเปลี่ยน LED เป็นเรื่องง่ายดาย แต่การเชื่อมต่อ Rotary Encoder แบบหมุนไม่จำกัดรอบผ่าน USB เพื่อควบคุม VST Synthesizer ขนาดใหญ่ภายใน Ableton Live หรือ FL Studio โดยตรงนั้น ต้องอาศัยความเชี่ยวชาญในโปรโตคอล Musical Instrument Digital Interface (MIDI) อันเก่าแก่ตั้งแต่ปี 1983 Arduino MIDI Controller นี้เป็นเครื่องมือระดับมืออาชีพสำหรับสตูดิโอ ที่มาพร้อมเมนู I2C OLED ที่ซับซ้อนเพื่อแมปคำสั่ง Control Change (CC) นับพันรายการ

1306_oled_retro_game_display_1772681532057.png

ไลบรารี Rotary Encoder แบบไม่จำกัดรอบ

ปุ่มปรับระดับเสียงทั่วไปจะหยุดหมุนที่ 100% แต่ Rotary Encoder สามารถหมุนได้ไม่จำกัดรอบ ทำให้เป็นเครื่องมือที่สมบูรณ์แบบสำหรับ DAWs แบบดิจิทัล

  1. Encoder จะส่งสัญญาณ Pulse wave ขนาดใหญ่สองชุด A และ B (Quadrature logic)
  2. หาก Pin A เป็น HIGH ก่อน Pin B ผู้ใช้กำลังหมุนปุ่มไปทาง ขวา หาก Pin B เป็น HIGH ก่อน พวกเขากำลังหมุนไปทาง ซ้าย
  3. Hardware Interrupt: เพื่อไม่ให้พลาดทุกการเปลี่ยนแปลงแม้เพียงเล็กน้อย Encoder จึงถูกต่อสายเข้ากับ Pins 2 และ 3 โดยเฉพาะ attachInterrupt(0, readEncoder, CHANGE);
  4. โค้ด C++ จะอัปเดตตัวแปร counter อย่างรวดเร็ว เมื่อค่าเพิ่มขึ้นจาก 0 เป็น +10, Arduino ต้องแปลงค่าเหล่านั้นให้เป็น MIDI CC Payload ขนาดใหญ่!

MIDI Hex Stack ที่ความเร็ว 31250 Baud

คุณไม่ได้ส่ง String เช่น "Turn up the bass" ไปยัง Ableton คุณต้องส่ง Raw Hexadecimal Byte-array แทน

  • MIDI มาตรฐานทำงานที่ Serial.begin(31250); (อัตรา Baud rate ที่แปลกประหลาดและไม่ยืดหยุ่นอย่างมากตั้งแต่ยุค 1980)
  • คำสั่งการทำงาน: ในการหมุนปุ่ม Uno จะส่งข้อมูล 3 Byte พอดี:
    1. 0xB0 (คำสั่ง Control Change บน Channel 1)
    2. 0x07 (เป้าหมายเฉพาะ เช่น Master Volume)
    3. 0x40 (ค่าที่แน่นอน, 0 ถึง 127)
  • Uno ใช้คำสั่ง Serial.write(byte); ที่เร็วอย่างเหลือเชื่อ เพื่อส่ง Hexadecimal array เหล่านี้โดยตรงเข้าสู่ PC!

การแมป Patch ด้วย OLED และการเรียกคืน EEPROM

ผู้ใช้ต้องการบันทึกการกำหนดค่าปุ่มที่กำหนดเอง

  • I2C SSD1306 OLED จะแสดงเมนูปัจจุบัน: "Rotary 1 = Filter Cutoff."
  • Arduino อาศัยไลบรารี <EEPROM.h> เป็นอย่างมาก เมื่อผู้ใช้กำหนด MIDI CC ใหม่ให้กับ Rotary 1, Uno จะบันทึก 0x07 ลงใน Flash ROM โดยตรงด้วย EEPROM.write(1, 0x07);
  • แม้ว่า DJ จะถอดปลั๊กบอร์ดระหว่างการแสดง เมื่อเสียบกลับเข้าไปใหม่ ก็จะสามารถเรียกคืนการแมป Ableton Live ที่แน่นอนจากหน่วยความจำ Hardware Silicon ได้ทันที!

ชุดอุปกรณ์สำหรับสตูดิโอ

  • Arduino Pro Micro หรือ Leonardo (ชิป ATmega32u4 จำเป็นอย่างยิ่งในการทำหน้าที่เป็น Native USB-MIDI Human Interface Device โดย Uno ไม่สามารถถูก Ableton มองเห็นว่าเป็น MIDI controller ได้ทันทีเมื่อนำออกจากกล่อง)
  • Rotary Encoders (KY-040) พร้อมสวิตช์กดในตัว
  • 0.96" I2C OLED Display
  • Linear 10K Potentiometers (Slide Faders) สำหรับเลย์เอาต์มิกเซอร์บอร์ด

ข้อมูล Frontmatter ดั้งเดิม

title: "Arduino MIDI Controller with Encoder + OLED Display + EEPROM"
description: "Professional DAWs integrated! Hijack the native 31250 baud MIDI protocol to construct an absolute studio-grade mixing interface featuring infinite rotary encoders and deeply nested OLED patch banks."
category: "Audio & Sound"
difficulty: "Advanced"