USB-MIDI foot controller / USB-MIDIフットコントローラー作った


DIY MIDI Foot Switch with Arduino and Game Pad, BIAS FX

PlayStation用のゲームコントローラーとArduino Leonardo互換機を使って、USB接続のMIDIフットコントローラー作った。動画を公開したのはだいぶ前だけど、コードを公開してほしいということであらためて。

CODE

  1. /*
  2. USB-MIDI controller for Arduino Leonardo
  3. Library
  4. https://github.com/arduino-libraries/MIDIUSB
  5. */
  6. #define CH 1
  7. #define LED_PIN 13
  8. #define MAX_LED_PIN_TIME 200
  9. #define PEDAL_MARGIN 64
  10. /* MIDIUSB */
  11. #include "MIDIUSB.h"
  12. void noteOn(byte channel, byte pitch, byte velocity) {
  13. midiEventPacket_t noteOn = {0x09, 0x90 | channel, pitch, velocity};
  14. MidiUSB.sendMIDI(noteOn);
  15. }
  16. void noteOff(byte channel, byte pitch, byte velocity) {
  17. midiEventPacket_t noteOff = {0x08, 0x80 | channel, pitch, velocity};
  18. MidiUSB.sendMIDI(noteOff);
  19. }
  20. void controlChange(byte channel, byte control, byte value) {
  21. midiEventPacket_t event = {0x0B, 0xB0 | channel, control, value};
  22. MidiUSB.sendMIDI(event);
  23. }
  24. int switchPins[] = {2, 3, 4, 5, 6, 7};
  25. int btNote[] = {60, 64, 69, 74, 79, 84}; //NOTE NUMBER
  26. int btCC[] = {21, 22, 23, 24, 25, 26}; //CC NUMBER //
  27. int switchPreVal[] = { -1, -1, -1, -1, -1, -1};
  28. int switchStatus[] = {1, 1, 1, 1, 1, 1};
  29. int pedalPin = 0;
  30. int pedalCC = 4;
  31. int pedalPreVal = -1;
  32. int ledPinTime = 0;
  33. void setup() {
  34. Serial.begin(115200); //MIDIUSB
  35. pinMode(LED_PIN, OUTPUT);
  36. for (int i = 0; i < 4; i++) {
  37. pinMode(switchPins[i], INPUT);
  38. digitalWrite(switchPins[i], HIGH);
  39. }
  40. delay(100);
  41. }
  42. void loop() {
  43. for (int i = 0; i < 4; i++) {
  44. int val = digitalRead(switchPins[i]);
  45. if (val != switchPreVal[i]) {
  46. switchPreVal[i] = val;
  47. digitalWrite(LED_PIN, HIGH);
  48. ledPinTime = MAX_LED_PIN_TIME;
  49. switchStatus[i] = !switchStatus[i];
  50. if (switchStatus[i] == true) {
  51. noteOn(0, btNote[i], 127); // channel, pitch, velocity
  52. controlChange(0, btCC[i], 127); //channel, CC#, value
  53. MidiUSB.flush();
  54. } else {
  55. noteOff(0, btNote[i], 127); // channel, pitch, velocity
  56. MidiUSB.flush();
  57. }
  58. }
  59. }
  60. digitalWrite(LED_PIN, ledPinTime > 0 ? HIGH : LOW);
  61. if (ledPinTime > 0) ledPinTime--;
  62. }

Library

arduino-libraries/MIDIUSB: A MIDI library over USB, based on PluggableUSB

参考にしたもの

Arduinoで作るフットスイッチ・ペダルMIDIインターフェイス – Qiita

Arduinoを使ってWeb MIDI APIから制御可能なUSB MIDIデバイスを自作する(MIDIUSB編) – Qiita

ありがとうございました。

HiLetgo プロ ミニAtmega328 マイコンボード 5V/16MHz 328 Arduinoに対応HiLetgo プロ ミニAtmega328 マイコンボード 5V/16MHz 328 Arduinoに対応




キッズステーション専用コントローラ
キッズステーション専用コントローラ

ぼくらとあそぼう! ウルトラマンTVキッズステーションコントローラセットぼくらとあそぼう! ウルトラマンTVキッズステーションコントローラセット

キッズステーションドラえもん ひみつのよじげんポケットキッズステーションコントローラセットキッズステーションドラえもん ひみつのよじげんポケットキッズステーションコントローラセット

コメント

タイトルとURLをコピーしました