none
Enviar datos por cada 100 ms RRS feed

  • Pregunta

  • Hola:

    Aquí muestro un ejemplo de que hay 6 trackBar que puedes calibar entre 0 a 1023 cada uno de ellos.

    Tiene que enviar por ejmplo este valor 0,1,2,3,4,5 por poner algún ejemplo y enviarlo por cada 100 ms al puerto serie.

    Ahora si toco el trackBar A0, pongo el valor 1023, entonces todos los demás se quedan así.

    1023,1,2,3,4,5

    Se envía cada trama por cada 100 ms que tiene en el formulario.

    El código base aún sin usar el puerto serie que no lo he programado es este.

    using System;
    using System.Windows.Forms;
    
    namespace Enviar_valores_0_a_1023_puerto_serie_01
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void trackBar1_Scroll(object sender, EventArgs e)
            {
                label1.Text = "" + trackBar1.Value;
            }
    
            private void trackBar2_Scroll(object sender, EventArgs e)
            {
                label2.Text = "" + trackBar2.Value;
            }
    
            private void trackBar3_Scroll(object sender, EventArgs e)
            {
                label3.Text = "" + trackBar3.Value;
            }
    
            private void trackBar4_Scroll(object sender, EventArgs e)
            {
                label4.Text = "" + trackBar4.Value;
            }
    
            private void trackBar5_Scroll(object sender, EventArgs e)
            {
                label5.Text = "" + trackBar5.Value;
            }
    
            private void trackBar6_Scroll(object sender, EventArgs e)
            {
                label6.Text = "" + trackBar6.Value;
            }
        }
    }
    

    ¿Alguna idea?

    Saludos.


    http://electronica-pic.blogspot.com

    lunes, 15 de febrero de 2021 21:50

Respuestas

  • Hola, puedes crear un Timer para enviar las tramas. El Timer puede ser de dos tipos (el de System.Windows.Forms o el de System.Threading)

    En tu caso puedes hacer el primero. En los enlaces que te he puesto hay ejemplos de uso. 



    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta Metaconta martes, 16 de febrero de 2021 22:05
    martes, 16 de febrero de 2021 8:00
    Moderador

