MicroQuettas:
Bonjour,
Pour bidouiller avec TCP, il y a un outil (gratuit) : Hercules Utility. Il fonctionne sous Windows sans installation et sur Linux avec Wine. On peut simplement créer des clients et serveurs TCP pour le test, envoyer et recevoir des messages. Rien à coder...
Bonne bidouille
MicroQuettas
J'ai essayé Hercules utility et il est super, merci. J'arrive à simuler le retour d'info à une question "état shutter?" et à allumer ma led en fonction.
J'ai bien avancé grâce à vos conseils, merci. Mais une question:
Actuellement la demande d'état est intégrée à la commande du switch 1, ou manuelle via le switch 2.
Il faut que la demande soit automatique et incluse dans la loop pour que ma LED s'allume même si un autre périphérique commande le shutter, et que mon bouton réagisse dans le bon sens.
Je n'arrive pas à intégrer une demande dans mon loop, ça coupe la connexion client sur Hercules.
Comment faire pour que l'état soit demandé en permanence, y a-t-il un risque de saturation de la machine ou du réseau surtout si je surveille plusieurs paramètres?
Ou alors, mais c'est plus hasardeux... peut-être écouter la commande qu'une autre machine donnerait au vidéoprojecteur, pour la récupérer et actualiser l'état de la LED concernée?
Je ne vois pas la stratégie à adopter.
Pour mieux comprendre il faut que je précise la finalité de ce projet: dans une installation vidéo de théâtre, il y a plusieurs paramètres à commander sur plusieurs vidéoprojecteurs (power, shutter, input, sur les projecteurs 1, 2, 3...). Tout ceci est en IP fixe.
Un ordinateur principal envoie habituellement les commandes pendant les spectacles, mais il faut revoir la programmation à chaque création de nouveau show car nous n'avons jamais les mêmes besoins.
Le arduino servira de télécommande pendant les créations, mais aussi de "surveillant" d'état des machines, et de secours en cas de plantage de l'ordi.
Voilà pourquoi il faut un retour d'info "permanent".
Voici mon loop en chantier, j'espère que je n'ai pas fait trop d'aberrations:
Merci
void loop() // comment demander l'état du système à chaque loop?
{
EthernetClient client = server.available();
SW1.update();
SW2.update();
if (SW1.risingEdge())
{ if (etat_led_shutter == 1)
{
client.connect(VP1, 3002);
client.println("SHU0");
client.stop();
client.connect(VP1, 3002);
client.println("SHU?");
client.stop();
Serial.println("envoi SHU0 (ouvre le shutter) et demande l'état");
analogWrite(led_CMD, 100);
delay(75);
analogWrite(led_CMD, LOW);
}
else if (etat_led_shutter == 0) {
client.connect(VP1, 3002);
client.println("SHU1");
client.stop();
client.connect(VP1, 3002);
client.println("SHU?");
client.stop();
Serial.println("envoi SHU1 (ferme le shutter) et demande l'état");
analogWrite(led_CMD, 100);
delay(75);
analogWrite(led_CMD, LOW);
}
}
if (SW2.risingEdge()) // demande l'état du shutter
{
client.connect(VP1, 3002);
client.println("SHU?");
client.stop();
Serial.println("envoi SHU?");
analogWrite(led_CMD, 100);
delay(75);
analogWrite(led_CMD, LOW);
}
// lecture + affichage de la commande retour
if (client.available()) {
char c = client.read();
if (c != '\n') {
// Add received char to string variable
commandStrVP1 += c;
} else {
// Print received command to serial monitor
Serial.print("recu du VP1: " + commandStrVP1);
// Process the received command
processCommand(commandStrVP1);
// Clear variable for receive next command
commandStrVP1 = "";
}
}
}
// action du retour d'info
void processCommand(String cmd) {
if (cmd == "SHU!0") { // SHU0 = shutter ouvert
Serial.println (" = shutter ouvert");
analogWrite(led_shutter, 255);
etat_led_shutter = 0;
}
else if (cmd == "SHU!1") { //SHUT1 = shutter fermé
analogWrite (led_shutter, LOW);
Serial.println (" = shutter fermé");
etat_led_shutter = 1;
}
}