Aide pour répétition d'un code sur des entrées différentes.

Salut à tous, petite description rapide:
Je m’appelle Killians, 23ans.

Je travail dans une imprimerie, on possède un espace libre service, avec des photocopieurs/imprimantes.
Nous avons un tableau de bord (datant des année 80/90, donc ultra archaïque) avec des switchs pour activer/désactiver les appareils, et également un Compteur analogique relier a chacune d’entre elle afin de comptabiliser le nombre total de feuille sortie par les client. (remis a Zero manuellement pour le client suivant).

Mon projet, c’est avec un Arduino Mega 2560, et un shield ethernet, faire un interface graphique avec toutes les imprimantes a l’écran, un bouton toggle Activer/Désactiver pour chaque machine, et son compteur associé, ainsi que le tarif total du par le client pour la machine qu’il a utilisé.

J’ai fait une maquette avec un Switch manuel pour tester, et ce, pour une Imprimante.
Tout fonctionne.

Cependant, je bloque totalement sur la façon dont je dois m’y prendre pour répété ceci pour mes 15 Appareils !

Pour le moment j’ai une Arduino Mega 1280, et un ethernet “petit model” (sans port SD), ce qui me complique un peu la vie…

Mais je ne pense pas que ça soit la cause de mon principale problème, donc en attendant de recevoir ma commande avec tout mon équipement final, j’essaye de trouver une solution…

Je joint mon code, si quelqu’un pourrait me mettre sur la voie ?

Merci d’avance !

#include <UIPEthernet.h>
#include <UIPServer.h>
#include <UIPClient.h>

/*DEBUT CONFIG VARIABLES INCREMENTATION - COMPTEUR*/
const int buttonPin = 13;
int buttonState;
int lastButtonState = LOW;
long lastDebounceTime = 0;
long debounceDelay = 50;
int counter = -1;
/*DEBUT CONFIG VARIABLES INCREMENTATION - COMPTEUR*/


/*DEBUT CONFIG VARIABLES IMPRIMANTE - COPIES - TARIF*/
int copie;
float prix = 0.50;
float total;
/*FIN CONFIG IMPRIMANTE - COMPTEUR*/

/*DEBUT CONFIG ETHERNET*/
static byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
static byte ip[] = { 192, 168, 0, 17 }; // ROUTER HOME
//static byte ip[] = { 169, 254, 56, 1 }; // LOCAL ETH
// static byte ipdns[] = { 89, 2, 0, 1 }; ROUTER HOME
static byte ipdns[] = { 89, 2, 0, 1 }; // LOCAL ETH


EthernetServer server(80);
/*FIN CONFIG ETHERNET*/

String HTTP_req;            // Stocker la requette HTTP ADD


void setup() {
  
/*OUVERTURE PORT SERIE ET SERVEUR*/
  Serial.begin(57600);
  pinMode(buttonPin, INPUT_PULLUP); // Déclaration Boutton Incrementation toujous a 1 - incrementation lorsque relié a la masse.
  pinMode(buttonPin, HIGH);
  Ethernet.begin(mac, ip, ipdns);
  server.begin();
/*PORT SERIE ET SERVEUR*/


/*CALCULS DES VARIABLES*/

/*CALCULS DES VARIABLES*/

}

