SerialPort [Résolu]

Signaler
Messages postés
21
Date d'inscription
mercredi 21 janvier 2009
Statut
Membre
Dernière intervention
8 février 2013
-
Messages postés
21
Date d'inscription
mercredi 21 janvier 2009
Statut
Membre
Dernière intervention
8 février 2013
-
Bonjour,
je souhaite envoyé une donnée sur le port Com.
Voici mon code en C# qui fonctionne

            serialPort1.portName = "COM5";
            serialPort1.BaudRate = 9600;
            serialPort1.Parity = Parity.Even;
            serialPort1.StopBits = StopBits.One;
            serialPort1.DataBits = 8;
            serialPort1.Handshake = Handshake.None;
private void button1_Click(object sender, EventArgs e)
        {
 try
            {

                
                serialPort1.Write("FF" + "\n\r");
'069 en decimal=105 en octal=45 en hexa=01000101en binaire=E majuscule en ascii
                Thread.Sleep(10);                   
                }
            catch (Exception ex)
            {
                MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
 }
}

Voici celui en VB.net qui fonctionne aussi
SerialPort1.PortName = "COM5"              
        SerialPort1.BaudRate = 9600    
        SerialPort1.Parity = IO.Ports.Parity.Even           
        SerialPort1.DataBits = 8                           
        SerialPort1.StopBits = IO.Ports.StopBits.One 
  
Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
            envoyeCaractere(69)
'069 en decimal=105 en octal=45 en hexa=01000101en binaire=E majuscule en ascii
    End Sub

Private Sub envoyeCaractere(ByVal Code As Integer)
        SerialPort1.Write(Chr(Code))    
        Sleep(10)                   
        SerialPort1.Write(Chr(13))     
        Sleep(10)                       
        SerialPort1.Write(Chr(10))

    End Sub

Mon périphérique (une carte à base de PIC 16F876) attend 45 en héxa(ou 01000101) et le CR (0x0D)et le LF(0x0A) en ascii.

Mon code VB marche (en convertissant le decimal en en code ASCII) mais pas celui en C# enfin si mais je suis obligé de mettre un caractère après celui que je veus envoyer.
Par exemple E1,Ei,E?, Toujours deux caractères en commencant par la "vrai" lettre, si j'en met trois ca ne fonctionne plus le PIC vois bien que ce n'est pas une commande valide.
Les propriétées de sérialport1 sont les mêmes sauf en VB "modifiers Friend" et en C# "modifiers internal".
Voyez vous pourquoi en C# je suis obligé de doublé la lettre ?

mimi35garry vous salut bien

4 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
23
Salut,

CRLF = \r\n et pas \n\r

Il me semble que les chaines C# sont en UNICODE, une lettre = 2 octets.
As tu essayé la surcharge suivante :

serialPort1.Write( Encoding.ASCII.GetBytes("E\r\n") );


bye...
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Enlève le Thread.Sleep(10); du code C#, il suspend le process et donc probablement empêche l'envoie des caractères sur le port série

Vérifie aussi les bufferThreshold (connais plus exactement le nom exact), tu dois avoir 0 ou 1 sur celui d'emission pour que l'envoi soit immédiat



[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
21
Date d'inscription
mercredi 21 janvier 2009
Statut
Membre
Dernière intervention
8 février 2013

Merci de ta réponse casy
le serialPort1.ReceivedBytesThreshold= nombre octet
est pour le datareceived, apparemment c'est pour indiquer le nombre d'octets qui sont reçu avant que l'évenenment datareceived ne se déclenche (dixit visual studio)
J'ai testé sans le sleep et c'est pareil.
Pour infos je l'avais mis pour cette configuration pour testé
serialPort1.Write(textBox2.Text);   
Thread.Sleep(10);                   
serialPort1.Write("\n");    
Thread.Sleep(10);                     
serialPort1.Write("\r");

Mais sa ne changeait rien.

Merci encore

mimi35garry vous salut bien
Messages postés
21
Date d'inscription
mercredi 21 janvier 2009
Statut
Membre
Dernière intervention
8 février 2013

bonjour,
oh le boulet, c'est bien \r\n et pas \n\r.
Merci yann_lo_san
merci à casy et tout les Codes-sourceurs.

mimi35garry vous salut bien