Problème de compréhension librairie ArtNet

Bonjour,

J'ai un problème de compréhension de la librairie ArtNet de hideakitai. GitHub - hideakitai/ArtNet: Art-Net Sender/Receiver for Arduino (Ethernet, WiFi)

Je n'arrive qu'à envoyer les canaux DMX à une valeur identique. Mon but est d'envoyer un canal précis à une valeur définie selon le bouton sur lequel j'appuie.

Je me limite ici à un bouton et aux 10 premiers canaux pour plus de lisibilité sur le moniteur série.

A terme, je voudrais pouvoir lire la valeur d'un seul canal: Si il est à 0 passer son état à 255 avec un appui sur le bouton, et inversement.

Voici le code, un peu modifié:

#include <Artnet.h>
#include <Bounce.h>

const int vert = 5;  // LED bouton
const int rouge = 6; // LED PGM OK

// Ethernet stuff
const IPAddress ip(192, 168, 0, 100);
uint8_t mac[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB};

ArtnetSender artnet;
const String target_ip = "192.168.0.11";
uint32_t universe = 1;
uint32_t net = 0;
uint32_t subnet = 0;

const uint16_t size = 10; // nombre de canaux envoyés
uint8_t data[size];       // ?
uint8_t value = 0;        // ?


Bounce SW1 = Bounce(3, 5);


void setup() {
  Serial.begin(115200);
  delay(2000);

  pinMode(3, INPUT);
  pinMode(rouge, OUTPUT);
  pinMode(vert, OUTPUT);

  Ethernet.begin(mac, ip);
  artnet.begin();
  // artnet.begin(net, subnet); // optionally you can change

  Serial.println("prêt");
  Serial.println(UDP_TX_PACKET_MAX_SIZE);

  analogWrite(rouge, 50);

}

void loop() {

  SW1.update();



  if (SW1.risingEdge())
  {
    analogWrite(vert, 150);

    Serial.print("artnet data (universe : ");
    Serial.print(universe);
    Serial.print(", size = ");
    Serial.print(size);
    Serial.print(") :");
    for (size_t i = 0; i < size; ++i) {
      Serial.print(data[i]);
      Serial.print(", ");

      memset(data, 125, size);
      artnet.streaming_data(data, size);
      artnet.streaming(target_ip, net, subnet, universe); // automatically send set data in 40fps
      // artnet.streaming(target_ip, net, subnet, univ);  // or you can set net, subnet, and universe
    }
    Serial.println();
  }


  if (SW1.fallingEdge())
  {
    analogWrite(vert, 0);
  }



}

Merci d'avance

Robin

Personne pour m'aiguiller? Ca fait une semaine que je suis dessus..
Merci

As-tu utilisé le moteur de recherche du forum ?

Personnellement c'est la première fois que j'entends parler de Art-Net. Difficile d'aider.

Bien sûr. J'ai cherché en français, anglais, sur d'autres sites aussi, essayé d'autres librairies, etc.
Le protocole ArtNet est en gros l'évolution du standard DMX mais sur réseau IP, ce qui offre beaucoup plus de possibilités en ayant l'avantage de simplifier le câblage et d'être plus modulable.

C'est un peu spécifique mais pas tant que ça. J'ai plutôt tendance à ne pas trop demander et à me débrouiller seul en cherchant parfois longtemps. Je me considère encore comme débutant alors j'essaye aussi les sketch des autres pour comparer ou comprendre leur logique. Mais là je bloque, j'en suis à changer un paramètre, téléverser, rechanger un paramètre, téléverser, pendant des heures. Je suis coincé quoi.

La première chose à faire est de découper le problème.

Ce code ne permet même pas de savoir si le problème se situe au niveau connexion Ethernet ou ailleurs.

  Ethernet.begin(mac, ip);

Il serait bien de tester la valeur retournée (tiré des exemples de la librairie) :

  if (Ethernet.begin(mac, ip) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    if (Ethernet.hardwareStatus() == EthernetNoHardware) {
      Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    } else if (Ethernet.linkStatus() == LinkOFF) {
      Serial.println("Ethernet cable is not connected.");
    }
    // no point in carrying on, so do nothing forevermore:
    while (true) {
      delay(1);
    }
  }

Bonjour,

La connexion ethernet fonctionne bien, j'arrive à voir ce que je fais avec un moniteur artnet qui me donne la valeur des 10 premiers canaux.
Je n'arrive par contre pas à envoyer une valeur sur un seul canal.
Il y a ce code, qui est ma seule référence:

memset(data, 125, size);
      artnet.streaming_data(data, size);
      artnet.streaming(target_ip, net, subnet, universe); // automatically send set data in 40fps
      // artnet.streaming(target_ip, net, subnet, univ);  // or you can set net, subnet, and universe

Oui j'ai bien vu, comme dans l'exemple de la librairie.
Je peux difficilement en dire plus.

Je n'ai peut-être pas compris la question.
S'il s'agit de modifier un valeur dans le tableau data :
data[index] = valeur;
Ensuite envoyer le paquet à nouveau.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.