Show Posts
Pages: 1 [2]
16  International / Français / Re: [Conseil] : ETHERNET - reception osc et envoi tcp (PjLink) on: November 06, 2012, 05:48:26 am
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
Code:
  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 :
Code:
#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");
   }
}
17  International / Français / Re: [Conseil] : ETHERNET - reception osc et envoi tcp (PjLink) on: November 06, 2012, 02:31:50 am
Quote
Ce que je veut dire c'est que le "%1AVMT 30" marche mais que le println() qui ajoute les caractères CR et LF après pose problème.
Oui, cela doit être effectivement cela… je fais l'essai tout à l'heure des que j'arrive… Mais effectivement, lorsque je m'en sers de la commande tcp via terminal ou Max(cycling74), je n'envoie qu'un retour chariot, et j'ai survolé trop vite la doc de "println" pour m'apercevoir qu'un LF était envoyé en plus du CR…
Donc cela parait logique, la machine reçoit l'ordre une première fois correctement, puis avec une syntaxe inapproprié ce qui met le système en carafe…

Quote
Je te suggère dans un premier temps de déplacer le client.connect() dans la fonction shutter1 :
Je testerais cela de suite après, car il est vrai que pour plusieurs VP, il faut que je me connecte à chaque fois avant d'envoyer l'ordre… C'est comme ca que je fais dans la version max…

Merci pour tes conseils avisés, et à tout à l'heure,

renaud
18  International / Français / Re: [Conseil] : ETHERNET - reception osc et envoi tcp (PjLink) on: November 05, 2012, 02:41:35 pm
Salut,

Quote
je m'apercois que l'ordre OSC passe bien /
Est-ce que ca veut dire que tu as bien les traces situées dans la fonction shutter1() ?
J'ai bien les traces dans la console ZERO et UN a chaque fois que j'envoie des valeurs (0/1)

Quote
Mais que le client.println() semble ne pas marcher ?
C'est exactement cela, c'est le "client.println()" qui ne fonctionne qu'une seule fois, la premiere fois apres reboot/reset de la duino…

Je tombe parfois sur la deconnection, mais pas de suite… ca sera surement le probleme suivant !!

Mais je m'y prends mal peut-être depuis le debut, mais il n'y a qu'avec ces morceaux de code récupérés sur les pages de référence de la librairie ethernet que j'arrive à un début de résultat.

Mon but est d'associer une reception de message osc à un envoi de message TCP…

La réception de "/pjlink.1/shutter 0" devra envoyer "‰1AVMT 30" à l'ip 10.0.0.11
La réception de "/pjlink.1/shutter 1" devra envoyer "‰1AVMT 31" à l'ip 10.0.0.11
La réception de "/pjlink.2/shutter 0" devra envoyer "‰1AVMT 30" à l'ip 10.0.0.12
La réception de "/pjlink.2/shutter 1" devra envoyer "‰1AVMT 31" à l'ip 10.0.0.12
La réception de "/pjlink.3/shutter 0" devra envoyer "‰1AVMT 30" à l'ip 10.0.0.13
La réception de "/pjlink.3/shutter 1" devra envoyer "‰1AVMT 31" à l'ip 10.0.0.13

merci !!

renaud
19  International / Français / [Résolu] : ETHERNET - reception osc et envoi tcp (PjLink) on: November 05, 2012, 12:49:31 pm
Bonjour à tous,

J'essaie de faire un projet arduino pour piloter le shutter interne de video-projecteurs compatible PJ-Link.
Il s'agit donc d'envoyer une commande TCP  :
"%1AVMT 30" pour ouvrir le shutter
"%1AVMT 31" pour fermer le shutter

Je souhaite commander cette fonction via OSC avec un message simple :
"/pjlink.1/shutter 0" pour ouvrir le shutter
"/pjlink.1/shutter 1" pour fermer le shutter

J'arrive à faire fonctionner la chose, mais seulement le premier ordre est effectué… Ensuite j'ai besoin de faire un "Reset" de l'arduino pour qu'un nouvel ordre soit effectué.
J'ai mis en place un "serial.println" en parralele du "client.println" afin de debugger la chose, et je m'apercois que l'ordre OSC passe bien, le probleme étant localisé dans l'envoi TCP.

Ce que j'aimerais est que la connexion TCP s'ouvre vers l'IP et le port selectionné à chaque fois qu'une commande OSC est reçu, car j'aimerais par la suite pouvoir avoir plusieurs messages OSC qui enverraient des commandes vers plusieurs IP

mais je rame déjà avec un, alors …

si quelqu'un a une piste sur laquelle me lancer…

par avance, merci !!

renaud


Code:
#include <Ethernet.h>
#include <SPI.h>
#include <ArdOSC.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 0, 0, 10 };
byte vp3[] = { 10, 0, 0, 13 };
int serverPort = 10000;

EthernetClient client;
OSCServer server;

void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(19200);
  client.connect(vp3, 4352);
  server.begin(serverPort);
  server.addCallback("/pjlink.1/shutter",&shutter1);
  delay(1000);
  Serial.println("connecting...");
  if (client.connected()) {
    Serial.println("connected");
  } else {
    Serial.println("connection failed");
  }
}

void loop()
{
    if(server.aviableCheck()>0){
}
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

void shutter1(OSCMessage *_mes) {
  int value = _mes->getArgInt32(0);
  if(value == 1){
      Serial.println("UN");
      client.println("%1AVMT 31");
  }
  else{
      Serial.println("ZERO");
      client.println("%1AVMT 30");
   }
}


Pages: 1 [2]