none
Problema con la transferencia de datos, puerto serial RRS feed

  • Pregunta

  • Buenas tardes, tengo el siguiente inconveniente, estoy enviando y recibiendo datos por serial entre Arduino y VS, pero tengo un inconveniente cuando abro el puerto para efectuar la comunicación. A veces se inicia bien, logro trabajar con los datos, recibo los parámetros sin ningún problema, pero cuando cierro y vuelvo a abrir la interfaz los datos siguen llegando como si nunca hubiese cerrado el puerto. Para solucionar esto tengo que abrir el puerto con otro programa para que se haga el reset de los datos y luego volver a abrirlo normalmente. No sé cuál puede ser la falla :/, cualquier ayuda sería muy útil, muchas gracias.
    using System;
    using System.IO.Ports;
    using System.Windows.Forms;
    using System.Text;
    using System.IO;
    
    namespace Pruebas01
    {
        public partial class Form1 : Form
        {
            
            string dato_puerto;
            string puertoseleccionado;
            int contador2 = 0;
           
            public Form1()
            {
                InitializeComponent();
                string[] puertos = SerialPort.GetPortNames();
                foreach (string mostrar in puertos)
                {
                    comboBox1.Items.Add(mostrar);
                }
            }
            private void button1_Click(object sender, EventArgs e)
            {
                serialPort1.Close();
                serialPort1.Dispose();
                Close();
    
            }
    
            private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                serialPort1.Close();
                serialPort1.Dispose();
                puertoseleccionado = comboBox1.Text;
                serialPort1.PortName = puertoseleccionado;
                serialPort1.Open();
                CheckForIllegalCrossThreadCalls = false;
                rtbTexto.Clear();
    
            }
    
            
            private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
    
                // ESTO ESTÄ PERFECTO!! ; NO BORRAR!
                 dato_puerto = serialPort1.ReadExisting();
                 rtbTexto.AppendText(dato_puerto);
            }
    
    
            private void button3_Click(object sender, EventArgs e)
            {
    
                if (!serialPort1.IsOpen)
                {
                    MessageBox.Show("POR FAVOR, PRIMERO SELECCIONE EL PUERTO COM");
                }
                else
                {
                    serialPort1.WriteLine("600");
                    pictureBox1.Visible = false;
                    pictureBox2.Visible = true;
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                if (!serialPort1.IsOpen)
                {
                    MessageBox.Show("POR FAVOR, PRIMERO SELECCIONE EL PUERTO COM");
                }
                else
                {
                    serialPort1.WriteLine("500");
                    pictureBox1.Visible = true;
                    pictureBox2.Visible = false;
                } 
            }
    
            private void button6_Click_1(object sender, EventArgs e)
            {
    
                if (!serialPort1.IsOpen)
                {
                    MessageBox.Show("POR FAVOR, PRIMERO SELECCIONE EL PUERTO COM");
                }
                else
                {
                    label42.Visible = true;
                    contador2 = contador2 + 10;
                    label42.Text = " Valor =   " + (contador2.ToString());
                    if (contador2 >= 100)
                    {
                        contador2 = 100;
                    }
                }
           }
    
            private void button7_Click_1(object sender, EventArgs e)
            {
    
                if (!serialPort1.IsOpen)
                {
                    MessageBox.Show("POR FAVOR, PRIMERO SELECCIONE EL PUERTO COM");
                }
                else
                {
                    label42.Visible = true;
                    contador2 = contador2 - 10;
                    label42.Text = " Valor =   " + (contador2.ToString());
                    if (contador2 <= 0)
                    {
                        contador2 = 0;
                    }
    
                }
            }  
            private void button4_Click(object sender, EventArgs e)
            {
                serialPort1.Close();
                SaveFileDialog guardar = new SaveFileDialog();
                guardar.Filter = "Documento de texto|*.txt";
                guardar.Title = "Guardar RichTextBox";
                guardar.FileName = "sin titulo 1";
                var resultado = guardar.ShowDialog();
                if(resultado == DialogResult.OK)
                {
                    StreamWriter escribir = new StreamWriter(guardar.FileName);
                    foreach (object line in rtbTexto.Lines)
                    {
                        escribir.WriteLine(line);
                    }
                    escribir.Close();
                }
    
                button2.Enabled = false;
                button3.Enabled = false;
                button6.Enabled = false;
                button7.Enabled = false;
                Enviar_valor_VP.Enabled = false;
                button5_puerto.Visible = true;
            }
    
            private void Enviar_valor_VP_Click(object sender, EventArgs e)
            {
                if (!serialPort1.IsOpen)
                {
                    MessageBox.Show("POR FAVOR, PRIMERO SELECCIONE EL PUERTO COM");
                }
                else
                {
                    serialPort1.WriteLine(contador2.ToString());
                }
            } 
            private void button5_puerto_Click(object sender, EventArgs e)
            {
                serialPort1.Open();
                button2.Enabled = true;
                button3.Enabled = true;
                button6.Enabled = true;
                button7.Enabled = true;
                Enviar_valor_VP.Enabled = true;
                rtbTexto.Clear();
                button5_puerto.Visible = false;
            }
    
        
        }
    }


    martes, 17 de abril de 2018 15:18

Todas las respuestas

  • Hola:

    ¿Está Arduino enviando datos tengas o no abierto el formulario?

    ¿Puedes subir el código fuente de Arduino?

    Si está todo el rato enviando datos por el puerto serie desde Arduino, ahí está el posible problema, mejor que Arduino detecte cuando se abre el formulario, tal como se hacía antiguamente para evitar estas cosas.

    Saludos.


    http://electronica-pic.blogspot.com

    miércoles, 18 de abril de 2018 9:52