• Inicio
  • Buscar
  • Ingresar
  • Registrarse

    Starfield: el juego que revolucionará el espacio y la tecnología

    • Hack x Crack - Comunidad de Seguridad informática »
    • Programación »
    • Java y Android »
    • Pasar este código a Java
    • Imprimir
    Páginas: [1]   Ir Abajo

    Autor Tema: Pasar este código a Java  (Leído 4820 veces)

    Desconectado Meta

    • { L0 } Ñuub
    • Mensajes: 23
      • Ver Perfil
    Pasar este código a Java
    « en: Marzo 25, 2017, 02:12:17 pm »
    Hola:

    Quiero pasar este código de C# a Java con NetBeans.



    Instalar Java actualizado:
    https://www.java.com/es/download/

    Compilador NetBeans (En español), Java SE:
    https://netbeans.org/downloads/index.html

    Tutorial sobre instalación del NetBeans y las librerías RxTx para controlar el puerto serie de Arduino:
    https://es.slideshare.net/Metaconta2/interfaz-java-y-arduino

    Librería oficial RxTx solo para 32 bits:
    Download - Rxtx

    Librería alternativa RxTx de 32 y de 64 bits. Usaremos 64 bits. (Recomendado):
    RXTX for jLog

    El código de C# es este aquí abajo.
    Código: [Seleccionar]
    using System;
    using System.Text;
    using System.IO.Ports;
    using System.IO;
    using System.Diagnostics;
    using System.Threading;

    namespace Recibir_archivo_desde_Arduino_consola_06
    {
        class Program
        {
            static int cantidadBytes;
            static StringBuilder sb = new StringBuilder();

            static void Main(string[] args)
            {
                string COM = "";
                // Título de la ventana.
                Console.Title = "Recoger foto desde Arduino y crearlo en el disco duro";

                // Tamaño ventana consola.
                Console.WindowWidth = 55; // X. Ancho.
                Console.WindowHeight = 18; // Y. Alto.
               

                // Crear un nuevo objeto SerialPort con la configuración predeterminada.
                SerialPort Puerto_serie = new SerialPort();

                // 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.


                Puerto_serie.BaudRate = 115200; // Baudios. 115200.
                Puerto_serie.Parity = Parity.None; // Paridad.
                Puerto_serie.DataBits = 8; // Bits de datos.
                Puerto_serie.StopBits = StopBits.One; // Bits de parada.
                Puerto_serie.Handshake = Handshake.None; // Control de flujo.

                // Establecer la lectura / escritura de los tiempos de espera.
                Puerto_serie.ReadTimeout = -1; // 500.
                Puerto_serie.WriteTimeout = -1; // 500.

                try
                {
                    Puerto_serie.Open(); // Abrir el puerto serie.
                }

                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 para salir.
                }

                catch (UnauthorizedAccessException e)
                {
                    Console.WriteLine(e);
                }
                Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

                Console.WriteLine("Esperando datos desde Arduino... \n");
                Console.ReadKey();
                Puerto_serie.Close(); // Cerrar puerto.
            }

            private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
            {
                try
                {
                    SerialPort sp = (SerialPort)sender;
                    string indata = sp.ReadExisting();
                    // string[] data = indata.Split('A');
                    string[] data = indata.Split(new char[] { 'A' });
                    cantidadBytes = int.Parse(data[0]);


                    switch (data[1].ToString())
                    {
                        case "1":
                            Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
                            Console.WriteLine("Foto: " + data[1] + ". Tipo de archivo: JPG");
                            break;

                        case "2":
                            Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
                            Console.WriteLine("Foto: " + data[1] + ". Tipo de archivo: PNG.");
                            break;

                        default:
                            Console.WriteLine("Cosas raras en 'data': " + data.ToString()); // Por si hal algún error.
                            break;
                    }

                    int contador = 0;
                    byte[] datosArray = new byte[cantidadBytes];

                    switch (indata)
                    {
                        case "17729A1":
                            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 "2065A2":
                            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:
                            Console.WriteLine("Cosas raras en 'indata': " + indata.ToString()); // Por si hal algún error.
                            break;
                    }

                    while (true)
                    {

                        contador += sp.Read(datosArray, contador, datosArray.Length - contador);

                        Console.SetCursorPosition(10, 6);
                        Console.Write("Datos recibidos:  {0}", contador + " Bytes.");
                        Console.WriteLine("                   ");

                        if ((contador == cantidadBytes) && (contador == 17729))
                        {
                            Mensaje1();
                            File.WriteAllBytes("fotón.jpg", datosArray); // Crear archivo en el disco duro.
                            Mensaje2();
                            Process.Start("fotón.jpg"); // Ejecutar visualizador de imágenes.
                            Mensaje3();
                            break; // Garantiza que el ciclo termine.
                        }

                        if ((contador == cantidadBytes) && (contador == 2065))
                        {
                            Mensaje1();
                            File.WriteAllBytes("fotón.png", datosArray); // Crear archivo en el disco duro.
                            Mensaje2();
                            Process.Start("fotón.png"); // Ejecutar visualizador de imágenes.
                            Mensaje3();
                            break; // Garantiza que el ciclo termine.
                        }
                    }

                    void Mensaje1()
                    {
                        Console.WriteLine();
                        Console.WriteLine("Creando archivo al disco duro...");
                    }

                    void Mensaje2()
                    {
                        Console.WriteLine();
                        Console.WriteLine("Archivo creado. Ejecutando imagen.");
                    }

                    void Mensaje3()
                    {
                        Console.WriteLine();
                        Console.WriteLine("Imagen ejecutada.");
                        Console.WriteLine();
                        Console.WriteLine("Cabecera recibida: " + indata + "\n");
                        Console.ForegroundColor = ConsoleColor.Yellow; // Letras amarillas.
                        Console.WriteLine("FIN DE PROGRAMA.");
                        Console.ForegroundColor = ConsoleColor.Gray; // Letras grises otra vez.
                    }
                }

                catch (FormatException)
                {
                    // System.FormatException: 'La cadena de entrada no tiene el formato correcto.'
                }
            }
        }
    }
    En estos momentos estoy instalando la librería RxTx de 64 bits para  Windwos 10 de 64 bits que es el que uso actualmente. El código de C#  arriba fucniona de maravilla.

    Esto de Java para adaptarme tardaré  una eternidad, al menos se que el Hola mundo es Console.WriteLine("Hola  mundo"); de C# es el equivalente a System.out.println("Hola mundo"); de  Java.

    Cualquier ayuda es bienvenida.
    En línea

    • Imprimir
    Páginas: [1]   Ir Arriba
    • Hack x Crack - Comunidad de Seguridad informática »
    • Programación »
    • Java y Android »
    • Pasar este código a Java
     

    • SMF | SMF © 2013, Simple Machines
    • XHTML
    • RSS
    • WAP2
    Va un mudo y le dice a un sordo: Hack x Crack usa cookies. Pues eso... Learn more