using System;
using System.IO;
using System.IO.Ports;
using System.Threading;
namespace Chat_consola_02
{
class Program
{
static bool _continua;
static SerialPort Puerto_serie;
static void Main(string[] args)
{
string COM = "";
string nombre;
string mensaje;
StringComparer comparaString = StringComparer.OrdinalIgnoreCase;
Thread readThread
= new Thread
(Leer
);
// Título de la ventana.
Console.Title = "Enviar datos al puerto serie";
// Tamaño de la ventana, x, y.
Console.SetWindowSize(70, 25);
// Color de fondo.
Console.BackgroundColor = ConsoleColor.Gray;
// Color de las letras.
Console.ForegroundColor = ConsoleColor.Black;
// Limpiar pantalla y dejarlo todo gris.
Console.Clear();
// Visible el cursor.
Console.CursorVisible = true;
// Crear un nuevo objeto SerialPort con la configuración predeterminada.
Puerto_serie
= new SerialPort
();
// Obtenga una lista de nombres de puertos serie.
string[] ports = SerialPort.GetPortNames();
Console.WriteLine("Se encontraron los siguientes puertos series:");
// Muestre el nombre de cada puerto en la consola.
foreach (string port in ports)
{
Console.WriteLine(port);
}
// 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.
// Configuración del puerto serie.
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; // 500 // Milisegundos.
Puerto_serie.WriteTimeout = 500; // 500
// Comprueba si puede abrir el puerto serie.
try
{
Puerto_serie.Open(); // Abrir el puerto serie.
}
// En caso que diera algún error como que no encuentra el puerto seleccionado
// muestra una excepción.
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.");
Console.ReadKey(); // Pulse cualquier tecla.
Environment.Exit(1); // Salir de la aplicación.
}
_continua = true;
readThread.Start();
// Mostrar texto Nombre y se
Console.Write("Nombre: ");
// guarda en la variable nombre.
nombre = Console.ReadLine();
Console.WriteLine("Escriba salir para salir");
while (_continua)
{
// Cualquier caracter recibido se guarda en la variable mensaje.
mensaje = Console.ReadLine();
// Compara salir con el mensaje salir si lo haz escrito igual.
// ¿Escribiste la palabra salir?
if (comparaString.Equals("salir", mensaje))
{
// Sí. Entonces, pone esta variable _continue en false.
_continua = false;
}
// No. Entonces, envía por el puerto serie tu nick
// y mensaje que haz escrito.
else
{
Puerto_serie.WriteLine(
String.Format("<{0}>: {1}", nombre, mensaje));
}
}
// Bloquea el subproceso.
readThread.Join();
// Cierra el puerto serie.
Puerto_serie.Close();
}
// Lee mensaje recibido.
public static void Leer()
{
// Si _continue es true se ejecuta todas las instrucciones dentro de while.
while (_continua)
{
try
{
// Almacena en la variable mensaje cualquier caracter o mensaje recibido.
string mensaje = Puerto_serie.ReadLine();
// Muestra en pantalla mensaje recibido.
Console.WriteLine(mensaje);
}
catch (TimeoutException) { }
}
}
}
}