» codelab : http://codelab.fr/accueil » Forum : Autres langages : http://codelab.fr/autres-langages » [C#] - Boîtier ENTTEC DMX USB Pro : http://codelab.fr/5408 Ceci est la version imprimable d'un sujet du forum, pour retourner à la version complète : [C#] - Boîtier ENTTEC DMX USB Pro |
Seb — 2014-11-28 00:11:53 |
Bonsoir ! static void Main(string[] args) { short channelCount = 25; byte[] data = new byte[channelCount + 6]; // 6 constant values + actual data data[0] = (byte)0x7E; // Start delimiter data[1] = (byte)6; // ENTTEC's label for "Send" data[2] = (byte)(channelCount & 255); // Data size LSB data[3] = (byte)((channelCount >> 8) & 255); // Data size MSB data[4] = (byte)0; // Startcode for (int i = 5; i < data.Length - 2; i++) { data[i] = (byte)0; } data[data.Length - 1] = (byte)0xE7; // End delimiter // Serial port SerialPort comPort = new SerialPort("COM4", 38400, Parity.None, 8, StopBits.One); comPort.Open(); comPort.Write(data, 0, data.Length); } Quand je compile, le boîtier ne réagit pas. Je pige pas trop d'où peut venir l'erreur, j'ai l'impression d'avoir respecté correctement le format imposé ... |
Mushussu — 2014-11-28 13:50:38 |
Bonjour, static void Main(string[] args) { short tailleUnivers = 25; byte[] data = new byte[tailleUnivers + 6]; // 6 constant values + actual data data[0] = (byte)0x7E; // Start delimiter data[1] = (byte)6; // ENTTEC's label for "Send" data[2] = (byte)((tailleUnivers + 1) & 255); // Data size LSB data[3] = (byte)(((tailleUnivers + 1) >> 8) & 255); // Data size MSB for (int i = 0; i < tailleUnivers; i++) { data[i + 4] = (byte)i; } data[5 + tailleUnivers] = (byte)0xE7; // End delimiter // Serial port SerialPort comPort = new SerialPort("COM4", 38400, Parity.None, 8, StopBits.One); comPort.Open(); comPort.Write(data, 0, data.Length); } Cela devrait fonctionner ! |
Seb — 2014-11-28 15:31:11 |
Et bien ça fonctionne, merci beaucoup ! |
Mushussu — 2014-11-28 20:24:57 |
En fait, une trame complète DMX au maximum 512 octets de données, mais il y a 513 octets qui transitent. Le premier avec l'indice 0 ne sert à rien. Les canaux DMX vont de 1 à 512. Voilà pourquoi je fais tailleUnivers + 1. Je pense que j'ai fait une erreur dans le code précédent, voici la correction : static void Main(string[] args) { short tailleUnivers = 25; byte[] data = new byte[tailleUnivers + 6]; // 6 constant values + actual data data[0] = (byte)0x7E; // Start delimiter data[1] = (byte)6; // ENTTEC's label for "Send" data[2] = (byte)((tailleUnivers + 1) & 255); // Data size LSB data[3] = (byte)(((tailleUnivers + 1) >> 8) & 255); // Data size MSB data[4] = (byte)0; for (int i = 0; i < tailleUnivers; i++) { data[i + 5] = (byte)(i + 1); } data[5 + tailleUnivers] = (byte)0xE7; // End delimiter // Serial port SerialPort comPort = new SerialPort("COM4", 38400, Parity.None, 8, StopBits.One); comPort.Open(); comPort.Write(data, 0, data.Length); } Dis-moi si cela fonctionne. |
Seb — 2014-12-01 09:42:21 |
Okay, merci pour le coup du startcode, j'avais pas compris ça comme ça ! |