Art-Net DMX Pakete senden

  • Antworten:2
Stephan F
  • Forum-Beiträge: 3

30.03.2013, 10:16:16 via Website

Hallo,
ich habe vor eine kleine App zur DMX-Lichtsteuerung zu schreiben. Hierzu möchte ich gerne Art-Net Pakete (UDP) versenden welche die DMX-Werte enthalten.

Im prinzip funktioniert die Paketerstellung und das senden auch, aber leider nur für DMX-Werte unterhalb von 128. Ab DMX-Werte über 127 werden falsche Werte gesendet. Ich denke es liegt am Wertebereich von "byte" da diese Variable einen Wertebereich von -128 bis 127 hat. Da ich aus der C-Microcontrollerprogramierung komme, weiß ich aber leider keinen anderen lösungsweg. Gibt es eine andere möglichkeit UDP-Pakete zu erstellen, bei denen auch Byte-Werte bis 255 möglich sind?

Dies ist der funktionierende Code:
1socket = new DatagramSocket();
2 InetAddress serverIP = InetAddress.getByName("192.168.XXX.XXX");
3
4 //UDP-Paketerstellung
5 String data = "Art-Net";
6 char s=0x00;
7 data=data+s;
8
9 s=0x00;
10 data=data+s; //dmx5000
11 s=0x50;
12 data=data+s;
13
14 data=data+s; //version
15 s=0x0e;
16 data=data+s;
17 s=0x00;
18 data=data+s; //sequenz =0
19
20 data=data+s; //physikal
21
22 data=data+s; //universe
23 data=data+s; //universe
24
25 s=0x02;
26 data=data+s;
27 s=0x00;
28 data=data+s;
29 //DMX-Werte einfügen
30 char dmxdata;
31 int i;
32 for(i=1; i<=512; i++)
33 {
34 dmxdata=0x0; //DMX-Wert auf 0 setzen
35 if(i==6 || i==9) //Kanäle 6 und 9 auf einen Wert setzen
36 {
37 dmxdata= 127;
38 }
39
40 data=data+dmxdata;
41 }
42
43 byte[] outData = data.getBytes();
44 DatagramPacket out = new DatagramPacket(outData,outData.length, serverIP,6454);
45 socket.send(out);
46 socket.close();

An der stelle "dmxdata= 127;" würde ich gerne werte zwischen 0 und 255 einsetzen.

Vielen danke für die Hilfe!

Antworten
Andy N.
  • Forum-Beiträge: 3.112

30.03.2013, 13:59:34 via App

Warum erstellst Du den zuerst einen String? Kannst Du nicht gleich die Bytes definieren?

Antworten
Stephan F
  • Forum-Beiträge: 3

30.03.2013, 14:41:42 via Website

Danke für die Antwort.
Ich habe es jetzt alles mit Bytes gemacht und es funktioniert auch, wenn ich die Werte so setze: "
1dmxdata=(byte) (dmxdata|0xFF);"

Vielen Danke!!!

Antworten