none
No refresca la barra al volver a 0. RRS feed

  • Pregunta

  • Hola:

    Antes cuando mostraba los datos la pantalla de modo consola en C# parpadeada porque ponía el Console.Clear();

    Ahora uso las coordenadas donde supuestamente deben de parpadear cuando cambia el valor.

    Lo que le ocurre y quiero solucionar. Recibo datos de 0 a 1023, en el cual muestra la barra de progreso, cuando aumento de valor, la barra de progreso escrito en modo consola, aunmenta.

    Si bajo el valor, la barra de progreso no baja, se queda donde alcanzó su valor máximo.

    Quiero saber la forma de solucionarlo. Aquí abajo dejo el código.

    using System;
    using System.IO.Ports; // No olvidar.
    using System.IO;
    
    namespace Porcentaje_Barra_P_Serie_Consola_3_CS
    {
        class Program
        {
            public static string Recibidos = "";
            public static double Resultado_Porcentaje = 0;
            public static double Resultado_Voltios = 0;
            public static double Mitad_barra = 0;
    
    
            static void Main(string[] args)
            {
                string COM = "";
    
                // Tamaño ventana consola.
                Console.WindowWidth = 55; // X.
                Console.WindowHeight = 15; // Y.
                Console.Title = "Serial Port C# - v.02"; // Título de la ventana.
    
                SerialPort Puerto_serie;
    
                // Crear un nuevo objeto SerialPort con la configuración predeterminada.
                Puerto_serie = new SerialPort();
    
                // Configuración.
                Console.Write(@"
    Introduzca un número para seleccionar puerto COM.
    Por ejemplo el 4, sería COM4.
    
    Puerto: ");
                COM = Console.ReadLine(); // Escribir el número del puerto.
                Console.Clear();
    
                Puerto_serie.PortName = "COM" + COM; // Número del puerto serie.
    
    
                Puerto_serie.BaudRate = 115200; // Baudios.
                Puerto_serie.Parity = Parity.None; // Paridad.
                Puerto_serie.DataBits = 8; // Bits de datos.
                Puerto_serie.StopBits = StopBits.Two; // Bits de parada.
                Puerto_serie.Handshake = Handshake.None; // Control de flujo.
    
                // Establecer la lectura / escritura de los tiempos de espera.
                Puerto_serie.ReadTimeout = 500;
                Puerto_serie.WriteTimeout = 500;
    
                try
                {
                    Puerto_serie.Open(); // Abrir el puerto serie.
                }
    
                catch (IOException)
                {
                    Console.ForegroundColor = ConsoleColor.Red; // Texto en rojo.
                    Console.CursorVisible = false;
                    Console.SetCursorPosition(16, 6);
                    Console.WriteLine(@"El puerto " + Puerto_serie.PortName + @" no existe
                    o no lo encuentra.");
                }
    
                Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
    
                Console.Read();
                Puerto_serie.Close(); // Cerrar puerto.
            }
    
            private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    
            {
    
                try
                {
                    SerialPort sp = (SerialPort)sender;
                    Recibidos = sp.ReadExisting();
                    //Console.Clear();
    
                    Recibidos = Recibidos.Replace("\n\r", "");
    
                    int Variar_este_valor = Convert.ToInt32(Recibidos);
    
                    Resultado_Porcentaje = Variar_este_valor * (100.00 / 1023.00);
                    Resultado_Voltios = Variar_este_valor * (5.00 / 1023.00);
    
                    
                    Console.SetCursorPosition(0, 1);
                    Console.Write("Datos recibidos: ");
                    Console.SetCursorPosition(17, 1);
                    Console.Write("    ");
                    Console.SetCursorPosition(17, 1);
                    Console.Write(Recibidos);
    
                    
                    Console.SetCursorPosition(0, 3);
                    Console.Write("0 %                     50 %                   100 %");
                    Console.SetCursorPosition(0, 4);
                    Console.Write("┌────────────────────────┬───────────────────────┐");
                    Console.ForegroundColor = ConsoleColor.Yellow;
    
                    // Se dibide por dos la barra del porcentaje para que quepa decuadamente en la pantalla.
                    Mitad_barra = Resultado_Porcentaje / 2;
    
                    if (Mitad_barra > 50)
                    {
                        Mitad_barra = 50;
                    }
    
                    // Borrado de barra de progreso para actualizar después su posición actual.
                    Console.SetCursorPosition(0, 5);
                    //Console.WriteLine("                                                  ");
    
                    // Barra de progreso.
                    for (int i = 1; i <= Mitad_barra; i++)
                    {
                        Console.Write("█"); // Muestra ASCII 219 Dec y DB en Hex.
                    }
    
                    // Si sobre pasa 100, muestra # al final de la barra del porcentaje de color rojo.
                    if (Resultado_Porcentaje >= 100)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.Write("#");
                    }
    
                    Console.ForegroundColor = ConsoleColor.Gray; // Vuelve al color gris.
    
                    // Línea 7.
                    Console.SetCursorPosition(0, 7);
                    Console.Write("Porcentaje: ");
                    Console.SetCursorPosition(12, 7);
                    Console.Write("            ");
                    Console.SetCursorPosition(12, 7);
                    Console.Write(Resultado_Porcentaje.ToString("N0") + " %.");
    
                    // Línea 8.
                    Console.SetCursorPosition(0, 8);
                    Console.Write("Voltios: ");
                    Console.SetCursorPosition(12, 8);
                    Console.Write("            ");
                    Console.SetCursorPosition(12, 8);
                    Console.Write(Resultado_Voltios.ToString("N2") + " V.");
    
                }
    
                catch (FormatException)
                {
                    // Console.WriteLine("La cadena de entrada no tiene el formato correcto.");
                }
            }
        }
    }
    

    Saludos.


    http://electronica-pic.blogspot.com

    sábado, 28 de mayo de 2016 11:32

Respuestas

  • Ya me ha salido y me respondo a mi mismo.

    using System;
    using System.IO.Ports; // No olvidar.
    using System.IO;
    
    namespace Porcentaje_Barra_P_Serie_Consola_3_CS
    {
        class Program
        {
            public static string Recibidos = "";
            public static double Resultado_Porcentaje = 0;
            public static double Resultado_Voltios = 0;
            public static double Mitad_barra = 0;
    
    
            static void Main(string[] args)
            {
                string COM = "";
    
                // Tamaño ventana consola.
                Console.WindowWidth = 55; // X.
                Console.WindowHeight = 15; // Y.
                Console.Title = "Serial Port C# - v.02"; // Título de la ventana.
    
                SerialPort Puerto_serie;
    
                // Crear un nuevo objeto SerialPort con la configuración predeterminada.
                Puerto_serie = new SerialPort();
    
                // Configuración.
                Console.Write(@"
    Introduzca un número para seleccionar puerto COM.
    Por ejemplo el 4, sería COM4.
    
    Puerto: ");
                COM = Console.ReadLine(); // Escribir el número del puerto.
                Console.Clear();
    
                Puerto_serie.PortName = "COM" + COM; // Número del puerto serie.
    
    
                Puerto_serie.BaudRate = 115200; // Baudios.
                Puerto_serie.Parity = Parity.None; // Paridad.
                Puerto_serie.DataBits = 8; // Bits de datos.
                Puerto_serie.StopBits = StopBits.Two; // Bits de parada.
                Puerto_serie.Handshake = Handshake.None; // Control de flujo.
    
                // Establecer la lectura / escritura de los tiempos de espera.
                Puerto_serie.ReadTimeout = 500;
                Puerto_serie.WriteTimeout = 500;
    
                try
                {
                    Puerto_serie.Open(); // Abrir el puerto serie.
                }
    
                catch (IOException)
                {
                    Console.ForegroundColor = ConsoleColor.Red; // Texto en rojo.
                    Console.CursorVisible = false;
                    Console.SetCursorPosition(16, 6);
                    Console.WriteLine(@"El puerto " + Puerto_serie.PortName + @" no existe
                    o no lo encuentra.");
                }
    
                Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
    
                Console.Read();
                Puerto_serie.Close(); // Cerrar puerto.
            }
    
            private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    
            {
    
                try
                {
                    SerialPort sp = (SerialPort)sender;
                    Recibidos = sp.ReadExisting();
                    //Console.Clear();
    
                    Recibidos = Recibidos.Replace("\n\r", "");
    
                    int Variar_este_valor = Convert.ToInt32(Recibidos);
    
                    Resultado_Porcentaje = Variar_este_valor * (100.00 / 1023.00);
                    Resultado_Voltios = Variar_este_valor * (5.00 / 1023.00);
    
                    
                    Console.SetCursorPosition(0, 1);
                    Console.Write("Datos recibidos: ");
                    Console.SetCursorPosition(17, 1);
                    Console.Write("    ");
                    Console.SetCursorPosition(17, 1);
                    Console.Write(Recibidos);
    
                    
                    Console.SetCursorPosition(0, 3);
                    Console.Write("0 %                     50 %                   100 %");
                    Console.SetCursorPosition(0, 4);
                    Console.Write("┌────────────────────────┬───────────────────────┐");
                    Console.Write("                                                  ");
                    Console.ForegroundColor = ConsoleColor.Yellow;
    
                    // Se dibide por dos la barra del porcentaje para que quepa decuadamente en la pantalla.
                    Mitad_barra = Resultado_Porcentaje / 2;
    
                    if (Mitad_barra > 50)
                    {
                        Mitad_barra = 50;
                    }
    
                    // Console.SetCursorPosition(0, 5);
                    ClearCurrentConsoleLine();
                    // Barra de progreso.
                    for (int i = 1; i <= Mitad_barra; i++)
                    {
                        Console.Write("█"); // Muestra ASCII 219 Dec y DB en Hex.
                    }
    
                    // Si sobre pasa 100, muestra # al final de la barra del porcentaje de color rojo.
                    if (Resultado_Porcentaje >= 100)
                    {
                        Console.SetCursorPosition(50, 5);
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.Write("#");
                    }
    
                    Console.ForegroundColor = ConsoleColor.Gray; // Vuelve al color gris.
    
                    // Línea 7.
                    Console.SetCursorPosition(0, 7);
                    Console.Write("Porcentaje: ");
                    Console.SetCursorPosition(12, 7);
                    Console.Write("            ");
                    Console.SetCursorPosition(12, 7);
                    Console.Write(Resultado_Porcentaje.ToString("N0") + " %.");
    
                    // Línea 8.
                    Console.SetCursorPosition(0, 8);
                    Console.Write("Voltios: ");
                    Console.SetCursorPosition(12, 8);
                    Console.Write("            ");
                    Console.SetCursorPosition(12, 8);
                    Console.Write(Resultado_Voltios.ToString("N2") + " V.");
    
                }
    
                catch (FormatException)
                {
                    // Console.WriteLine("La cadena de entrada no tiene el formato correcto.");
                    return;
                }
    
            }
    
            public static void ClearCurrentConsoleLine()
            {
                int currentLineCursor = Console.CursorTop;
                Console.SetCursorPosition(0, Console.CursorTop);
                Console.Write(new string(' ', Console.WindowWidth));
                Console.SetCursorPosition(0, currentLineCursor);
            }
        }
    }
    
    


    http://electronica-pic.blogspot.com

    • Marcado como respuesta Metaconta lunes, 30 de mayo de 2016 9:36
    lunes, 30 de mayo de 2016 9:36