Hola:
Quiero mejorar el código si o si. En este caso el programa funciona de mil maravillas menos una cosa que no me gusta, a veces la pantalla parpadea, debido bajo mi punto de vista que hace refrezco.
Quiero consejos de como hacer que se refrezca los datos y la bara amarilla. Hacer mejor código.
El código original es este.
Código C++:
Ver originalusing System;
using System.IO.Ports; // No olvidar.
using System.IO;
namespace Porcentaje_Barra_P_Serie_Consola_2_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)
{
Console.WindowWidth = 55;
Console.WindowHeight = 15;
Console.Title = "Serial Port C#";
SerialPort Puerto_serie;
// Crear un nuevo objeto SerialPort con la configuración predeterminada.
Puerto_serie = new SerialPort();
// Configuración.
Puerto_serie.PortName = "COM4"; // 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;
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();
}
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
Recibidos = sp.ReadLine();
Console.Clear();
Recibidos = Recibidos.Replace("\n\r", "");
int Variar_este_valor = Convert.ToInt32(Recibidos);
Console.WriteLine();
Resultado_Porcentaje = Variar_este_valor * (100.00 / 1023.00);
Resultado_Voltios = Variar_este_valor * (5.00 / 1023.00);
//Console.Clear();
Console.WriteLine("Datos recibidos: {0}", Recibidos);
Console.CursorVisible = false;
// Mostrar barra de porcentaje en pantalla.
Console.WriteLine();
Console.WriteLine("0 % 50 % 100 %");
Console.WriteLine("┌────────────────────────┬───────────────────────┐");
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;
}
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.
Console.WriteLine("\n");
Console.Write("Percentage: " + Resultado_Porcentaje.ToString("N2") + " %.");
Console.WriteLine();
Console.Write("Voltage: " + Resultado_Voltios.ToString("N2") + " V.");
Console.WriteLine("\n");
}
}
}
¿Algún consejo?
Saludos.