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);
}
}
}