none
¿como puedo leer dos datos del puerto serial? RRS feed

  • Pregunta

  • En un trabajo de la escuela me pidieron leer dos datos de unos potenciometros para poder manipular una grafica, para eso tengo que separar los dos datos por el puerto seria y asignarlo a dos diferentes text box.  el prblema con el que me estoy encontrando es el que no puedo puedo separar los datos que se envian por el puerto serial. el programa no me marca errores pero al momento de correrlo este me manda error cuando asigno un dato del array  al text boxx... espero me puedas ayudar!, gracias de ante mano. 
     ECUACION_DE_LA_RECTA DIBUJAR = new ECUACION_DE_LA_RECTA();
            
            System.IO.Ports.SerialPort ARDUINO;
            string recibirdatos;
           
            public Form1()
            {
                InitializeComponent();
                ARDUINO =new System.IO.Ports.SerialPort ();
                ARDUINO.PortName = "COM3";
                ARDUINO.BaudRate = 9600;
                ARDUINO.Open();
                ARDUINO.DataReceived += new
                    System.IO.Ports.SerialDataReceivedEventHandler(Recibir);
                
               //txt_datox.Text = "0";
               // txt_dato_y.Text = "0";
    
            }
          private void Recibir(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                recibirdatos += ARDUINO.ReadExisting();
               
                string[] arddata = recibirdatos.Split(';');
                
                txt_datox.Text =arddata[0] ;
                txt_dato_y.Text = arddata[1];
    
    
    
            }
    
            private void btn_dibujar_Click(object sender, EventArgs e)
            {
    
                DIBUJAR.pvalor_m(int.Parse(txt_datox.Text));
                DIBUJAR.pvalor_b(int.Parse(txt_dato_y.Text));
                DIBUJAR.pvalor_x(int.Parse(txt_value.Text));
                DIBUJAR.Coordenadas(ptb_grafica);
            }


    • Editado POOL12 jueves, 11 de febrero de 2021 21:35
    jueves, 11 de febrero de 2021 21:20