void loop() {
  
  /*INCREMENTATION de counter*/
  boolean pressed = debounce();
  if (pressed == true) {
    counter++;
    Serial.write(counter);
  }
  
  copie = counter; //copie prends la valeur du compteur
  total = copie*prix; //Total = Nombre de copie multiplié par le prix d'une copie, tronqué a 2 chiffres apres la virgule
  /*FIN COUNTER*/

  /*DEBUT ECRITURE PAGE WEB*/
  EthernetClient client = server.available();
  if (client) {
    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        HTTP_req += c;  // Enregistrement Req HTTP un char a la fois
        if (c == '\n' && current_line_is_blank) {
          
          // Toujours introduire les page avec ceci: HTTP/1.1 200 OK)
          // and a content-type so the client knows what's coming, then a blank line:
          client.println("HTTP/1.1 200 OK");
          client.println("Content-type:text/html");
          client.println("Connection: keep-alive"); //ADD
          client.println();

          // requet AJAX pout l'etat switch
                    if (HTTP_req.indexOf("ajax_switch") > -1) {
                        // lecture etat switch et envoie approprié
                        GetSwitchState(client);
                    }
                    else {  // HTTP request for web page
                        // Envoie Page web - contenant JS et AJAX
                        client.println("<!DOCTYPE html>");
                        client.println("<html>");
                        client.println("<head>");
                        client.println("<title>Arduino Compteur Impression AJAX</title>");
                        client.println("<script>");
                        client.println("function GetSwitchState() {");
                        client.println("nocache = \"&nocache=\" \+ Math.random() * 1000000;");
                        client.println("var request = new XMLHttpRequest();");
                        client.println("request.onreadystatechange = function() {");
                        client.println("if (this.readyState == 4) {");
                        client.println("if (this.status == 200) {");
                        client.println("if (this.responseText != null) {");
                        client.println("document.getElementById(\"switch_txt\")\.innerHTML = this.responseText;");
                        client.println("}}}}"); 
                        client.println(
                        "request.open(\"GET\", \"ajax_switch\" + nocache, true);");
                        client.println("request.send(null);");
                        client.println("setTimeout('GetSwitchState()', 1000);");
                        client.println("}");
                        client.println("</script>");
                        client.println("</head>");
                        client.println("<body onload=\"GetSwitchState()\">");
                        client.println("<h1>Imprimante 1:</h1>");
                        client.println(
                        "<p id=\"switch_txt\">Etat du switch non demandé...</p>");
                        client.println("</body>");
                        client.println("</html>");
                    }
                    // Affichage de la RequetteHTTP dans le port Serie
                    Serial.print(HTTP_req);
                    HTTP_req = "";            // On vide la variable contenant la Requette HTTP
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    current_line_is_blank = true;
                } 
                else if (c != '\r') {
                    // a text character was received from client
                    current_line_is_blank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data
        client.stop(); // close the connection
    } // end if (client)
}

// Envoie etat switch dans le navigateur
void GetSwitchState(EthernetClient cl)
{
    if (digitalRead(13)) {
        cl.print("Etat du Bouton d'incremetnation: OFF 

");
    }
    else {
        cl.print("Etat du Bouton d'incremetnation: ON 

");
        
    }
        cl.print("Nombre de Copie(s) = <b>");
        cl.print(copie);
        cl.print("</b>

");
        cl.print("Total = <b>");
        cl.print(total);
        cl.print(" €</b>
");
        cl.stop();
}


/*DEBUT DEBOUNCE POUR INCREMENTATION*/
boolean debounce() {
  boolean retVal = false;
  int reading = digitalRead(buttonPin);
  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != buttonState) {
      buttonState = reading;
      if (buttonState == HIGH) {
        retVal = true;
      }
    }
  }
  lastButtonState = reading;
  return retVal;
}
/*FIN DEBOUNCE POUR INCREMENTATION*/

Compteur_Imprimante_AJAX_Killians_-_maquette.ino (6.28 KB)

Petit Up

Killians: Petit Up

bonsoir Si j'ai bien compris, actuellement ton tableau general dispose d'un compteur par machine et d'un switch ON/OFF par machine ? le compteur est de quel type ? electromecanique ? photos du panneau pour voir ?

Je te remercie de ta réponse. Oui tu as cerné la structure actuel.

Je prendrais une photo lundi matin.

Je pense qu'effectivement les compteur sont électromécanique.

Il y a 4 fils par imprimante.

Je pense 2 pour le bouton, et 2 pour le compteur (un qui reçois probablement l'impulsion électronique et une masse je présume).

Mais mon problème le plus conséquent je pense, c'est mon code.. Le fait de devoir répéter ses fonction pour chacune de mes imprimantes. J'ai peur que cela fasse trop lourd, meme pour une méga.

Pourrait tu jeter un coup d'oeil a mon code ?

Je n'ai jamais utilisé d'autre méthode pour arduino, je pensais peut être m'orienter vers une structure type "array". (Je m'exprime peu être pas assez clairement ... :/ )

Je te remercie en tout cas !

Killians: Il y a 4 fils par imprimante.

Je pense 2 pour le bouton, et 2 pour le compteur (un qui reçois probablement l'impulsion électronique et une masse je présume).

Mais mon problème le plus conséquent je pense, c'est mon code..

je pense que ton probleme le plus consequent ne vient pas là de ton code , mais déja de savoir ce "qui pourrait bien transiter par tes 4 fils" :grin: Si tu veux valablement "retrofiter" , il faut déjà connaitre/analyser "l'existant" En ce qui me concerne, il "me" faut beucoup plus d'infos pour esperer t'aider au moins déjà : - references des "imprimantes" - connectique utilisée entre imprimantes et "tableau general" - et des bonnes photos " de tout çà"

J'ai fait une analyse rapide.

Nous avons plusieurs imprimantes, de marque différentes (Nashuatec, Ricoh, Xerox) Je ne les utilise pour ainsi dire, jamais, elle ne font pas partie de mon secteur d'activité, je suis opérateur numérique spécialisé dans le grand format.

Pour ce qui est des connectiques, cela passe par des fils très très fins, type fils du réseau téléphonique... et sont reliés des imprimantes aux compteurs/switch via, ne rigole pas, mais des gaines rétractable sur chacun.... (oui j'ai du taff pour refaire tout ça correctement, haha, mais ça ne m'effraie pas trop).

Je prends tout pleins de photos lundi a la premiere heure et viendrai les poster ici meme !

Killians: J'ai fait une analyse rapide.

Nous avons plusieurs imprimantes, de marque différentes (Nashuatec, Ricoh, Xerox) ... Pour ce qui est des connectiques, cela passe par des fils très très fins, type fils du réseau téléphonique... et sont reliés des imprimantes aux compteurs/switch via, ne rigole pas, mais des gaines rétractable sur chacun.... (oui j'ai du taff pour refaire tout ça correctement, haha, mais ça ne m'effraie pas trop).

Je prends tout pleins de photos lundi a la premiere heure et viendrai les poster ici meme !

bonjour sous toutes reserves, si ton parc d'imprimantes est ainsi disparate , ET que le raccordement sur "ton vieux tableau de controle" fonctionne pour toutes , il doit y avoir au moins qq part "un protocole de discussion commune/agrégée."

Ton probleme est finalement peut etre plus simple que tu ne l'imagine (ou pas ! :grin: )

Donc "recupere" le maximum d'info sur "ces connexions" entre ton "tableau" et les "imprimantes"