S'en sortir avec les serial port en c#
Voici en resumé comment s'en sortir avec les serial port en c# (c pas evident)
tout dabord il faudrai declarer une nouvelle instance de ton serial port en static au debut de ton programme lorsque tu declare tes variables:
Code:
1 2 3
| public partial class TonAppliSerialPort: Form
{
static SerialPort serialPort1; |
ensuite lorsque tu initialise ta form juste apres InitializeComponent();
tu crée une nouvelle instance de ton serial port et un SerialDataReceived Event Handler comme ceci:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public FrmIselControl()
{
//Initialise the form (labels, textBox, buttons)
InitializeComponent();
//Creates a new instance of the serialPort class
serialPort1 = new SerialPort();
//Sets the SERIAL PORT ENCODING
serialPort1.Encoding = Encoding.Default;
//Recupere les données en entrée du port serie
serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
} |
ensuite tu ouvre ton port serie (un petit try catch, si jamais il y a un pepin):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
private void FrmIselControl_Load(object sender, EventArgs e)
{
try
{
//Opening the serial port
serialPort1.Open();
}
catch (Exception ex)
{
messageBox.Show(ex.Message);
}
} |
ensuite tu peux ecrire sur ton port serie, voila un petit exemple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| private void ecrirtureSurPort()
{
try
{
string msg = "salut Monsieur le port serie";
serialPort1.Write(msg);
}
catch (Exception ex)
{
messageBox.Show(ex.Message);
}
} |
Ensuite pour lire sur ton port serie, tu devra faire ceci:
-1)créer une methode datareceived qui prend en parametre le SerialDataReceivedEventArgs que tu as instancié au tout debut de ton code.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//string vide
string value = "";
//tant qu'il y a des données entrée on continue
while (serialPort1.BytesToRead > 0)
{
// on crée un char de 255 caractere
char[] buffer = new char[255];
//lecture du buffer jusqu'a sa longeur buffer.Length
int bytes_read = serialPort1.Read(buffer, 0, buffer.Length);
//on remplit notre string value
for (int i = 0; i < bytes_read; i++)
{
value += buffer[i];
}
}
safeInput(value.ToString());
} |
-2)créer une methode pour pouvoir ecrire sur les controle(c'est ce qui t'interresse) le port serie utilse un thread(fil d'execution) different du thread utilisé pour ecrire sur des controles, textbox..
c'est pour cela que tu devra invoker un delegate qui prend en parametre le message que tu lis du port serie. comme ceci:
Code:
1 2 3 4 5 6 7 8 9 10
| private void safeInput(string msg)
{
InputTextBox.Invoke(new EventHandler(delegate
{
InputTextBox.SelectedText = string.Empty;
InputTextBox.AppendText(msg.ToString());
InputTextBox.ScrollToCaret();
}
}));
} |
REMARQUE IMPORTANTE:
il se peut que les message envoyé ne soient pas interpretés par la machine avec laquelle vous communiquer, si cela arrive penser a mettre un carriage return \r ou une nouvelle ligne \n ou les deux \r\n, tout depend de la machine.
vous pouvez aussi utiliser readto et readexisting, (se renseigner sur msdn)
voila j'espere que ce message aidera nombreux d'entre vous.
bon courage.
Lasrevinu