按下面协议通过窗口发码到我们盒子就可以控制DMX512灯了。
RS232DMX 盒子协议命令表 | |||||
序号 | 命令 | RS232发字节数 | 说明 | RS232返回值 | 例子 |
1 | 0xC0 xx | 2 | 全部512通道赋值为 xx(0~255) | 返回 0xC0 为正确
返回 0xC0 0xE0 错误 |
全部通道为255(开灯):0xC0 0xFF 全部通道为0(关灯):0xC0 0x00 |
2 | 0xC1 xx | 2 | 假设接的灯为RGB 3通道灯,全部R通道赋值,就是第1、4、7、10 … 通道赋值为 xx(0~255) 这个命令并不会改变其他非R通道的值 | 返回 0xC1 为正确
返回 0xC1 0xE0 错误 |
追加全部红灯亮度,开一半亮:0xC1 128 追加全部R通道全亮:0xC1 0xFF |
3 | 0xB1 xx | 2 | 功能同上,只是会把全部512通道先清零,只留下1、4、7、10… R通道的值,会把其他通道的值清零 | 返回 0xB1 为正确
返回 0xB1 0xE0 错误 |
关闭所有灯,同上只红灯开一半亮,只留红灯:0xB1 0x80 全部R通道全亮,其他关闭:0xB1 0xFF |
4 | 0xC2 xx | 2 | 假设接的灯为RGB 3通道灯,全部G通道赋值,就是第2、5、8、11 … 通道赋值为 xx(0~255) 这个命令并不会改变其他非G通道的值 | 返回 0xC2 为正确
返回 0xC2 0xE0 错误 |
追加全部绿灯亮度,开一半亮:0xC2 128 追加全部绿通道全亮:0xC2 0xFF |
5 | 0xB2 xx | 2 | 功能同上,只是会把全部512通道先清零,只留下2、5、8、11… G通道的值,会把其他通道的值清零 | 返回 0xB2 为正确
返回 0xB2 0xE0 错误 |
关闭所有灯,同上只绿灯开一半亮,只留绿灯:0xB2 0x80 全部G通道全亮,其他关闭:0xB2 0xFF |
6 | 0xC3 xx | 2 | 假设接的灯为RGB 3通道灯,全部B通道赋值,就是第3、6、9、12 … 通道赋值为 xx(0~255) 这个命令并不会改变其他非R通道的值 | 返回 0xC3 为正确
返回 0xC3 0xE0 错误 |
追加全部蓝灯亮度,开一半亮:0xC3 128 追加全部B通道全亮:0xC3 0xFF |
7 | 0xB3 xx | 2 | 功能同上,只是会把全部512通道先清零,只留下3、6、9、12… B通道的值,会把其他通道的值清零 | 返回 0xB3 为正确
返回 0xB3 0xE0 错误 |
关闭所有灯,同上只蓝灯开一半亮,只留蓝灯:0xB3 0x80 全部B通道全亮:0xB3 0xFF |
8 | 0xC4 cc xx | 3 | 发送通道值(通道小于255),cc为那个通道,xx为通道对应的值,类似我们SDK函数 DMXSend(通道,通道的值) | 返回 0xC4 为正确
返回 0xC4 C 通道错误 返回 0xC4 D 通道值错误 |
假设你接了一台电脑灯,第8通道是水平移动,想让灯转半圈,发命令:0xC4 07 128 灯就会转半圈,如果需要转到底,就把128改成255,注意:我们通道的记数是从0开始,不是从1开始,因此通道8,就是数字7 (这个例子相当于控制台推子8 推到128 或者推到底) |
9 | 0xC5 cc1 cc2 xx | 4 | 发送通道值(通道可以大于255),通道值为cc1+cc2,xx为通道对应的值 | 返回 0xC5 为正确
返回 0xC5 C 通道错误 返回 0xC5 D 通道值错误 |
假设你接了一台电脑灯,地址码300是水平移动,想让灯转到底,发命令:0xC5 255 44 255 灯就会转底 (地址码为300,从0开始记数,299=255+44,cc1和cc2可以随便组合成299都可以) (这个例子相当于控制台推子300推到底) |
10 | 0xC6 R G B | 4 | 假设接的灯为RGB 3通道灯,全部RGB通道赋值 R、G、B为颜色0~255的值 | 返回 0xC6 为正确 返回 0xC6 R R值错误
返回 0xC6 G G值错误 返回 0xC6 B B值错误 |
假设你接了170个RGB三通道的灯,那么可以通过发不同的RGB值,可以组合成256*256*256种颜色的变化 |
11 | 0xC7 cc ll xx | 4 | 这个命令类似MA控制台的THUR命令或者TO命令,意思是从起始cc通道开始,发ll长度个通道,值为xx | 返回 0xC7 为正确
返回 0xC7 B 起始通道错误 返回 0xC7 L 长度错误 返回 0xC7 D 通道值错误 |
比如想让地址码为10到30的通道共20个通道全部为255,可以发这样的命令:0xC7 09 20 255 ,注意,通道记数是从0开始记数的 |
12 | 0xC8 cc gg ll xx | 5 | 这个命令非常有意思,十分适合做灯光show,意思是从起始cc通道开始,每隔gg通道,发ll台数量的灯,值为xx | 返回 0xC8 为正确
返回 0xC8 B 起始通道错误 返回 0xC8 G 间隔错误 返回 0xC8 P 数量错误 返回 0xC8 D 通道值错误 |
假设你的沙盘接了6台电脑灯,电脑灯通道数是12,电脑灯第1通道是水平移动,那么地址码1是第一台灯的X移动,地址码13是第2台的X,地址码25是第3台的X… 如果需要这6台灯同时一致水平移动到最大,可以这样发码:0xC8 00 12 6 255 |
13 | 0xC9 buf0 buf1 buf2… | 随便字节 | 批量发送全部512通道值,可以是一个通道,也可以是全部512通道值,buf0对应第一通道,buf1对应第2通道,buf2对应第3通道… | 返回 0xC9 0xE0 表示整包发送完 | 假设buf[512]保存的是全部512通道的值,可以通过 0xC9 buf[0] buf[1] buf[2] buf[3]… 这样发每个通道的数据,可以发全部通道,也可以只发前面几个通道 |
14 | 0xA1 | 1 | 内置效果,只针对RGB三通道灯,RGB渐变效果 | 返回 0xA1 为正确 | 假设你接了170个RGB三通道的灯,那么这些灯会RGB渐变,注意,运行内置效果后,不再接收其他命令,需要发0x44停止内置效果才能接收其他命令,内置效果时,盒子的红灯会闪,绿灯灭 |
15 | 0xA2 | 1 | 内置效果,只针对RGB三通道灯, 七彩循环变化 | 返回 0xA2 为正确 | 假设你接了170个RGB三通道的灯,那么这些灯会RGB七彩变化,注意,运行内置效果后,不再接收其他命令,需要发0x44停止内置效果才能接收其他命令,内置效果时,盒子的红灯会闪,绿灯灭 |
16 | 0xA3 | 1 | 内置效果,只针对RGB三通道灯, 七色闪变 | 返回 0xA3 为正确 | 假设你接了170个RGB三通道的灯,那么这些灯会RGB七色闪变,注意,运行内置效果后,不再接收其他命令,需要发0x44停止内置效果才能接收其他命令,内置效果时,盒子的红灯会闪,绿灯灭 |
17 | 0xA4 R G B FN | 2~5 | 内置效果,只针对RGB三通道灯, 彗星追逐,RGB为颜色值,FN为0时是正追,大于0时为反追 | 返回 0xA4 为正确 | 每24个通道为1段彗星,整个512通道可以分为21段彗星进行追逐,彗星的颜色是通过RGB值来改变的,正反追是通过FN的值来决定的,效果十分cool,假设需要红灯正追时,可以不发完整5字节命令,只需要发2个字节就可以:0xA4 255, 关闭效果发0x44 |
18 | 0x44 | 1 | 停止内置效果 | 无返回 | 在运行内置效果时,所有内置效果必须发 0x44 进行停止,否则不接收其他任何命令 |
注:此盒子只能用9600波特率,8位数据位,1位停止位,无奇偶校验(9600 8N1)。 因为波特率不快,因此2字节命令建议不要小于50ms重复发命令,多字节命令建议不要小于100ms重复发数据,否则上个命令还没有接收完,下个命令又来了,会覆盖上个命令;不管是几字节命令,同一条命令字节之间必须连续发送,不能间隔发送,如果要间隔,不要大于5ms,否则间隔太大,会做超时处理;除B1、B2、B3外,其他命令不会更改未触及通道原先保留的值。盒子修复了第1代不刷新bug,现在会自动刷新,无需外部发命令进行刷新,这个和第1代产品有很大改进,控制LED灯不会闪烁。盒子在接收232数据时,红灯会闪,如果绿灯闪,表示接收到不认识命令,或者命令没有接收完全;运行内置效果时,红灯会闪烁,绿灯是关闭;可以通过2个灯的状态来判断盒子状态 |