Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

cho 2 timer chạy luân phiên (cứu-ko chạy đc)

20:19 02-04-2024 746 lượt xem 0 bình luận

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
using System.Runtime.Remoting.Metadata.W3cXsd2001;

namespace dk2mbnll_v2
{
    public partial class INTERFACE : Form
    {
        string ReceiveData = String.Empty;
        string TransmitData = String.Empty;

        int seconds1 = 30;
        int seconds2 = 30;

        public INTERFACE()
        {
            InitializeComponent();
        }

        private void INTERFACE_Load(object sender, EventArgs e)
        {
            string[] ports = SerialPort.GetPortNames();

            foreach (string port in ports)
            {
                Select_Com.Items.Add(port);
            }
        }

        private void INTERFACE_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult answer = MessageBox.Show("Bạn có muốn đóng giao diện ?", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (answer == DialogResult.No)
            {
                e.Cancel = true;
            }
            else
            {
                if (serialPort1.IsOpen)
                {
                    serialPort1.Close();
                }
            }
        }

        private void Select_Com_SelectedIndexChanged(object sender, EventArgs e)
        {
            serialPort1.PortName = Select_Com.Text;
        }

        private void Select_Com_Click(object sender, EventArgs e)
        {
            Select_Com.Items.Clear();
            string[] ports = SerialPort.GetPortNames();
            foreach (string port in ports)
            {
                Select_Com.Items.Add(port);
            }
        }

