[Résolu] : ETHERNET - reception osc et envoi tcp (PjLink)

J'ai donc updaté mon code, conformément à tes conseils, et cela tourne impeccable… Génial, cela fonctionne !!!

En revanche je ne savais plus ou mettre ce code, afin de permettre d'avoir le retour d'information. En effet le projecteur me réponds suite à l'envoi d'un ordre grâce à ces quelques lignes

  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

J'ai donc essayé de le mettre avant le mettre au début de la fonction shutter, ainsi la connection reste ouverte pour permettre le retour d'info dans le "void loop", et avant chaque connection, (client.connect) j'ai mis une déconnexion (client.stop) au cas ou un autre client était connecté… cela fonctionne assez bien… j'envoie une ouverture ou une fermeture au vp concerné et cela s'effectue bien…
Le "hic", c'est lorsque j'envoie les 3 envois (ouverture ou fermeture) "simultanément" pour ouvrir ou fermer les 3 shutters, cela me semble étrange :

  • #1 : je n'ai qu'un des 3 retours d'informations… C'est à dire qu'un seul des projecteurs à le temps de me répondre, je pense du au fait qu'il faille déconnecter un vp pour se connecter à un second
  • #2 : les 3 ouvertures ou fermetures sont quelques peu espacées dans le temps, je veux dire quelque chose comme 100 ms environ…

Est-ce que ces deux "problèmes" sont des limitations de l'arduino ou bien y-aurais-til possibilité de faire mieux?

En tout cas merci pour le coup de main… je ne m'en sortais pas !!

Voici le code pour mes 3 video-projecteurs :

#include <Ethernet.h>
#include <SPI.h>
#include <ArdOSC.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 0, 0, 10 };
byte vp1[] = { 10, 0, 0, 11 }; 
byte vp2[] = { 10, 0, 0, 12 }; 
byte vp3[] = { 10, 0, 0, 13 }; 
int serverPort = 10000;
EthernetClient client;
OSCServer server;

void setup() {
  Ethernet.begin(mac, ip);
  Serial.begin(19200);
  server.begin(serverPort);
  server.addCallback("/pjlink.1/shutter",&shutter1);
  server.addCallback("/pjlink.2/shutter",&shutter2);
  server.addCallback("/pjlink.3/shutter",&shutter3);
  delay(1000);
  }

void loop() { 
  // reception de messages OSC
    if(server.aviableCheck()>0){
          }
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
    }
  }
void shutter1(OSCMessage *_mes) {
  //deconnection
     client.stop();
    int value = _mes->getArgInt32(0);
    // connexion au vp
     Serial.println("connecting...");
        client.connect(vp1, 4352);
    if (!client.connected()) {
          Serial.println("connection failed");
          return;
          }
  
    Serial.println("connected");
  if(value == 1){
      Serial.println();
      Serial.println("UN");
      client.print("%1AVMT 31\r");
  }
  else{
      Serial.println();
      Serial.println("ZERO");
      client.print("%1AVMT 30\r");
   }
}

void shutter2(OSCMessage *_mes) {
  //deconnection
     client.stop();
    int value = _mes->getArgInt32(0);
    // connexion au vp
     Serial.println("connecting...");
        client.connect(vp2, 4352);
    if (!client.connected()) {
          Serial.println("connection failed");
          return;
          }
  
    Serial.println("connected");
  if(value == 1){
      Serial.println();
      Serial.println("UN");
      client.print("%1AVMT 31\r");
  }
  else{
      Serial.println();
      Serial.println("ZERO");
      client.print("%1AVMT 30\r");
   }
}

void shutter3(OSCMessage *_mes) {
  //deconnection
     client.stop();
    int value = _mes->getArgInt32(0);
    // connexion au vp
     Serial.println("connecting...");
        client.connect(vp3, 4352);
    if (!client.connected()) {
          Serial.println("connection failed");
          return;
          }
  
    Serial.println("connected");
  if(value == 1){
      Serial.println();
      Serial.println("UN");
      client.print("%1AVMT 31\r");
  }
  else{
      Serial.println();
      Serial.println("ZERO");
      client.print("%1AVMT 30\r");
   }
}