Bonjour à tous !
J'aurais besoin de vos petits conseils pour savoir si je suis bien partie car j'ai une petite problématique.

Je possède un Controllino , qui est un automate programme basé sur le même IDE qu'arduino. Et je compte l'utiliser pour lire des trames en continu.
Pour ce faire j'ai un lecteur de code qui va lire la séquence , la mettre sur un serveur et à l'aide du Controllino je vais lire cette séquence.

Pour ce qui est de la lecture tous est bon , je l’aperçois bien sur mon moniteur Serie. Ensuite j'ai donc mis en place un système de comparaison.
Je m'explique : Je lit ma première séquence, je retiens cette séquence et je fait une action. Quand arrive la deuxième séquence si elle est égale à la précédente alors je fait la même action , si par contre elle viens à changer je lance une autre action.

Pour ce qui est de comparer la séquence que je lit avec une séquence que j'écrit en dur sur le programme ça fonctionne , mais je n'arrive pas à trouver la solution pour que le controllino le fasse sans que j'ai besoin de lui donné une séquence à comparer et qu'il le fasse tous seul. Pour ça j'utilise la fonction strcmp().

Les séquences que je reçois sont comme ceci : "6056521585" : une suite de 10 chiffres.

Alors du coup soit je demande peut être trop compliqué, soit mon programme n'est pas adapté à ce que je veux. Du coup je voudrais votre avis sur la question. Parce que je ne pense pas être très loin de la démarche à prendre.

Voici mon code avec les commentaires.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#define CMDBUFFER_SIZE 15   // Je definie la taille du buffer
#include <Controllino.h>  // librairie pour le controllino
#include <SPI.h>  // librairie pour la liaison Ethernet avec Ethernet.h
#include <Ethernet.h>
 
byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0xFC, 0x17}; // Adresse MAC du controllino
IPAddress ip(192,168,23,154); // adresse IP du Controllino
IPAddress server(192,168,23,153); // Adresse IP du serveur Lecteur
EthernetClient client; // Je suis en mode Client
 
void setup() // fonction Setup
{
    pinMode (CONTROLLINO_D0, OUTPUT); // Mon port D0 en sortie
  pinMode (CONTROLLINO_D1, OUTPUT); // Mon port D1 en sortie
  pinMode (CONTROLLINO_D2, OUTPUT); // D2 en sortie
 
  Ethernet.begin(mac, ip); // Ethernet demarre avec les adresses mac et Ip donné
  Serial.begin(57600); // vitesse de lecture sur le moniteur serie
  while (!Serial){;} 
  delay(1000);
 
  Serial.println("connexion..."); // Un afficheur connexion
  if (client.connect(server,2111))  // si le client donc le controllino ce connecte sur le serveur sur le port 2111
  {
    Serial.println("connecte"); // alors j'affiche connecte
  } 
  else // sinon
  {
    Serial.println("connexion echoue"); // j'affiche que la connexion est echoue
  }
}
 
void loop() // boucle infini
{
 static char cmdBuffer[CMDBUFFER_SIZE] = ""; // le caractère buffer est à 0
 char c; // variable c en tant que caractère
 while(client.available())  // pour un client est présent donc si on reçois un octet
 {
   c = processCharInput(cmdBuffer, client.read()); // c prend la valeur de ce que le seveur envoi 
   Serial.print(c); // on fait afficher c
   if (c == '\n') // si c arrive au dernier octet
   {
     Serial.println(); // on fait un saut de ligne
 
     if (strcmp("6047078288", cmdBuffer) == 0)  // On compare deux chaines de caractères , si elles sont égaux
     {
        digitalWrite(CONTROLLINO_D0,HIGH); // on active la sortie D0
        digitalWrite(CONTROLLINO_D1,LOW); // on desactive la sortie D1
        digitalWrite(CONTROLLINO_D2,LOW); // on desactive la sortie D2
     }
          else if (strcmp("NOREAD", cmdBuffer) == 0) // Si "NOREAD" est egale à la valeur du buffer alors 
     {
      digitalWrite(CONTROLLINO_D1,LOW); // on desactive la sortie D1
      digitalWrite(CONTROLLINO_D0,LOW); // on desactive la sortie D0
      digitalWrite(CONTROLLINO_D2,HIGH); // on active la sortie D2
     }
     else // sinon
     {
      digitalWrite(CONTROLLINO_D0,LOW); // on desactive la sortie D0
      digitalWrite(CONTROLLINO_D1,HIGH); // on active la sortie D1
      digitalWrite(CONTROLLINO_D2,LOW); // on desactive la sortie D2
     }
 
     cmdBuffer[0] = 0; // on remet le buffer à 0
   }
 }
 //delay(1); // on attend 1 millisecondes
}
 
char processCharInput(char* cmdBuffer, const char c)
{
 
 if (c >= 32 && c <= 126) // J'ignore les charactères spéciaux
 {
   if (strlen(cmdBuffer) < CMDBUFFER_SIZE) // si la taille de mon buffer est inferieur à la taille de CMDBUFFER
   { 
     strncat(cmdBuffer, &c, 1);   //Ajoute au buffer 
   }
   else  //sinon
   {   
     return '\n'; // fin de ligne
   }
 }
 else if ((c == 8 || c == 127) && cmdBuffer[0] != 0)
 {
 
   cmdBuffer[strlen(cmdBuffer)-1] = 0;
 }
 
 return c;
}
Je vous remercie pour votre lecture , et vous souhaites une très bonne journée.