Считывание нескольких значений данных из последовательного порта с помощью C#
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; namespace WindowsFormsApplication3 { public partial class Form1 : Form { string[] portlar = SerialPort.GetPortNames(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { foreach (string port in portlar) { comboBox1.Items.Add(port); comboBox1.SelectedIndex = 0; } comboBox2.Items.Add("4800"); comboBox2.Items.Add("9600"); comboBox2.SelectedIndex = 1; label2.Text = "Not connected"; } private void timer1_Tick(object sender, EventArgs e) { try { string sonuc = serialPort1.ReadLine(); string[] pot = sonuc.Split(','); label2.Text = sonuc + " "; textBox1.Text = pot[0]; textBox2.Text = pot[1]; textBox3.Text = pot[2]; textBox4.Text = pot[3]; serialPort1.DiscardInBuffer(); int b; int d; int f; int g; bool result = Int32.TryParse(pot[0], out b); bool answer = Int32.TryParse(pot[1], out d); bool result1 = Int32.TryParse(pot[2], out f); bool answer1 = Int32.TryParse(pot[3], out g); if (result) { if (b < 224) { button3.BackColor = Color.Red; label6.Text = " OCCUPIED"; } else { button3.BackColor = Color.Lime; label6.Text = " AVAILABLE"; } } if (answer) { if (d < 224) { button4.BackColor = Color.Red; label8.Text = " OCCUPIED"; } else { button4.BackColor = Color.Lime; label8.Text = " AVAILABLE"; } } if (result1) { if (f < 400) { button5.BackColor = Color.Red; label10.Text = " OCCUPIED"; } else { button5.BackColor = Color.Lime; label10.Text = " AVAILABLE"; } } if (answer1) { if (g < 400) { button6.BackColor = Color.Red; label12.Text = " OCCUPIED"; } else { button6.BackColor = Color.Lime; label12.Text = "AVAILABLE"; } } } catch (Exception ex) { MessageBox.Show(ex.Message); timer1.Stop(); } } private void button1_Click(object sender, EventArgs e) { timer1.Start(); if (serialPort1.IsOpen == false) { if(comboBox1.Text==" ") return; serialPort1.PortName = comboBox1.Text; serialPort1.BaudRate = Convert.ToInt16(comboBox2.Text); try { serialPort1.Open(); label2.Text = "baglanti acik "; } catch (Exception hata) { MessageBox.Show("Hata:"+ hata.Message); } } else { label2.Text = "baglanti kapali"; } } private void button2_Click(object sender, EventArgs e) { timer1.Stop(); serialPort1.DiscardInBuffer(); if (serialPort1.IsOpen==true) { serialPort1.Close(); label2.Text="baglanti kapali"; } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { if (serialPort1.IsOpen == true) { serialPort1.Close(); } } private void button3_Click(object sender, EventArgs e) { } private void label4_Click(object sender, EventArgs e) { } private void button6_Click(object sender, EventArgs e) { } } }
Что я уже пробовал:
я написал свой код на C#, и у меня возникли проблемы, потому что он очень медленно реагирует на считывание значений с датчиков для использования в моем проекте c#.Когда я выполняю свой код, он очень медленный, и если я пытаюсь остановить его с помощью кнопки 2, он не работает.Есть ли способ, которым я могу улучшить свою руку кода скорость
0x01AA
Остановите чтение последовательного порта с помощью таймера. Вы можете посмотреть здесь: Последовательная связь в C# для начинающих[^]
Кстати: сравнение булевых значений типа "thisBool == true" или "thisBool == false" выглядит как недостаток знаний о том, что такое булевые значения ;)
Member 13806674
Большое вам спасибо, что это сработало.
0x01AA
Добро пожаловать, рад, что это помогло