Это устройство: https://www.enttec.co.uk/en/product/dmx-usb-interfaces/ dmx-usb-pro-professional-1u-usb-to-dmx512-converter
Я выбрал Pro-версию из-за API (https://cdn.enttec.com/ pdf/assets/70304/70304_DMX_USB_PRO_API.pdf), что должно упростить задачу по сравнению с дешевым «Open DMX».
Это мой класс DmxUsbProExample:
Код: Выделить всё
package org.example;
import jssc.SerialPort;
import jssc.SerialPortException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class DmxUsbProExample {
byte[] dmxData;
ScheduledExecutorService executorServiceChangeEffect;
SerialPort serialPort;
public DmxUsbProExample(String comPort) {
try {
this.serialPort = new SerialPort(comPort);
this.serialPort.openPort();
this.serialPort.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_2, SerialPort.PARITY_NONE);
this.serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
this.dmxData = new byte[512];
this.dmxData[0] = (byte) 255;
this.dmxData[1] = (byte) 255;
this.dmxData[2] = (byte) 255;
this.dmxData[3] = (byte) 255;
} catch (SerialPortException ex) {
System.out.println(ex);
}
}
private void sendDMXData() {
try {
byte[] packet = buildEnttecDMXUSBProPacket(this.dmxData);
this.serialPort.writeBytes(packet);
} catch (jssc.SerialPortException e) {
e.printStackTrace();
}
}
private static byte[] buildEnttecDMXUSBProPacket(byte[] dmxData) {
int dataLength = dmxData.length;
byte[] enttecDMXUSBProPacket = new byte[5 + dataLength];
byte START_CODE = (byte) 0x7E;
enttecDMXUSBProPacket[0] = START_CODE;
byte DMX_SEND_LABEL = 0x06;
enttecDMXUSBProPacket[1] = DMX_SEND_LABEL;
enttecDMXUSBProPacket[2] = (byte) (dataLength & 0xFF);
enttecDMXUSBProPacket[3] = (byte) ((dataLength >> 8) & 0xFF);
System.arraycopy(dmxData, 0, enttecDMXUSBProPacket, 4, dataLength);
byte END_CODE = (byte) 0xE7;
enttecDMXUSBProPacket[enttecDMXUSBProPacket.length - 1] = END_CODE;
return enttecDMXUSBProPacket;
}
public void startEngine() {
this.executorServiceChangeEffect = Executors.newSingleThreadScheduledExecutor();
this.executorServiceChangeEffect.scheduleAtFixedRate(this::sendDMXData, 0, 1000 / 40, TimeUnit.MILLISECONDS);
}
}
Код: Выделить всё
DmxUsbProExample dmxUsbProExampleOBJ = new DmxUsbProExample("COM6");
dmxUsbProExampleOBJ.startEngine();
Проблема: Лампа ( Cameo Root Rar 6) не реагирует. Похоже, что лампа не получает действительный сигнал DMX, поскольку дисплей на лампе мигает, что указывает на отсутствие сигнала DMX.
Я знаю, что лампа работает, это так. работает с другим программным обеспечением DMX.
Я знаю, что использую правильный COM-порт.
Я знаю, что Enttec DMX USB pro работает, поскольку программное обеспечение от производителя может отправлять «действительный» DMX на лампа.
Подробнее здесь: https://stackoverflow.com/questions/790 ... mx-usb-pro
Мобильная версия