Respuestas

  • Casi seguro que el error está aquí:

    recibirdatos += ARDUINO.ReadExisting();

    Probablemente piensas que eso lee TODOS los datos. No es así. Solo lee los datos que hasta el momento se hayan almacenado en el buffer de la UART. Tienes que seguirlo llamando repetidamente hasta que se hayan recibido todos los caracteres que esperabas recibir por el puerto serie. Y llegados a ese punto entonces ya puedes hacer el Split para trocearlo y examinar las partes.

    • Marcado como respuesta POOL12 lunes, 15 de febrero de 2021 17:48
    jueves, 11 de febrero de 2021 21:45
    Moderador
  •  voy a buscar esos conceptos de buffer y UART JEJE...  

    No te preocupes mucho; a efectos de programación no tienen importancia. Se refieren al funcionamiento físico del puerto serie. La UART es el circuito electrónico que recibe las señales eléctricas del puerto serie (quiere decir "Universal Asynchronuous Receiver Transmitter). Ese chip, en los primeros PCs hace más 30 años, generaba una interrupción a la CPU por cada uno de los bytes que recibía. Esto impedía recibir a alta velocidad, porque la CPU no era capaz de gestionar tantas interrupciones a la velocidad requerida. Entonces, en otros chips más modernos les pusieron un área de almacenamiento, que es lo que he llamado "buffer", de forma que podían ir almacenando ahí varios bytes (hasta 16 como máximo en las primeras versiones) y de esa manera la CPU no necesitaba atender al puerto por cada carácter, sino que bastaba con que lo hiciese lo suficientemente rápido como para que no se hubiese agotado el espacio del buffer.

    Bien, pues eso es lo que hace el método ReadExisting de la clase SerialPort: te devuelve lo que se haya acumulado hasta ese momento en el buffer. Normalmente no será todo lo que va a enviar el dispositivo externo, que en ese momento todavía estará enviando más bytes.

    • Marcado como respuesta POOL12 lunes, 15 de febrero de 2021 17:46
    viernes, 12 de febrero de 2021 8:57
    Moderador
  • 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.

    • Marcado como respuesta POOL12 lunes, 15 de febrero de 2021 17:46
    viernes, 12 de febrero de 2021 15:11
    Moderador
  • Hola:

    Cualquier tema del puerto serie, aquí.

    Buenas:

    Hecho en C++ con Arduino, puedes hacerlo entre dos PC.

    Tutorial Arduino c++ y puerto serie

    Lo mismo pero con .net. Lenguajes C#, C++ CLR y Visual Basic en modo consola.

    Tutorial Arduino consola y puerto serie.

    Para los que quieran controlar el puerto paralelo hoy en día.

    Interfaz puerto paralelo LPT.

    Saludos.


    http://electronica-pic.blogspot.com

    • Marcado como respuesta POOL12 lunes, 15 de febrero de 2021 17:46
    viernes, 12 de febrero de 2021 21:54
  • En un trabajo de la escuela me pidieron leer dos datos de unos potenciometros para poder manipular una grafica, para eso tengo que separar los dos datos por el puerto seria y asignarlo a dos diferentes text box.  el prblema con el que me estoy encontrando es el que no puedo puedo separar los datos que se envian por el puerto serial. el programa no me marca errores pero al momento de correrlo este me manda error cuando asigno un dato del array  al text boxx... espero me puedas ayudar!, gracias de ante mano. 
     ECUACION_DE_LA_RECTA DIBUJAR = new ECUACION_DE_LA_RECTA();
            
            System.IO.Ports.SerialPort ARDUINO;
            string recibirdatos;
           
            public Form1()
            {
                InitializeComponent();
                ARDUINO =new System.IO.Ports.SerialPort ();
                ARDUINO.PortName = "COM3";
                ARDUINO.BaudRate = 9600;
                ARDUINO.Open();
                ARDUINO.DataReceived += new
                    System.IO.Ports.SerialDataReceivedEventHandler(Recibir);
                
               //txt_datox.Text = "0";
               // txt_dato_y.Text = "0";
    
            }
          private void Recibir(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                recibirdatos += ARDUINO.ReadExisting();
               
                string[] arddata = recibirdatos.Split(';');
                
                txt_datox.Text =arddata[0] ;
                txt_dato_y.Text = arddata[1];
    
    
    
            }
    
            private void btn_dibujar_Click(object sender, EventArgs e)
            {
    
                DIBUJAR.pvalor_m(int.Parse(txt_datox.Text));
                DIBUJAR.pvalor_b(int.Parse(txt_dato_y.Text));
                DIBUJAR.pvalor_x(int.Parse(txt_value.Text));
                DIBUJAR.Coordenadas(ptb_grafica);
            }


    Hola:

    Puedes usar delimitdores. Puedes poner un ejemplo de cada potenciómetro que envías por el puerto serie desde Arduino.

    Es bueno que lo envíes alternativamente un dato del potenciómetro 1 y luego el 2 alternativamente cada cierto tiempo separados por comas.

    Ya que el potenciómetro usa del 0 al 1023 en datos numéricos. Es bueno saber que datos es el primer potenciómetro y el segundo, por ejemplo.

    P1#723.

    P1# Corresponde al potenciómetro 1 y la #, después de ella corresponde los valores del 0 al 1023 que tiene Arduino al enviar datos por el puerto serie.

    Ejemplo de P1 se queda fijo y varía el P2 por cada tramo enviado.

    P1#710,P2#17,P1#710,P2#18,P1#710,P2#19,P1#710,P2#20,P1#710,P2#21,P1#710,P2#22,P1#710,P2#23

    Usa delimitadores para separar las comas y dintinguir P1# con el P2#.

    https://docs.microsoft.com/es-es/dotnet/csharp/how-to/parse-strings-using-split

    Me imagino que quieres algo así:

    Saludos.


    http://electronica-pic.blogspot.com


    • Editado Metaconta sábado, 13 de febrero de 2021 20:42
    • Marcado como respuesta POOL12 lunes, 15 de febrero de 2021 18:15
    sábado, 13 de febrero de 2021 18:08
  • Un ejemplo.

    Visual C#:

    using System;
    using System.IO.Ports;
    using System.Windows.Forms;
    
    namespace Dos_potenciometro_Arduino_01
    {
        public partial class Form1 : Form
        {
            // Utilizaremos un string como buffer de recepción.
            string Recibidos;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            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.
                serialPort.PortName = comboBox_Puerto.Text.ToString();
    
                serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
            }
    
            // 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
                {
                    serialPort.PortName = comboBox_Puerto.Text.ToString(); // Puerto seleccionado previamente.
                    serialPort.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)
            {
                serialPort.Close(); // Cerrar puerto.
                comboBox_Puerto.Enabled = true;
                button_Conectar.Enabled = true;
                button_Desconectar.Enabled = false;
            }
    
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (serialPort.IsOpen) // ¿El puerto está abierto?
                {
                    serialPort.Close(); // Cerrar puerto.
                }
            }
    
            // Al recibir datos.
            private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                // Acumula los caracteres recibidos a nuestro 'buffer' (string).
                Recibidos += serialPort.ReadExisting();
    
                // Invocar o llamar al proceso de tramas.
                Invoke(new EventHandler(Actualizar));
            }
    
            private void Actualizar(object sender, EventArgs e)
            {
                string[] datosArray = Recibidos.Split(char.Parse(","));
    
                if (datosArray.Length == 2)
                {
                    textBox_Potenciometro_1.Text = datosArray[0];
                    textBox_Potenciometro_2.Text = datosArray[1];
                }
    
                // Limpiar buffer.
                Recibidos = "";
            }
        }

    Arduino:

    int pin1 = A1;
    int pin2 = A2;
    int valorPot1 = 0;
    int valorPot2 = 0;
    
    void setup()
    {
      Serial.begin(115200);
      pinMode(pin1, INPUT);
      pinMode(pin2, INPUT);
    }
    
    void loop()
    {
      valorPot1 = analogRead(pin1);
      valorPot2 = analogRead(pin2);
    
      Serial.print(valorPot1);
      Serial.print(",");
      Serial.print(valorPot2);
      Serial.flush();
      delay(100); // 100 mili segundos o 0.1 segundos..
    }

    Si das señales de vida, al menos puedes responder si te funciona.

    Saludos.


    http://electronica-pic.blogspot.com

    • Marcado como respuesta POOL12 lunes, 15 de febrero de 2021 17:46
    domingo, 14 de febrero de 2021 21:59

