Il est possible que ta syntaxe du message vers le projecteur ne soit pas exacte.
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.
La commande serait prise en compte mais les caractère supplémentaires mettrait le projecteur dans un mode où il n'accepte plus de commande.
As tu expérimenté le controle du projecteur depuis un soft PC par exemple ?
Es-tu sur de la syntaxe de fin de commande ?
De toute façon, il va falloir change la logique de ton programme :
- pour supporter les déconnexions intenpestives
- pour gérer plusieurs IP destinations
En effet, l'Arduino ne peut pas maintenir plusieurs connexions clientes simultanées.
Tu n'aura donc pas le choix a terme de :
- pouvoir ré-connecter au projecteur en cas de deconnexion
- deconnecter et se reconnecter à un autre projecteur
Je te suggère dans un premier temps de déplacer le client.connect() dans la fonction shutter1 :
void setup()
{
Ethernet.begin(mac, ip);
Serial.begin(19200);
server.begin(serverPort);
server.addCallback("/pjlink.1/shutter",&shutter1);
delay(1000);
}
void loop()
{
if(server.aviableCheck()>0) {
}
}
void shutter1(OSCMessage *_mes) {
int value = _mes->getArgInt32(0);
Serial.println("connecting...");
client.connect(vp3, 4352);
if (!client.connected()) {
Serial.println("connection failed");
return;
}
Serial.println("connected");
if(value == 1){
client.println("%1AVMT 31");
Serial.println("UN");
}
else{
client.println("%1AVMT 30");
Serial.println("ZERO");
}
client.stop();
}
Comme cela tu ouvres et ferme la connection TCP a chaque fois.
Après, si ca marche, on pourra essayer d'optimiser