        private void but_Connect_Click(object sender, EventArgs e)
        {
            if (Select_Com.Text == "")
            {
                MessageBox.Show(" Chọn cổng COM. ", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                try
                {
                    if (serialPort1.IsOpen)
                    {
                        MessageBox.Show(" Cổng COM đã kết nối. ", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        serialPort1.Open();
                        CONNECT.BackColor = Color.LightGreen;
                        CONNECT.Text = " CONNECTING !";
                        MessageBox.Show(Select_Com.Text + " đã kết nối", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Select_Com.Enabled = false;
                        ReceiveData = String.Empty;
                        TransmitData = String.Empty;
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show(" Không tìm thấy cổng COM. Vui lòng kiểm tra lại. ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void but_Disconnect_Click(object sender, EventArgs e)
        {
            try
            {
                if (serialPort1.IsOpen)
                {
                    TransmitData = "c";
                    serialPort1.Write(TransmitData);
                    serialPort1.Close();
                    CONNECT.BackColor = Color.LightCoral;
                    CONNECT.Text = "Disconnected !";
                    timer1.Stop();
                    timer2.Stop();
                    MessageBox.Show("Đã ngắt kết nối cổng COM.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Select_Com.Enabled = true;
                    but_Auto.Enabled = true;
                }
                else
                {
                    MessageBox.Show("Cổng COM đã ngắt kết nối. Vui lòng kết nối lại.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Lỗi ngắt kết nối. Không thể ngắt kết nối.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void START_ON1_Click(object sender, EventArgs e)
        {
            try
            {
                if (serialPort1.IsOpen)
                {
                    TransmitData = "a";
                    serialPort1.Write(TransmitData);
                    but_Auto.Enabled = false;
                }
                else
                {
                    MessageBox.Show("Cổng COM đã ngắt kết nối. Vui lòng kết nối lại.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Lỗi ngắt kết nối. Không thể ngắt kết nối.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void START_ON2_Click(object sender, EventArgs e)
        {
            try
            {
                if (serialPort1.IsOpen)
                {
                    TransmitData = "b";
                    serialPort1.Write(TransmitData);
                    but_Auto.Enabled = false;
                }
                else
                {
                    MessageBox.Show("Cổng COM đã ngắt kết nối. Vui lòng kết nối lại.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Lỗi ngắt kết nối. Không thể ngắt kết nối.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void STOP_Click(object sender, EventArgs e)
        {
            try
            {
                if (serialPort1.IsOpen)
                {
                    TransmitData = "c";
                    serialPort1.Write(TransmitData);
                    but_Auto.Enabled = true;
                }
                else
                {
                    MessageBox.Show("Cổng COM đã ngắt kết nối. Vui lòng kết nối lại.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Lỗi ngắt kết nối. Không thể ngắt kết nối.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void but_Auto_Click(object sender, EventArgs e)
        {
            try
            {
                if (serialPort1.IsOpen)
                {
                    TransmitData = "d";
                    serialPort1.Write(TransmitData);
                    auto_on.BackColor = Color.SpringGreen;
                    auto_on.Text = "AUTO !";
                    START_ON1.Enabled = false;
                    START_ON2.Enabled = false;
                    STOP.Enabled = false;                  

                }

                else
                {
                    MessageBox.Show("Cổng COM đã ngắt kết nối. Vui lòng kết nối lại.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Lỗi ngắt kết nối. Không thể ngắt kết nối.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void STOP_ALL_Click(object sender, EventArgs e)
        {
            try
            {
                if (serialPort1.IsOpen)
                {
                    TransmitData = "c";
                    serialPort1.Write(TransmitData);
                    auto_on.BackColor = Color.IndianRed;
                    auto_on.Text = "AUTO !";
                    START_ON1.Enabled = true;
                    START_ON2.Enabled = true;
                    STOP.Enabled = true;
                    but_Auto.Enabled = true;
                    if (TransmitData == "c")
                    {
                        timer1.Stop();
                        timer2.Stop();
                    }
                }
                else
                {
                    MessageBox.Show("Cổng COM đã ngắt kết nối. Vui lòng kết nối lại.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Lỗi ngắt kết nối. Không thể ngắt kết nối.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Timer_textBox1.Text = seconds1--.ToString(); // khi timer1 đếm ngược
            if (seconds1 < 0) // nếu timer1 nhỏ hơn 0
            {                              
                TransmitData = "y";
                serialPort1.Write(TransmitData);
                timer1.Stop();
                timer2.Start(); //timer2 khởi động
            }

        }

        private void timer2_Tick(object sender, EventArgs e)
        {
            Timer_textBox2.Text = seconds2--.ToString(); //khi timer2 đếm ngược
            if (seconds2 < 0) // khi timer đếm về 0
            {
                TransmitData = "x";
                serialPort1.Write(TransmitData);
                timer2.Stop();
                timer1.Start();             
            }

        }

        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            ReceiveData = serialPort1.ReadExisting();
            this.Invoke(new EventHandler(DoUpDate));
        }

        private void DoUpDate(object sender, EventArgs e)
        {
            if (ReceiveData == "A")
            {
                picture_Motor1.Image = dk2mbnll_v2.Properties.Resources.fanon;
                pictureLed_Working1.Image = dk2mbnll_v2.Properties.Resources.ledon;
            }

            if (ReceiveData == "B")
            {
                picture_Motor2.Image = dk2mbnll_v2.Properties.Resources.fanon;
                pictureLed_Working2.Image = dk2mbnll_v2.Properties.Resources.ledon;
            }

            if (ReceiveData == "C")
            {
                picture_Motor1.Image = dk2mbnll_v2.Properties.Resources.fanoff;
                pictureLed_Working1.Image = dk2mbnll_v2.Properties.Resources.ledoff;
                picture_Motor2.Image = dk2mbnll_v2.Properties.Resources.fanoff;
                pictureLed_Working2.Image = dk2mbnll_v2.Properties.Resources.ledoff;
            }

            if (ReceiveData == "D")
            {
                picture_Motor1.Image = dk2mbnll_v2.Properties.Resources.fanon;
                pictureLed_Working1.Image = dk2mbnll_v2.Properties.Resources.ledon;
                picture_Motor2.Image = dk2mbnll_v2.Properties.Resources.fanon;
                pictureLed_Working2.Image = dk2mbnll_v2.Properties.Resources.ledon;
            }

            if (ReceiveData == "X")
            {
                picture_Motor1.Image = dk2mbnll_v2.Properties.Resources.fanon;
                pictureLed_Working1.Image = dk2mbnll_v2.Properties.Resources.ledon;
                picture_Motor2.Image = dk2mbnll_v2.Properties.Resources.fanoff;
                pictureLed_Working2.Image = dk2mbnll_v2.Properties.Resources.ledoff;
            }

            if (ReceiveData == "Y")
            {
                picture_Motor1.Image = dk2mbnll_v2.Properties.Resources.fanoff;
                pictureLed_Working1.Image = dk2mbnll_v2.Properties.Resources.ledoff;
                picture_Motor2.Image = dk2mbnll_v2.Properties.Resources.fanon;
                pictureLed_Working2.Image = dk2mbnll_v2.Properties.Resources.ledon;
            }

            if (ReceiveData == "z")
            {
                TransmitData = "x";
                serialPort1.Write(TransmitData);
                seconds1 = 30;
                timer1.Start();
                timer2.Stop();
            }   
        }
        
    }
}
 

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập

Câu hỏi mới nhất