elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Mejorar este código
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mejorar este código  (Leído 2,298 veces)
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Mejorar este código
« en: 11 Diciembre 2015, 12:19 pm »

Hola:

Antes que nada, ya que es modo consola, lo pongo en español bien español.

Enviar datos:

1. Configuración del puerto serie.

2. Abrir puerto.

3. La consola espera que introduza datos.

4. Al introducir datos, lo guarda en una variable string, da igual lo que escribas, letras, números o símbolos.

5. Si pulsas Enter envía datos al puerto serie.

Recibir datos:

1. La Consola está en espera de recibir algún dato.

2. Lo guarda en una variable string.

3. La Consola muestra en pantalla los datos recibidos.

4. Si cierra la consola o palicación, cierra el puerto.

El código de enviar datos que he hecho paso a paso es este.

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. using System.IO.Ports; // No olvidar.
  8. using System.Threading;
  9.  
  10. namespace Puerto_serie_consola_CS
  11. {
  12.    class Program
  13.    {
  14.        static void Main(string[] args)
  15.        {
  16.            Console.Title = "Puerto serie C#";
  17.  
  18.            string Enviar_datos = "";
  19.  
  20.            SerialPort Puerto_serie;
  21.  
  22.            // Crear un nuevo objeto SerialPort con la configuración predeterminada.
  23.            Puerto_serie = new SerialPort();
  24.  
  25.            // Configuración.
  26.            Puerto_serie.PortName = "COM4"; // Número del puerto serie.
  27.            Puerto_serie.BaudRate = 115200; // Baudios.
  28.            Puerto_serie.Parity = Parity.None; // Paridad.
  29.            Puerto_serie.DataBits = 8; // Bits de datos.
  30.            Puerto_serie.StopBits = StopBits.Two; // Bits de parada.
  31.            Puerto_serie.Handshake = Handshake.None; // Control de flujo.
  32.  
  33.            // Establecer la lectura / escritura de los tiempos de espera.
  34.            Puerto_serie.ReadTimeout = 500;
  35.            Puerto_serie.WriteTimeout = 500;
  36.  
  37.            while (true)
  38.            {
  39.                Console.WriteLine("Introduce comandos:"); // Muestra texto en pantalla.
  40.                Enviar_datos = Console.ReadLine(); // Almacena los datos introducidos en consola a la variable.
  41.  
  42.                switch (Enviar_datos)
  43.                {
  44.                    case "Led_ON":
  45.                        Puerto_serie.Open(); // Abrir puerto serie.
  46.                        byte[] miBuffer = Encoding.ASCII.GetBytes(Enviar_datos); // Guarda un array los datos y codificado en ASCII.
  47.                        Puerto_serie.Write(miBuffer, 0, miBuffer.Length); // Envía al puerto el array almacenado del buffer.
  48.                        Console.WriteLine(); // Salto de línea.
  49.  
  50.                        //Puerto_serie.Write(Enviar_datos); // Con solo esta línea también vale pero no está codificado.
  51.  
  52.                        Puerto_serie.Close(); // Cerrar puerto serie.
  53.                        break;
  54.  
  55.                    case "Led_OFF":
  56.                        Puerto_serie.Open(); // Abrir puerto serie.
  57.                        byte[] miBuffer2 = Encoding.ASCII.GetBytes(Enviar_datos); // Guarda un array los datos y codificado en ASCII.
  58.                        Puerto_serie.Write(miBuffer2, 0, miBuffer2.Length); // Envía al puerto el array almacenado del buffer.
  59.                        Console.WriteLine(); // Salto de línea.
  60.  
  61.                        //Puerto_serie.Write(Enviar_datos); // Con solo esta línea también vale pero no está codificado.
  62.  
  63.                        Puerto_serie.Close(); // Cerrar puerto serie.
  64.                        break;
  65.                }
  66.            }
  67.        }
  68.    }
  69. }

Este código de enviar datos lo he probado en Arduino, funciona de maravilla. Antes de continuar con la parte de recibir datos, quiero saber si la forma que lo he programado es suficiente o lo tengo al estilo chapuza. Si alguien sabe mejorarlo de mejor manera, mejor que mejor.

Luego me centro en la parte de enviar datos.

Un cordial salduo.


En línea

kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: Mejorar este código
« Respuesta #1 en: 12 Diciembre 2015, 21:56 pm »

Hola Meta,

no está mal, te dejo una versión simplificada y te comento los cambios:

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. using System.IO.Ports; // No olvidar.
  8. using System.Threading;
  9.  
  10. namespace Puerto_serie_consola_CS
  11. {
  12.        static void Main(string[] args)
  13.        {
  14.            Console.Title = "Puerto serie C#";
  15.  
  16.            //Los parametros de la config los he puesto en la constructora veáse https://msdn.microsoft.com/en-us/library/z8d1ykfs%28v=vs.100%29.aspx
  17.            SerialPort Puerto_serie = new SerialPort("COM4", 115200, Parity.None, 8, StopBits.Two);
  18.  
  19.            // Crear un nuevo objeto SerialPort con la configuración predeterminada.
  20.            Puerto_serie = new SerialPort();
  21.  
  22.            // Configuración.
  23.            Puerto_serie.Handshake = Handshake.None; // Control de flujo.
  24.  
  25.            // Establecer la lectura / escritura de los tiempos de espera.
  26.            Puerto_serie.ReadTimeout = 500;
  27.            Puerto_serie.WriteTimeout = 500;
  28.  
  29.            string  Enviar_datos = String.Empty;
  30.  
  31.            while (true)
  32.            {
  33.                Console.WriteLine("Introduce comandos:"); // Muestra texto en pantalla.
  34.                Enviar_datos = Console.ReadLine();
  35.                byte[] buff = Encoding.ASCII.GetBytes(Enviar_datos); // Guarda un array los datos y codificado en ASCII.
  36.                Puerto_serie.Open();
  37.                Puerto_serie.Write(buff, 0, buff.Length); // Envía al puerto el array almacenado del buffer.
  38.                Console.WriteLine(); // Salto de línea.
  39.                Puerto_serie.Close(); // Cerrar puerto serie.
  40.            }
  41.        }
  42.    }
  43. }

He quitado la claúsula switch(){} pues en ambos cases hacías las mismas llamadas empleando los mismos objetos. No lo he probado pero espero te funcione.

Saludos!


« Última modificación: 12 Diciembre 2015, 21:58 pm por kub0x » En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Quien me ayuda a mejorar este codigo?(Socket)
Programación Visual Basic
n3ts4mura1 5 2,697 Último mensaje 8 Agosto 2006, 07:14 am
por -POLACO-
Me ayudarian a mejorar este codigo¿? « 1 2 »
Programación Visual Basic
Murd3r3r 0f daT4 15 7,612 Último mensaje 10 Octubre 2009, 22:56 pm
por Murd3r3r 0f daT4
¿Mejorar este código en C baja Ubuntu?
Programación C/C++
bertamax 2 2,815 Último mensaje 8 Agosto 2010, 14:43 pm
por bertamax
mejorar codigo
Java
winnipu 2 3,504 Último mensaje 2 Enero 2015, 16:04 pm
por winnipu
Se puede mejorar este codigo¿?
Programación C/C++
trioper 4 2,411 Último mensaje 29 Abril 2017, 12:16 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines