Stephan F
- Forum-Beiträge: 3
30.03.2013, 10:16:16 via Website
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:
An der stelle "dmxdata= 127;" würde ich gerne werte zwischen 0 und 255 einsetzen.
Vielen danke für die Hilfe!
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();
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!
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.