Bonjour à toutes et à tous,

Je voudrais faire communiquer un Arduino avec mon PC via la liaison série. Pour ce faire, j'ai écrit une petite application : "LitCom" qui lit et écrit sur un port série en indiquant les paramètres qui vont bien. J'utilise un composant "TBlockSerial" de l'unité "Synaser". Voilà la procédure qui lit le port série.

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
procedure TForm1.ConnecterClick(Sender: TObject);
begin
  if Assigned(PortCOM) then
    PortCOM.Free;
  Stop:= False;
  PortCOM:= TBlockSerial.Create;
  PortCOM.OnStatus:= @OnDistoXStatus;
  NbBauds:= StrToInt(ChoixBauds.Items[ChoixBauds.ItemIndex]);
  try
    PortCOM.Connect(NomPort.Items[NomPort.ItemIndex]);
    PortCOM.Config(NbBauds, 8, 'N', 1, False, False);
    while not Stop do
    begin
      try
        InfoCOM:= PortCOM.RecvString(2000);
        if InfoCOM <> '' then
          MemoData.Lines.Add(InfoCOM);
        Application.ProcessMessages;
      except
      end;
    end;
  finally
    DeconnecterClick(Sender);
  end;
end;
J'ai écrit un petit sketch Arduino (Pro Mini) pour faire le test :

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
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  delay(500);
  Serial.println("Initialisation");
}
 
void loop() {
  // put your main code here, to run repeatedly:
  if (Serial.available()) {
    String data = Serial.readString();
    Serial.println(data);
  }
  Serial.print("Essai de ");Serial.println("Dialogue avec le PC");
  delay(500);
}
Dans un premier temps, je teste mon sketch avec le moniteur série de l'IDE Arduino : ça fonctionne très bien.

Si je débranche mon Arduino du PC et que je le reconnecte, les échanges reprennent sans autre forme de procès. Si j'appuie sur le bouton de reset de mon Arduino, tout repart normalement.

Maintenant, laissant branché mon Arduino sur le PC, je ferme l'IDE Arduino et je lance mon appli : j'établis la connexion et, Oh merveille, mon appli joue le même rôle que le moniteur Série de l'IDE.

Si j'appuie sur le bouton d'initialisation de mon Arduino, la séquence reprend à l'initialisation : parfait.

Maintenant, je déconnecte mon Arduino puis le reconnecte. Là ça ne va plus du tout. Mon appli n'échange plus avec l'Arduino, quoi que je fasse ; réinitialisation de l'Arduino, déconnexion et reconnexion de mon appli, c'est le silence total.

Que je fasse les essais sous Windows 10 ou Ubuntu, le résultat est le même.

Si j'active la ligne 7 de mon appli ( PortCOM.OnStatus:= @OnDistoXStatus), que ça fonctionne ou pas, j'ai les mêmes messages.

Avez-vous une idée de ce qui cloche ?

Cordialement.

Pierre.