Hola:
En este código me sale un error y no se como corregirlo, ya que me interesa mostrar datos en pantalla y no me sale.
.
Código hecho hasta ahora.
using System;
using System.IO.Ports;
namespace Almacenar_byte_puerto_serie_Consola_01 { internal class Program { static SerialPort puertoSerie; static byte[] datoRecibido; static void Main(string[] args) {
region Configuración ventana.
// Título de la ventana.
Console.Title = "Almacenar byte[] desde el puerto serie.";
// Tamaño de la ventana, x, y, o ancho y alto.
const byte ANCHO_X = 70, ALTO_Y = 25;
Console.SetWindowSize(ANCHO_X, ALTO_Y);
// Color de fondo.
Console.BackgroundColor = ConsoleColor.Black;
// Color de las letras.
Console.ForegroundColor = ConsoleColor.Yellow;
// Limpiar pantalla y dejarlo todo en color de fondo.
Console.Clear();
// Visible el cursor.
Console.CursorVisible = true;
#endregion
puertoSerie = new SerialPort()
{
// Configuración del puerto serie.
PortName = "COM4", // Nombre del puerto serie.
BaudRate = 2400, // Velocidad en baudios.
Parity = Parity.None, // Esquema para comprobar la paridad de cada byte recibido.
StopBits = StopBits.One, // Número de bits de parada por byte.
DataBits = 8, // Número de bits de datos por byte.
Handshake = Handshake.None, // Protocolo de establecimiento.
DtrEnable = true, // Línea de terminal de datos.
RtsEnable = true, // Línea de solicitud.
// Establecer los tiempos de espera de lectura / escritura.
ReadTimeout = 500, // Tiempo de espera de escritura en ms.
WriteTimeout = 500, // Tiempo de espera de escritura en ms.
// Más configuraciones.
DiscardNull = false, // Descartar bytes nulos recibidos.
ParityReplace = 63, // Reemplaza los bytes recibidos con errores de paridad.
ReadBufferSize = 4096, // Tamaño del búfer de lectura en bytes.
WriteBufferSize = 2018, // Tamaño del búfer de escritura en bytes.
ReceivedBytesThreshold = 1 // Número de bytes que se necesitan.
};
puertoSerie.DataReceived += SerialPort_DataReceived;
puertoSerie.Open();
Console.WriteLine("Presiona cualquier tecla para detener la captura...");
Console.ReadKey();
puertoSerie.Close();
Console.WriteLine("Datos recibidos:");
MostrarBytes(datoRecibido);
}
static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
int bytesToRead = sp.BytesToRead;
byte[] buffer = new byte[bytesToRead];
sp.Read(buffer, 0, bytesToRead);
if (datoRecibido == null)
{
datoRecibido = buffer;
}
else
{
Array.Resize(ref datoRecibido, datoRecibido.Length + bytesToRead);
Array.Copy(buffer, 0, datoRecibido, datoRecibido.Length - bytesToRead, bytesToRead);
}
}
static void MostrarBytes(byte[] dato)
{
for (int i = 0; i < dato.Length; i++)
{
Console.Write($"{dato[i]} ");
}
Console.WriteLine();
}
}
}
Se trata de obtener bytes puro y duro desde el RS232 o puerto serie, almacenarlo en un array tipo byte[] y mostrarlo en pantalla. Lenguaje C#
¿Alguna idea?
Saludos.