为啥 Arduino Midi 库将十六进制 F7 读取为 0

Posted

技术标签:

【中文标题】为啥 Arduino Midi 库将十六进制 F7 读取为 0【英文标题】:Why Arduino Midi Library reads hexadecimal F7 as 0为什么 Arduino Midi 库将十六进制 F7 读取为 0 【发布时间】:2014-04-10 16:15:23 【问题描述】:

我已将效果处理器 midi 连接到 shield 中的 arduino midi 我正在尝试使用 arduino 的 Midi 库读取来自我的效果处理器的 sysex 消息 一切运行良好,但是当涉及到十六进制数 F7 时,我的 arduino 读取为 0。 我知道 F7 是 247 有人知道为什么会这样吗?

我用这个代码

#include <MIDI.h>

void handle_sysex(byte *a,byte sizeofsysex)

 Serial.println(sizeofsysex,DEC);
 for(int n=0;n<sizeofsysex;n++)

Serial.print(a[n]);
Serial.print("  ");

 Serial.print('\n');

void setup() 
Serial.begin(9600);
// Initiate MIDI communications, listen to all channels
MIDI.begin(MIDI_CHANNEL_OMNI);    
MIDI.setHandleSystemExclusive(handle_sysex);

void loop() 
// Call MIDI.read the fastest you can for real-time performance.
MIDI.read();

【问题讨论】:

这是唯一错误的数字吗?或者它是一个值范围?你怎么知道正在发送什么值? 是的,它是唯一的,我知道因为我还连接了 Midi Ox 以检查 arduino 是否读取正确 难道F7 是“消息结尾”字符,它只是被转换为“字符串结尾”吗?见en.wikipedia.org/wiki/… @Floris 在 MIDI 中,0 是有效的数据字节;转换 F7 将是一个可怕的错误。 【参考方案1】:

这是在 github 上讨论的,看起来这是由 #67 或 #66 修复的错误。处理函数的 args 也发生了变化,第二个 arg 现在是 unsigned size 以允许大小超过 255。

【讨论】:

以上是关于为啥 Arduino Midi 库将十六进制 F7 读取为 0的主要内容,如果未能解决你的问题,请参考以下文章

合并 Arduino 草图 (MIDI)

Arduino播放midi文件

从 Arduino Yun 上的 USB 接口获取 MIDI 音符

用于 Arduino 的 Korg Nanokey MIDI 控制器?

Arduino MIDI 控制器库

用于虚拟 DJ 的 Arduino Usb MIDI 控制器