Bonjour,
J'ai un programme sur Arduino qui envoie des données(température et humidité) , j'enregistre l'ensemble sur carte SD. cela fonctionne bien. Par contre,
j'envoie aussi la température sur le port série et je remplis un datagrid et je crée un fichier Excel avec courbe après l'appui sur un bouton.
Le fichier se crée mais ensuite, j'ai de temps en temps une erreur lors de l'appui sur ce bouton qui crée le fichier Excel et ferme le port.
Voici un morceau de mon programme:
Image du résultat en cas d'erreur
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
71
72
73
74 private void Form1_Load(object sender, EventArgs e) { //on commence par lister les voies séries présentes String[] ports = SerialPort.GetPortNames(); //fonction statique //on ajoute les ports au combo box foreach (String s in ports) this.comboBox1.Items.Add(s); //on ajoute les vitesses au combo des vitesses this.comboBox2.Items.Add("300"); this.comboBox2.Items.Add("1200"); this.comboBox2.Items.Add("2400"); this.comboBox2.Items.Add("4800"); this.comboBox2.Items.Add("9600"); this.comboBox2.Items.Add("14400"); this.comboBox2.Items.Add("19200"); this.comboBox2.Items.Add("38400"); this.comboBox2.Items.Add("57600"); this.comboBox2.Items.Add("115200"); //valeurs par défaut comboBox1.SelectedIndex = 3; comboBox2.SelectedIndex = 4; this.myDelegate = new AddDataDelegate(AddDataMethod);// création d'un delegate pour ajout dans datagrid } void port() { if (!serialPort1.IsOpen) { serialPort1.PortName = this.comboBox1.SelectedItem.ToString();// Numéro du port serialPort1.BaudRate = int.Parse(this.comboBox2.SelectedItem.ToString());//9600; serialPort1.Parity = Parity.None; serialPort1.StopBits = StopBits.One; serialPort1.DataBits = 8; serialPort1.Handshake = Handshake.None; serialPort1.Open(); //modif inversée avec ligne du dessous serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); } } public void AddDataMethod(string myString) { string heure = DateTime.Now.ToString("HH"); string min = DateTime.Now.ToString("mm"); string enreg = heure + "H" + min; myString = myString.Replace("\r", ""); char[] sep = { ',' }; string[] tab = myString.Split(sep); dataGridView1.Rows.Add(enreg, tab[0],tab[1]); } private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { if (serialPort1.IsOpen) { SerialPort sp = (SerialPort)sender; string s = sp.ReadLine();// récupération des valeurs envoyées par Arduino LE PROGRAMMA BLOQUE ICI dataGridView1.Invoke(this.myDelegate, new object[] { s }); //passage par le délégé pour remplir datagridview1 qui n'a pas été créé dans ce thread } } private void button4_Click(object sender, EventArgs e) { EcrireFichierExcel(); //modif 15/4 if (serialPort1.BytesToRead == 0) { serialPort1.Close(); serialPort1.Dispose(); } //dodo(); Application.Exit(); }
MERCI D'AVANCE POUR TOUTE AIDE
Partager