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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


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


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Hacer cambios de este código.
« Respuesta #10 en: 27 Enero 2017, 15:42 pm »

Hola:

Este código C#.

Código
  1. int cantidadBytes = int.Parse("17729");
  2. byte[] datosArray = new byte[cantidadBytes];


Por supuesto que es como este de abajo que haz puesto.

Código
  1. byte[] datosArray = new byte[int.Parse("17729")];


Desde el puerto serie me llega 17729 por poner un ejemplo. Y tiene que estar en la variable arriba llamada cantidadBytes.

Cuando me llegue los datos desde el puerto serie precisamente es 17729 como ejemplo.

¿Cómo lo hago?

Solo hay que cambiar el tamaño del array, en este caso el array se llama datosArray.

Quiero solo meter esos valors de 5 Bytes, si es menos como 29, se añadirán 00029. Porque no quiero que se me ponga como tañamo lainformación que pesa 17729, sino indique el tamaño del array que es 17729.

Cuando ya detecte que los 5 primeros Bytes sea el valor que sea y modifique el tamaño del array.
C# tiene que enviar a la placa de Arduino por puerto serie, un OK.
Desde que Arduino detecte el OK, ya puede recibir C# el peso de 17729 que en este caso es una foto.jpg como prueba, puede ser cualquier archivo.

Como me cuesta expresarme.

Saludos.


« Última modificación: 27 Enero 2017, 15:48 pm por Meta » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Hacer cambios de este código.
« Respuesta #11 en: 27 Enero 2017, 16:25 pm »

Pues utiliza SerialPort Read para leer ese número.
Si siempre van a ser 5 bytes, pues creas un array de 5 bytes y lees en él.
Luego, conviertes el array de Byte a String con, por ejemplo:
Código
  1. Encoding.UTF8.GetString(byteArray)
Y ya está, el resto es convertirlo a int con int.TryParse o int.Parse.


En línea

Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Hacer cambios de este código.
« Respuesta #12 en: 28 Enero 2017, 00:32 am »

Ya me funciona, por finnnnnnnnnn.

Gracias a todos.

Código
  1. using System;
  2. using System.Diagnostics;
  3. using System.IO;
  4. using System.IO.Ports;
  5. using System.Text;
  6. using System.Threading;
  7.  
  8. namespace Recibir_archivo_desde_Arduino_consola_02
  9. {
  10.    class Program
  11.    {
  12.        static void Main(string[] args)
  13.        {
  14.            string COM = "";
  15.  
  16.            // Tamaño ventana consola.
  17.            Console.WindowWidth = 55; // X. Ancho.
  18.            Console.WindowHeight = 15; // Y. Alto.
  19.            Console.Title = "Recoger foto desde Arduino y crearlo en el disco duro"; // Título de la ventana.
  20.  
  21.            // Crear un nuevo objeto SerialPort con la configuración predeterminada.
  22.            SerialPort Puerto_serie = new SerialPort();
  23.  
  24.            // Configuración.
  25.            Console.Write(@"
  26. Introduzca un número para seleccionar puerto COM.
  27. Por ejemplo el 4, sería COM4.
  28.  
  29. Puerto: ");
  30.            COM = Console.ReadLine(); // Escribir el número del puerto.
  31.            Console.Clear();
  32.  
  33.            Puerto_serie.PortName = "COM" + COM; // Número del puerto serie.
  34.  
  35.  
  36.            Puerto_serie.BaudRate = 115200; // Baudios. 115200.
  37.            Puerto_serie.Parity = Parity.None; // Paridad.
  38.            Puerto_serie.DataBits = 8; // Bits de datos.
  39.            Puerto_serie.StopBits = StopBits.Two; // Bits de parada.
  40.            Puerto_serie.Handshake = Handshake.None; // Control de flujo.
  41.  
  42.            // Establecer la lectura / escritura de los tiempos de espera.
  43.            Puerto_serie.ReadTimeout = -1; // 500.
  44.            Puerto_serie.WriteTimeout = -1; // 500.
  45.  
  46.            try
  47.            {
  48.                Puerto_serie.Open(); // Abrir el puerto serie.
  49.            }
  50.  
  51.            catch (IOException)
  52.            {
  53.                Console.ForegroundColor = ConsoleColor.Red; // Texto en rojo.
  54.                Console.CursorVisible = false;
  55.                Console.SetCursorPosition(16, 6);
  56.                Console.WriteLine(@"El puerto " + Puerto_serie.PortName + @" no existe
  57.                o no lo encuentra.");
  58.                Console.ReadKey(); // Pulse cualquier tecla para salir.
  59.            }
  60.  
  61.            catch (UnauthorizedAccessException e)
  62.            {
  63.                Console.WriteLine(e);
  64.            }
  65.            Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
  66.  
  67.            Console.WriteLine("Esperando datos desde Arduino...");
  68.            Console.Read();
  69.            Puerto_serie.Close(); // Cerrar puerto.
  70.        }
  71.  
  72.        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
  73.  
  74.        {
  75.            try
  76.            {
  77.                SerialPort sp = (SerialPort)sender;
  78.                int contador = 0;
  79.                string indata = sp.ReadExisting(); // A la espera que lea el tamaño del array "datosArray".
  80.  
  81.                int cantidadBytes = int.Parse(indata);
  82.                byte[] datosArray = new byte[cantidadBytes];
  83.  
  84.                Thread.Sleep(1000); // Retarde de un segundo para que no se colapse.
  85.                byte[] mBuffer = Encoding.ASCII.GetBytes("OK"); // Codificación ASCII.
  86.                sp.Write(mBuffer, 0, mBuffer.Length); // Envía OK al puerto serie.
  87.  
  88.  
  89.  
  90.                while (contador < datosArray.Length)
  91.                {
  92.  
  93.                    contador += sp.Read(datosArray, contador, datosArray.Length - contador);
  94.  
  95.                    Console.SetCursorPosition(10, 2);
  96.                    Console.Write("Datos recibidos:  {0}", contador);
  97.                    Console.WriteLine("                   ");
  98.  
  99.                    if (contador == cantidadBytes) // 17729.
  100.                    {
  101.                        Console.WriteLine();
  102.                        Console.WriteLine("Creando archivo al disco duro...");
  103.                        File.WriteAllBytes("fotón.jpg", datosArray); // Crear archivo en el disco duro.
  104.                        Console.WriteLine();
  105.                        Console.WriteLine("Archivo creado. Ejecutando imagen.");
  106.                        Process.Start("fotón.jpg"); // Ejecutar visualizador de imágenes.
  107.                        Console.WriteLine();
  108.                        Console.WriteLine("Imagen ejecutada.");
  109.                        Console.WriteLine();
  110.                        Console.ForegroundColor = ConsoleColor.Yellow; // Letras amarillas.
  111.                        Console.WriteLine("FIN DE PROGRAMA.");
  112.                        Console.ForegroundColor = ConsoleColor.Gray; // Letras grises otra vez.
  113.                    }
  114.                }
  115.            }
  116.  
  117.            catch (FormatException)
  118.            {
  119.                // La cadena de entrada no tiene el formato correcto.
  120.            }
  121.        }
  122.    }
  123. }

Saludos.
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines