SerialPort [Résolu]

mimi35garry 21 Messages postés mercredi 21 janvier 2009Date d'inscription 8 février 2013 Dernière intervention - 6 févr. 2013 à 14:38 - Dernière réponse : mimi35garry 21 Messages postés mercredi 21 janvier 2009Date d'inscription 8 février 2013 Dernière intervention
- 7 févr. 2013 à 09:35
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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 6 févr. 2013 à 22:29
3
Merci
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...

Merci yann_lo_san 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de yann_lo_san
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 6 févr. 2013 à 15:15
0
Merci
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
Commenter la réponse de cs_casy
mimi35garry 21 Messages postés mercredi 21 janvier 2009Date d'inscription 8 février 2013 Dernière intervention - 6 févr. 2013 à 17:27
0
Merci
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
Commenter la réponse de mimi35garry
mimi35garry 21 Messages postés mercredi 21 janvier 2009Date d'inscription 8 février 2013 Dernière intervention - 7 févr. 2013 à 09:35
0
Merci
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
Commenter la réponse de mimi35garry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.