Communication Serial1 vers VBA

Bonjour à tous,

Je n'ai pas réussi à avoir de retour concluant sur le forum international, donc je retente ma chance parmi les français :slight_smile:

J'essaye en vain de faire communiquer un Arduino Mega avec VBA via le port Serial1. Les RX1 et TX1 sont connectés au pc avec un cable USB>TTL (https://hackspark.fr/fr/usb-to-ttl-uart-cable.html).

L'envoi de données semble fonctionner (je vois bien les data apparaitre lorsque j'ouvre un moniteur série type Realterm), mais pour une raison qui m'échappe tout ce que je receptionne dans VBA c'est un empty String, alors que le même code fonctionne parfaitement si je passe par le Serial principal avec l'usb de l'arduino.

Je me demandais si le Serial1 pouvait avoir certains parametres spécifiques, ou si le fait d’utiliser un cable USB>TTL aurait une influance sur la façon de traiter les données reçues, ou encore si c'est un autre pb dont j'ignore complétement la source.

Bref toutes vos idées sont les bienvenues :slight_smile:

Code Arduino

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
Serial1.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:
Serial.println("in loop 0");
Serial1.println("in loop 1");
delay(2000);

}

Code VBA (en utilisant un Object ActiveX NETCOMM)

Private Sub NETComm1_OnComm()

 If NETComm1.CommEvent = NETComm_EV_RECEIVE Then
 TextBox2.Text = NETComm1.InputData
End If

End Sub

Private Sub UserForm_Activate()
NETComm1.CommPort = 5
NETComm1.Settings = "9600,n,8,1"
NETComm1.InputLen = 0
NETComm1.RThreshold = 1
NETComm1.InBufferSize = 1024
NETComm1.DTREnable = True


On Error Resume Next

If NETComm1.PortOpen = False Then
    NETComm1.PortOpen = True
End If

If Err Then MsgBox Error$, 48
End Sub


Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
NETComm1.Output = KeyAscii
TextBox1.Text = KeyAscii
End Sub

Private Sub UserForm_Terminate()
    On Error Resume Next    'Error handler
    
    If NETComm1.PortOpen = True Then    'check if the serial port is open
        NETComm1.PortOpen = False       'close the serial port
    End If
    
    If Err Then MsgBox Error$, 48     'Display error in message box
    End


End Sub

Bonjour à toi,

Je viens de faire un essai en C-Sharp. J'utilise la liaison USB entre l'Arduino et mon PC (COM5).

Voilà mon code :

        private void Form1_Load(object sender, EventArgs e)
        {
            serialPort.PortName = "COM5";
            serialPort.BaudRate = 9600;
            serialPort.Parity = Parity.None;
            serialPort.DataBits = 8;
            serialPort.StopBits = StopBits.One ;
            serialPort.DataReceived += OnDataReceived;
            serialPort.Open();

        }

        private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string readBuffer = serialPort.ReadExisting();
            Debug.Print(readBuffer);
        }

Cela fonctionne sans souci.

Donc de ton coté, je commencerais par tester sur la liaison USB avant de passer sur un autre canal série.

N'envoie pas de données mais essaie juste d'en recevoir.

D'autres part, tu peux supprimer cette ligne. Les valeurs par défaut iront très bien.

NETComm1.InBufferSize = 1024

Après cela, ton problème vient peut être de celles-là

NETComm1.RThreshold = 1
NETComm1.DTREnable = True

Nicolas

Salut Nicolas et merci bcp pour ta réponse.
Sur ton conseil j'ai procédé à plusieurs test qui m'ont permis d'isoler le problème qui vient donc de la lecture du Serial sur le cable USB>TTL. Reste maintenant à le résoudre.

  • Le cable usb fonctionne bien dans le sens PC > Arduino, l'arduino reçoit l'info
  • Dans le sens Arduino > PC, impossible de récupérer l'info dans VBA via le cable USB/TTL quelque soit le Serial utilisé. C'est vraiment très bizarre car la data semble bien émise par Arduino et je peux la visualiser dans un serial monitor.

Si vous avez une idée, je suis preneur :slight_smile: