Bonjour à tous!
J'ai créé un programme pour communiquer avec un capteur.
Celui-ci envoie les données par bluetooth que je récupère grâce a un port série virtuel.
J'arrive à ouvrir la liaison série, à lire et envoyer des données au capteur, ainsi que fermer la liaison.
Mon problème et lorsque que le capteur sous tension ou n'est pas détecté par bluetooth. Je voudrais que mon code lève une exception à ce moment mais il ne ce passe rien et mon code plante!
Voici mon code (les exceptions sont insérés a l'arrache juste pour tester quand elles sont levés):
Lorsque que je passe un mauvais port COM (inexistant sous windows) a ma classe SerialPortManager j'obtient bien la première exception de la méthode OpenSerialPort().
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 public class SerialPortManager { private SerialPort mySerialPort; // Constructor public SerialPortManager(string PortCOM,int baudrate,int dataBits) { mySerialPort = new SerialPort(PortCOM,baudrate,Parity.None,dataBits,StopBits.One); } public void OpenSerialPort() { try{ if (mySerialPort.IsOpen) { mySerialPort.Close(); } mySerialPort.Open(); mySerialPort.ReadTimeout = 1000; } catch(IOException e){ Console.WriteLine(e.Message); } } public bool CloseSerialPort() { mySerialPort.Close(); if(mySerialPort.IsOpen){ return false; } else{ return true; } } public int[] ReadDataOxymetre() { int[] packet = new int[125]; try{ //Code PIN du capteur pour bluetooth mySerialPort.Write("501217"); } catch(IOException e){ Console.WriteLine(e.Message); } for (int i=0; i<125; i++) { try{ packet[i] = mySerialPort.ReadByte(); Console.WriteLine(packet[i].ToString()); } catch(IOException e){ Console.WriteLine(e.Message); } } return packet; } public static void Main() { SerialPortManager spm = new SerialPortManager("COM7",9600,8); spm.OpenSerialPort(); int tab[] = new int[125]; tab = spm.ReadDataOxymetre(); spm.CloseSerialPort(); } }
Mais si je lui indique un port COM présent sous Windows (même si le recepteur n'est pas détecté) il ouvre quand même la liaison (l'exception n'est pas levé dans OpenSerialPort) et lorsque je tente d'écrire ou de lire sur le port COM le programme se bloque! Aucune exception n'est levée au niveau du Write et du ReadByte().
Si quelqu'un peut m'aider. Merci d'avance
Partager