Foros del Web » Programación para mayores de 30 ;) » .NET »

Modificar este código de ejemplo-

Estas en el tema de Modificar este código de ejemplo- en el foro de .NET en Foros del Web. Hola: Tengo este código sacado en este enlace. Código: using System; using System.IO.Ports; class PortDataReceived { public static void Main() { SerialPort mySerialPort = new ...
  #1 (permalink)  
Antiguo 04/02/2017, 05:43
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 6 meses
Puntos: 8
Modificar este código de ejemplo-

Hola:

Tengo este código sacado en este enlace.
Código:
using System;
using System.IO.Ports;

class PortDataReceived
{
    public static void Main()
    {
        SerialPort mySerialPort = new SerialPort("COM1");

        mySerialPort.BaudRate = 9600;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.None;
        mySerialPort.RtsEnable = true;

        mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

        mySerialPort.Open();

        Console.WriteLine("Press any key to continue...");
        Console.WriteLine();
        Console.ReadKey();
        mySerialPort.Close();
    }

    private static void DataReceivedHandler(
                        object sender,
                        SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
        Console.WriteLine("Data Received:");
        Console.Write(indata);
    }
}
https://msdn.microsoft.com/es-es/lib...or=-2147217396

Quiero añadirle algo como este código de abajo y no me sale.

Código:
int cantidadBytes = int.Parse(indata);
                byte[] datosArray = new byte[cantidadBytes];

                Console.WriteLine(datosArray);

                switch (indata)
                {
                    case "A1":
                        Thread.Sleep(100); // Retardo.
                        byte[] miBuffer = Encoding.ASCII.GetBytes("OK1"); // Codificación ASCII.
                        sp.Write(miBuffer, 0, miBuffer.Length); // Envía OK1 al puerto serie.
                        break;

                    case "A2":
                        Thread.Sleep(100); // Retardo.
                        byte[] miBuffer2 = Encoding.ASCII.GetBytes("OK2"); // Codificación ASCII.
                        sp.Write(miBuffer2, 0, miBuffer2.Length); // Envía OK2 al puerto serie.
                        break;

                    default:
                        // Código si no es A1 ni A2.
                        break;
                }
El el puerto me llegua un dato, ejemplo "A1", se tiene que ejecutar el switch. Como "A1" es un string. Lo malo que se me almacena en la variable tipo int llamado cantidadBytes.

¿Existe algún truco para ejecutar A1 de alguna forma?

Recibo por el puerto serie el primer dato que es un número, por ejemplo 17729. Este número es el tamaño de un array en este caso se llama datosArray. Por supuesto que primero este valor en este caso 17729 se almacena en la variable cantidadBytes.

Saludos.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #2 (permalink)  
Antiguo 06/02/2017, 04:57
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Modificar este código de ejemplo-

Un Switch es como un If pero más óptimo cuando hay varios "cases". El funcionamiento es muy sencillo, en el case has de indicar que valor ha de tener la variable para que se ejecute el código. No hay más truco que ese. El tipo de la variable no tiene porque ser un string, puede ser un entero, un enumerado,...

Te recomiendo que antes de nada mires como funciona y luego valores si te sirve.
__________________
Aviso: No se resuelven dudas por MP!

Etiquetas: c#
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:31.