Waou…… Super explication et très belle optimisation… je ne pouvais réver mieux…
J'ai donc importé les morceaux de code proposés, et cela fonctionne bien… Merci !!!!!
Bon, mais cela ne fonctionne que durant 30 secondes, ensuite c'est déconnecté et cela ne veux plus se reconnecter… Mais cela est du au protocole PJLink qui demande à fermer la connection lors du retour d'information… c'est à implémenter maintenant…
Voici le code fonctionnel (durant 30 secondes)
La déclaration de variable et les imports de librairie
#include <Ethernet.h>
#include <SPI.h>
#include <ArdOSC.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 0, 0, 10 };
byte vpIp[3][4] = { { 10, 0, 0, 11 }, { 10, 0, 0, 12 }, { 10, 0, 0, 13 } } ;
EthernetClient vpClient[3];
int serverPort = 10000;
OSCServer server;
Le setup
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);
}
La loop
void loop() {
// reception de messages OSC
if(server.aviableCheck()>0) {
}
for ( byte vp = 0 ; vp < 3 ; vp++ )
while ( vpClient[vp].available() )
{
char c = vpClient[vp].read();
Serial.print(c);
}
}
La fonction shutter
void shutter1(OSCMessage *_mes) {
shutter( 1, _mes );
}
void shutter2(OSCMessage *_mes) {
shutter( 2, _mes );
}
void shutter3(OSCMessage *_mes) {
shutter( 3, _mes );
}
void shutter(byte vp, OSCMessage *_mes) {
--vp; // 1, 2, 3 => 0, 1, 2 pour index de tableau
int value = _mes->getArgInt32(0);
if ( ! vpClient[vp].connected() )
{
// connexion au vp
Serial.println("connecting...");
int ret = vpClient[vp].connect(vpIp[vp], 4352);
if ( (ret == 0) || !vpClient[vp].connected() )
{
Serial.println("connection failed");
return;
}
else {
Serial.println("connected");
}
}
if ( value == 1 ) {
Serial.println();
Serial.println(vpClient[vp]);
vpClient[vp].print("%1AVMT 31\r");
}
else {
Serial.println();
Serial.println(vpClient[vp]);
vpClient[vp].print("%1AVMT 30\r");
}
}