Todas las respuestas

  • Hola,

    Gracias por levantar tu consulta en los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 15 de febrero de 2021 23:23
    Moderador
  • Hola, puedes crear un Timer para enviar las tramas. El Timer puede ser de dos tipos (el de System.Windows.Forms o el de System.Threading)

    En tu caso puedes hacer el primero. En los enlaces que te he puesto hay ejemplos de uso. 



    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta Metaconta martes, 16 de febrero de 2021 22:05
    martes, 16 de febrero de 2021 8:00
    Moderador
  • Por cada 100 ms, desde que actives el checkBox llamado Timer, se activa el Timer a true y tiene que enviar los datos almacenado de las variables al puerto serie, en este caso como indica los trackBar.

    324,746,22,29,1023,58

    Si modifico el trackBar por ejemplo llamado como infica el formulario A0 que actualmente pone 324, puedes escoger de 0 a 1023, solo se modifica ese datos, si lo queremos poner a 1000, pues el nuevo dato sería.

    1000,746,22,29,1023,58

    Por cada 100 ms envía valores al puerto serie, gracias al timer.

    Dejo el código completo y me falta la parte de enviar esos datos la mejor manera posible que no lo he hecho.

    Código C#:

    using System;
    using System.IO.Ports;
    using System.Windows.Forms;
    
    namespace Enviar_valores_0_a_1023_puerto_serie_01
    {
        public partial class Form1 : Form
        {
            // Variables.
            int potenciometro0 = 0;
            int potenciometro1 = 0;
            int potenciometro2 = 0;
            int potenciometro3 = 0;
            int potenciometro4 = 0;
            int potenciometro5 = 0;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void trackBar1_Scroll(object sender, EventArgs e)
            {
                potenciometro0 = int.Parse("" + trackBar1.Value);
                label1.Text = potenciometro0.ToString();
            }
    
            private void trackBar2_Scroll(object sender, EventArgs e)
            {
                potenciometro1 = int.Parse("" + trackBar2.Value);
                label2.Text = potenciometro1.ToString();
            }
    
            private void trackBar3_Scroll(object sender, EventArgs e)
            {
                potenciometro2 = int.Parse("" + trackBar3.Value);
                label3.Text = potenciometro2.ToString();
            }
    
            private void trackBar4_Scroll(object sender, EventArgs e)
            {
                potenciometro3 = int.Parse("" + trackBar4.Value);
                label4.Text = potenciometro3.ToString();
            }
    
            private void trackBar5_Scroll(object sender, EventArgs e)
            {
                potenciometro4 = int.Parse("" + trackBar5.Value);
                label5.Text = potenciometro4.ToString();
            }
    
            private void trackBar6_Scroll(object sender, EventArgs e)
            {
                potenciometro5 = int.Parse("" + trackBar6.Value);
                label6.Text = potenciometro5.ToString();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                // Añado los puertos disponible en el PC con SerialPort.GetPortNames() al comboBox_Puerto.
                try
                {
                    comboBox_Puerto.DataSource = SerialPort.GetPortNames();
                }
    
                catch
                {
                    MessageBox.Show("No encuentra ningún puerto físico ni virtual.", "Aviso:",
                        MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
    
                // Añado los puertos disponible en el PC con SerialPort.GetPortNames() al comboBox_Puerto.
                comboBox_Puerto.DataSource = SerialPort.GetPortNames();
    
                // // Añade puertos disponibles físicos  y virtuales.
                serialPort1.PortName = comboBox_Puerto.Text.ToString();
            }
    
            // Detecta USB o puerto serie virtual cuando lo conecta y desconecta del cable.
            protected override void WndProc(ref Message USB)
            {
                if (USB.Msg == 0x219)
                {
                    comboBox_Puerto.DataSource = SerialPort.GetPortNames();
                }
    
                base.WndProc(ref USB); // Detecta si hay cambios en el usb y si los hay los refleja.
            }
    
            private void button_Conectar_Click(object sender, EventArgs e)
            {
                try
                {
                    serialPort1.PortName = comboBox_Puerto.Text.ToString(); // Puerto seleccionado previamente.
                    serialPort1.Open(); // Abrir puerto.
                    comboBox_Puerto.Enabled = false;
                    button_Conectar.Enabled = false;
                    button_Desconectar.Enabled = true;
                }
                catch
                {
                    MessageBox.Show("El puerto no existe.", "Aviso:",
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
    
            private void button_Desconectar_Click(object sender, EventArgs e)
            {
                serialPort1.Close(); // Cerrar puerto.
                comboBox_Puerto.Enabled = true;
                button_Conectar.Enabled = true;
                button_Desconectar.Enabled = false;
            }
    
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (serialPort1.IsOpen) // ¿El puerto está abierto?
                {
                    serialPort1.Close(); // Cerrar puerto.
                }
            }
    
            private void checkBox_Timer_CheckedChanged(object sender, EventArgs e)
            {
                // Si el chequeo está marcado.
                if (checkBox_Timer.Checked == true)
                {
                    timer1.Enabled = true; // Activa el timer.
                }
    
                else // En caso contrario.
                {
                    timer1.Enabled = false; // Desactiva el timer.
                }
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                // AÑADIR CÓDIGOS...
            }
        }
    }

    Saludos.


    http://electronica-pic.blogspot.com

    martes, 16 de febrero de 2021 21:07
  • Hola, cual es la duda que tienes ahora? No entendí, lo siento. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 16 de febrero de 2021 21:53
    Moderador
  • Hecho, es este.

            private void timer1_Tick(object sender, EventArgs e)
            {
                byte[] miBuffer = Encoding.ASCII.GetBytes(potenciometro0 + "," + potenciometro1 + "," +
                    potenciometro2 + "," + potenciometro3 + "," + potenciometro4 + "," + potenciometro5);
                serialPort1.Write(miBuffer, 0, miBuffer.Length);
            }


    http://electronica-pic.blogspot.com

    martes, 16 de febrero de 2021 22:05