none
Convertir tipo de datos para poder leer y enviar RRS feed

  • Pregunta

  • Hola:

    Tengo este código.

                            byte[] miBuffer2 = Encoding.ASCII.GetBytes("Luz_OFF");
                            Puerto_serie.Write(miBuffer2, 0, miBuffer2.Length);
                            Console.WriteLine("Comando \"Luz_OFF\" enviado.");

    Esta palabra :

    Luz_OFF

    Se envía al puerto serie, como se puede ver, es yn array tipo byte[].

    El problema que cuando en consola C# me pide que introduzca Luz_OFF al escribirlo, debo almacenarlo en un string, luego convertirlo a byte[] para poder enviarlo al puerto serie.

    Por ejemplo básico.

    using System;
    
    class Ejemplo
    {
       public static void Main(string[] args)
       {
          Console.WriteLine("Introduzca un texto");
          String texto;
          texto=Console.ReadLine();
          Console.WriteLine("El texto introducido es: " + texto);
       }
    }

    ¿Se puede arreglar ese problema?

    Saludos.


    http://electronica-pic.blogspot.com

    martes, 28 de julio de 2020 14:06

Todas las respuestas

  • hola

    >>¿Se puede arreglar ese problema?

    cual problema ? el serial port permite enviar string

    SerialPort.Write(String)

    si quieres enviar un string

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 28 de julio de 2020 14:29
  • Hola:

    Me alegro que se pueda.

    ¿Un ejemplo de que le programa te pida que escribas un texto?

    Pulsas Enter y lo envías al puerto serie.

    using System;
    
    class Ejemplo
    {
       public static void Main(string[] args)
       {
          Console.WriteLine("Introduzca un texto");
          String texto;
          texto=Console.ReadLine();
          Console.WriteLine("El texto introducido es: " + texto);
       }
    }

    Par enviar texto por de string

    Puerto_serie.Write(texto);

    Con el programa de abajo se envía los textos que yo quiera. No mefunciona la manera que yo quiero. Por ejemplo, quiero que sea ASCII y sobre todo, desde que escriba la palabra Led_13_ON, pulse Enter, se envíe esos datos.

    Tengo que pulsar dos veces Enter para que me haga caso, solo el diseño está mal hecho.

    using System;
    using System.IO.Ports;
    
    namespace Introducir_datos_puerto_serie_consola_01
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Título de la ventana.
                Console.Title = "Enviar datos al puerto serie";
    
                // Tamaño de la ventana, x, y.
                Console.SetWindowSize(50, 25);
    
                // Fondo gris.
                Console.BackgroundColor = ConsoleColor.Gray;
    
                // Letras negras.
                Console.ForegroundColor = ConsoleColor.Black;
    
                // Limpiar pantalla y dejarlo todo gris.
                Console.Clear();
    
                // Visible el cursor.
                Console.CursorVisible = true;
    
                // Cree un nuevo objeto SerialPort con la configuración predeterminada.
                SerialPort Puerto_serie = new SerialPort("COM3");
    
                Puerto_serie.BaudRate = 115200;
                Puerto_serie.Parity = Parity.None;
                Puerto_serie.StopBits = StopBits.One;
                Puerto_serie.DataBits = 8;
                Puerto_serie.Handshake = Handshake.None;
                Puerto_serie.RtsEnable = true;
    
                // Establecer los tiempos de espera de lectura / escritura.
                Puerto_serie.ReadTimeout = 500; // Milisegundos.
                Puerto_serie.WriteTimeout = 500;
    
                // Detecta cualquier dato recibido.
                Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
    
                Puerto_serie.Open(); // Abrir puerto.
    
    
                Console.WriteLine("Introduzca un texto: ");
                string texto;
                texto = Console.ReadLine();
                Console.WriteLine("El texto introducido es: " + texto);
    
                ConsoleKey tecla;
                Console.WriteLine("Pulse tecla 1 para encender y 2 para apagar:");
    
                do
                {
                    tecla = Console.ReadKey(true).Key; // Espera pulsación de teclas.
    
                    switch (tecla)
                    {
                        case ConsoleKey.Enter:
                            //texto = Encoding.ASCII.GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
                            Puerto_serie.Write(texto); // Envía los datos del string todo su contenido.
                            Console.WriteLine("Comando {0} enviado.", texto); // Muestra en pantalla comandos enviado.
                            break;
                    }
                } while (tecla != ConsoleKey.Escape); // Pulsa Escape para salir del menú.
    
                Console.WriteLine("Presione cualquier tecla para terminar...");
                Console.WriteLine();
                Console.ReadKey(); // Espera pulsar una tecla cualquiera.
                Puerto_serie.Close(); // Cierra el puerto serie.
            }
    
            // Detecta cualquier dato entrante.
            private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
            {
                SerialPort sp = (SerialPort)sender;
                string entradaDatos = sp.ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
                Console.WriteLine("Dato recibido desde Arduino: " + entradaDatos); // Muestra en pantalla los datos recibidos.
            }
        }
    }
    Espero una mejoría.

    Saludos.


    http://electronica-pic.blogspot.com

    martes, 28 de julio de 2020 18:35