Todas las respuestas

  • Casi seguro que el error está aquí:

    recibirdatos += ARDUINO.ReadExisting();

    Probablemente piensas que eso lee TODOS los datos. No es así. Solo lee los datos que hasta el momento se hayan almacenado en el buffer de la UART. Tienes que seguirlo llamando repetidamente hasta que se hayan recibido todos los caracteres que esperabas recibir por el puerto serie. Y llegados a ese punto entonces ya puedes hacer el Split para trocearlo y examinar las partes.

    • Marcado como respuesta POOL12 lunes, 15 de febrero de 2021 17:48
    jueves, 11 de febrero de 2021 21:45
    Moderador
  • muchas gracias, si, la verdad no estoy muy familiarizado con visual studio soy principiante, estuve investigando la funcion split pero aun no la comprendo muy bien y me puse a probar, ahora voy a buscar esos conceptos de buffer y UART JEJE...

     
    • Editado POOL12 jueves, 11 de febrero de 2021 22:01
    jueves, 11 de febrero de 2021 22:01
  •  voy a buscar esos conceptos de buffer y UART JEJE...  

    No te preocupes mucho; a efectos de programación no tienen importancia. Se refieren al funcionamiento físico del puerto serie. La UART es el circuito electrónico que recibe las señales eléctricas del puerto serie (quiere decir "Universal Asynchronuous Receiver Transmitter). Ese chip, en los primeros PCs hace más 30 años, generaba una interrupción a la CPU por cada uno de los bytes que recibía. Esto impedía recibir a alta velocidad, porque la CPU no era capaz de gestionar tantas interrupciones a la velocidad requerida. Entonces, en otros chips más modernos les pusieron un área de almacenamiento, que es lo que he llamado "buffer", de forma que podían ir almacenando ahí varios bytes (hasta 16 como máximo en las primeras versiones) y de esa manera la CPU no necesitaba atender al puerto por cada carácter, sino que bastaba con que lo hiciese lo suficientemente rápido como para que no se hubiese agotado el espacio del buffer.

    Bien, pues eso es lo que hace el método ReadExisting de la clase SerialPort: te devuelve lo que se haya acumulado hasta ese momento en el buffer. Normalmente no será todo lo que va a enviar el dispositivo externo, que en ese momento todavía estará enviando más bytes.

    • Marcado como respuesta POOL12 lunes, 15 de febrero de 2021 17:46
    viernes, 12 de febrero de 2021 8:57
    Moderador
  • 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.

    • Marcado como respuesta POOL12 lunes, 15 de febrero de 2021 17:46
    viernes, 12 de febrero de 2021 15:11
    Moderador
  • Hola:

    Cualquier tema del puerto serie, aquí.

    Buenas:

    Hecho en C++ con Arduino, puedes hacerlo entre dos PC.

    Tutorial Arduino c++ y puerto serie

    Lo mismo pero con .net. Lenguajes C#, C++ CLR y Visual Basic en modo consola.

    Tutorial Arduino consola y puerto serie.

    Para los que quieran controlar el puerto paralelo hoy en día.

    Interfaz puerto paralelo LPT.

    Saludos.


    http://electronica-pic.blogspot.com

    • Marcado como respuesta POOL12 lunes, 15 de febrero de 2021 17:46
    viernes, 12 de febrero de 2021 21:54
  • En un trabajo de la escuela me pidieron leer dos datos de unos potenciometros para poder manipular una grafica, para eso tengo que separar los dos datos por el puerto seria y asignarlo a dos diferentes text box.  el prblema con el que me estoy encontrando es el que no puedo puedo separar los datos que se envian por el puerto serial. el programa no me marca errores pero al momento de correrlo este me manda error cuando asigno un dato del array  al text boxx... espero me puedas ayudar!, gracias de ante mano. 
     ECUACION_DE_LA_RECTA DIBUJAR = new ECUACION_DE_LA_RECTA();
            
            System.IO.Ports.SerialPort ARDUINO;
            string recibirdatos;
           
            public Form1()
            {
                InitializeComponent();
                ARDUINO =new System.IO.Ports.SerialPort ();
                ARDUINO.PortName = "COM3";
                ARDUINO.BaudRate = 9600;
                ARDUINO.Open();
                ARDUINO.DataReceived += new
                    System.IO.Ports.SerialDataReceivedEventHandler(Recibir);
                
               //txt_datox.Text = "0";
               // txt_dato_y.Text = "0";
    
            }
          private void Recibir(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                recibirdatos += ARDUINO.ReadExisting();
               
                string[] arddata = recibirdatos.Split(';');
                
                txt_datox.Text =arddata[0] ;
                txt_dato_y.Text = arddata[1];
    
    
    
            }
    
            private void btn_dibujar_Click(object sender, EventArgs e)
            {
    
                DIBUJAR.pvalor_m(int.Parse(txt_datox.Text));
                DIBUJAR.pvalor_b(int.Parse(txt_dato_y.Text));
                DIBUJAR.pvalor_x(int.Parse(txt_value.Text));
                DIBUJAR.Coordenadas(ptb_grafica);
            }


    Hola:

    Puedes usar delimitdores. Puedes poner un ejemplo de cada potenciómetro que envías por el puerto serie desde Arduino.

    Es bueno que lo envíes alternativamente un dato del potenciómetro 1 y luego el 2 alternativamente cada cierto tiempo separados por comas.

    Ya que el potenciómetro usa del 0 al 1023 en datos numéricos. Es bueno saber que datos es el primer potenciómetro y el segundo, por ejemplo.

    P1#723.

    P1# Corresponde al potenciómetro 1 y la #, después de ella corresponde los valores del 0 al 1023 que tiene Arduino al enviar datos por el puerto serie.

    Ejemplo de P1 se queda fijo y varía el P2 por cada tramo enviado.

    P1#710,P2#17,P1#710,P2#18,P1#710,P2#19,P1#710,P2#20,P1#710,P2#21,P1#710,P2#22,P1#710,P2#23

    Usa delimitadores para separar las comas y dintinguir P1# con el P2#.

    https://docs.microsoft.com/es-es/dotnet/csharp/how-to/parse-strings-using-split

    Me imagino que quieres algo así:

    Saludos.


    http://electronica-pic.blogspot.com


    • Editado Metaconta sábado, 13 de febrero de 2021 20:42
    • Marcado como respuesta POOL12 lunes, 15 de febrero de 2021 18:15
    sábado, 13 de febrero de 2021 18:08
  • Un ejemplo.

    Visual C#:

    using System;
    using System.IO.Ports;
    using System.Windows.Forms;
    
    namespace Dos_potenciometro_Arduino_01
    {
        public partial class Form1 : Form
        {
            // Utilizaremos un string como buffer de recepción.
            string Recibidos;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            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.
                serialPort.PortName = comboBox_Puerto.Text.ToString();
    
                serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
            }
    
            // 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
                {
                    serialPort.PortName = comboBox_Puerto.Text.ToString(); // Puerto seleccionado previamente.
                    serialPort.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)
            {
                serialPort.Close(); // Cerrar puerto.
                comboBox_Puerto.Enabled = true;
                button_Conectar.Enabled = true;
                button_Desconectar.Enabled = false;
            }
    
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (serialPort.IsOpen) // ¿El puerto está abierto?
                {
                    serialPort.Close(); // Cerrar puerto.
                }
            }
    
            // Al recibir datos.
            private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                // Acumula los caracteres recibidos a nuestro 'buffer' (string).
                Recibidos += serialPort.ReadExisting();
    
                // Invocar o llamar al proceso de tramas.
                Invoke(new EventHandler(Actualizar));
            }
    
            private void Actualizar(object sender, EventArgs e)
            {
                string[] datosArray = Recibidos.Split(char.Parse(","));
    
                if (datosArray.Length == 2)
                {
                    textBox_Potenciometro_1.Text = datosArray[0];
                    textBox_Potenciometro_2.Text = datosArray[1];
                }
    
                // Limpiar buffer.
                Recibidos = "";
            }
        }

    Arduino:

    int pin1 = A1;
    int pin2 = A2;
    int valorPot1 = 0;
    int valorPot2 = 0;
    
    void setup()
    {
      Serial.begin(115200);
      pinMode(pin1, INPUT);
      pinMode(pin2, INPUT);
    }
    
    void loop()
    {
      valorPot1 = analogRead(pin1);
      valorPot2 = analogRead(pin2);
    
      Serial.print(valorPot1);
      Serial.print(",");
      Serial.print(valorPot2);
      Serial.flush();
      delay(100); // 100 mili segundos o 0.1 segundos..
    }

    Si das señales de vida, al menos puedes responder si te funciona.

    Saludos.


    http://electronica-pic.blogspot.com

    • Marcado como respuesta POOL12 lunes, 15 de febrero de 2021 17:46
    domingo, 14 de febrero de 2021 21:59
  • Muchas gracias a todas la personas que se tomaron el tiempo de comentar, fueron de gran ayuda y a continuacion les anexo la forma en que lo resolvi.

    ARDUINO:

    //declaramos las entradas analogicas
    const byte Pot_m=A0;
    const byte Pot_b=A1;
    
    void setup() {
    Serial.begin(9600);//Iniciamos el Puerto Serial
    
    }
    
    void loop() {
      //if (Serial.available()) {
    
        Read_Value_m();
        Serial.print(":");
        Read_Value_b();
    Serial.println("");
    
    }
    
    void Read_Value_m(){
      int Value= analogRead(Pot_m);  // Lee la entrada analogica
      int Adapted_Value= map(Value,0,1024,-350,350); //adaptamos los datos
      //Serial.print("VALOR M: ");
      Serial.print( Adapted_Value);//imprimimos nuestro valor adaptado
      //Serial.println("");
      delay(200);
    }
    
    void Read_Value_b(){
      int Value= analogRead(Pot_b); //lee la entrada analogica
      int Adapted_Value= map(Value,0,1024,-350,350);//adaptamos los datos
      //Serial.print("VALOR B: ");
      Serial.print( Adapted_Value);// imprimimos nuestro valor adaptado
    //Serial.println("");
      delay(200);
    }

    C#:

    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 Ecuacion_de_la_recta_1._1
    {
        public partial class Form1 : Form
        {
    
            ECUACION_DE_LA_RECTA DIBUJAR = new ECUACION_DE_LA_RECTA();
    
            System.IO.Ports.SerialPort ARDUINO;
            //string recibirdatos;
    
            public Form1()
            {
                InitializeComponent();
                ARDUINO = new System.IO.Ports.SerialPort();
                ARDUINO.PortName = "COM4";
                ARDUINO.BaudRate = 9600;
                // ARDUINO.Open();
                ARDUINO.Open();
    
    
                //  ARDUINO.DataReceived += new
                //     System.IO.Ports.SerialDataReceivedEventHandler(Recibir);
    
                //txt_datox.Text = "0";
                // txt_dato_y.Text = "0";
                // recibirdatos += ARDUINO.ReadExisting();
            }
            private void Recibir(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
            }
    
            private void btn_dibujar_Click(object sender, EventArgs e)
            {
              //  ARDUINO.Open();
                timer1.Start();
            }
            private void ptb_decremento_x_Click(object sender, EventArgs e)
            {
                /* Double dato_X = Convert.ToDouble(txt_datox.Text);
                 Double Incrementox1 = dato_X - 1;
                 txt_datox.Text = Incrementox1.ToString();*/
            }
    
            private void ptb_incremento_x_Click(object sender, EventArgs e)
            {
                /*  Double dato_X = Convert.ToDouble(txt_datox.Text);
                  Double Incrementox1 = dato_X + 1;
                  txt_datox.Text = Incrementox1.ToString();*/
            }
    
            private void ptb_incremento_Y_Click(object sender, EventArgs e)
            {
                /* Double dato_Y = Convert.ToDouble(txt_datox.Text);
                 Double Incrementox1 = dato_Y + 1;
                 txt_dato_y.Text = Incrementox1.ToString();*/
            }
    
            private void ptb_decremento_y_Click(object sender, EventArgs e)
            {
                /*Double dato_Y = Convert.ToDouble(txt_datox.Text);
                Double Incrementox1 = dato_Y - 1;
                txt_dato_y.Text = Incrementox1.ToString();*/
            }
    
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (ARDUINO.IsOpen)
                    ARDUINO.Close();
                timer1.Stop();
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                if (ARDUINO.IsOpen)
                {
                    string recibirdatos = ARDUINO.ReadLine();
                    string[] arddata = recibirdatos.Split(':');
                    txt_datox.Text = arddata[0];
                    txt_dato_y.Text = arddata[1];
                  txt_value.Text = "-12";
                    DIBUJAR.pvalor_m(int.Parse(txt_datox.Text));
                    DIBUJAR.pvalor_b(int.Parse(txt_dato_y.Text));
                     DIBUJAR.pvalor_x(int.Parse(txt_value.Text));
                    DIBUJAR.Coordenadas(ptb_grafica);
                }
            }
        }
    }

      

    • Editado POOL12 lunes, 15 de febrero de 2021 18:46
    lunes, 15 de febrero de 2021 18:37
  • Felicidades.

    Como curiosidad.

    ¿Puedes poner una captura o mvarias sobre el proyecto?

    Me llama mucho la atención la gráfica que estás haciendo.

    Gracias.


    http://electronica-pic.blogspot.com

    lunes, 15 de febrero de 2021 20:35