Как заставить две формы получать информацию от последовательного порта, который получает информацию от Arduino? - PullRequest
0 голосов
/ 31 марта 2020

Я разрабатываю графический интерфейс, который считывает переменные от разных датчиков, поступающих через последовательный порт, до сих пор мне удалось прочитать все переменные в одной форме, но теперь я хочу иметь две формы.

Первая форма просит пользователя выбрать COM и подтверждает, было ли соединение успешным или нет. Как только соединение установлено, открывается вторая форма, где переменные от датчиков будут показаны в «метках», показания, отправленные с Arduino, будут считаны последовательным портом и сохранены в массиве:

data [0], data [1], data [2] et c ...

Это первая форма, где Serialport1 найден и данные поступают через событие serialPort1_DataReceived:

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.Ports;
using System.Media;

namespace AUTOCLAVES_GUI
{
    public partial class GUI_AUTOCLAVES_GENERADOR_DE_VAPOR : Form
    {
        /*VARIABLES GLOBALES*/
        string puerto_seleccionado;

        public GUI_AUTOCLAVES_GENERADOR_DE_VAPOR()
        {
            InitializeComponent();
            string[] puertos = SerialPort.GetPortNames();
            foreach (string mostrar in puertos)
            {
                comboBox1.Items.Add(mostrar);
            }
        }

        private void Salir_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void Minimizar_Click(object sender, EventArgs e)
        {
            WindowState = FormWindowState.Minimized;
        }

        private void Maximizar_Click(object sender, EventArgs e)
        {
            WindowState = FormWindowState.Maximized;
            Maximizar.Visible = false;
            Restaurar.Visible = true;
        }

        private void Restaurar_Click(object sender, EventArgs e)
        {
            WindowState = FormWindowState.Normal;
            Restaurar.Visible = false;
            Maximizar.Visible = true;
        }

        private void MenuSideBar_Click(object sender, EventArgs e)
        {
            if (Sidebar.Width == 270)
            {
                Sidebar.Visible = false;
                Sidebar.Width = 68;
                SidebarWrapper.Width = 90;
                LineaSidebar.Width = 68;
                AnimacionSidebar.Show(Sidebar);
            }

            else
            {
                Sidebar.Visible = false;
                Sidebar.Width = 270;
                SidebarWrapper.Width = 300;
                LineaSidebar.Width = 268;
                AnimacionSidebarBack.Show(Sidebar);
            }
        }

        private void bunifuFlatButton8_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Close();
                serialPort1.Dispose();
                serialPort1.Open();
                CheckForIllegalCrossThreadCalls = false;
                label2.Text = "CONEXIÓN EXITOSA";
                label2.ForeColor = Color.Green;
                label2.Font = new Font(label2.Font, FontStyle.Bold);
                openChildForm(new MUESTREO_EN_TIEMPO_REAL());
            }

            catch
            {
                label2.Text = "CONEXIÓN FALLIDA";
                label2.ForeColor = Color.Red;
                label2.Font = new Font(label2.Font, FontStyle.Bold);
                MessageBox.Show("REVISE CONEXIÓN DE ARDUINO", "ADVERTENCIA", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
            }
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            puerto_seleccionado = comboBox1.Text;
            serialPort1.PortName = puerto_seleccionado;
        }

        private void bunifuFlatButton7_Click(object sender, EventArgs e)
        {
            comboBox1.Items.Clear();
            label2.Text = "SIN CONEXIÓN";
            label2.ForeColor = Color.White;
            string[] puertos = SerialPort.GetPortNames();
            foreach (string mostrar in puertos)
            {
                comboBox1.Items.Add(mostrar);
            }
        }

        private Form activeForm = null;
        private void openChildForm(Form childForm)
        {
            if (activeForm != null)
                activeForm.Close();
            activeForm = childForm;
            childForm.TopLevel = false;
            childForm.FormBorderStyle = FormBorderStyle.None;
            childForm.Dock = DockStyle.Fill;
            panel1.Controls.Add(childForm);
            panel1.Tag = childForm;
            childForm.BringToFront();
            childForm.Show();
        }

        private void bunifuFlatButton2_Click(object sender, EventArgs e)
        {
            openChildForm(new MUESTREO_EN_TIEMPO_REAL());
        }

        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string[] data = serialPort1.ReadLine().Split(',');

            if (data.Length > 10)
            {

            }

            else
            {
                MessageBox.Show("Intente nuevamente", "ADVERTENCIA", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
            }
        }
    }
}

Вот моя вторая форма:

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;

namespace AUTOCLAVES_GUI 
{
    public partial class MUESTREO_EN_TIEMPO_REAL : Form
    {
        public MUESTREO_EN_TIEMPO_REAL()
        {
            InitializeComponent();
        }

        private void MUESTREO_EN_TIEMPO_REAL_Load(object sender, EventArgs e)
        {

        }

        private void Salir_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

Я надеюсь, что кто-то может помочь мне решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...