none
No me hace bien la conversión

    Debate general

  • Hola:

    Quiero pasar el códig en C# 2017 a VB .net 2017. Por ejemplo, he usado este enlace y me da problemas, al menos en este código.

    C#:

    private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)

    ¿Cómo es en Visual Basic .net?

    El código completo que quiero convertir es este. Lo he hecho por partes porque la de arriba no me deja.

    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');
                    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.'
                }
            }
        }
    }
    

    Gracias por leer.


    http://electronica-pic.blogspot.com

    sábado, 18 de marzo de 2017 4:53

Todas las respuestas

  • Hola: Enrique M. MontejoLo voy a probar.

    Hola: Javier Rocco

    Da problemas el código por todas partes, en otras partes la puedo soluconar, otras no.

    Parece ser mejor hacerlo poco a poco la conversión, es decir, convertir parte por parte.

    Luego les comento como me salió.


    Edito:

    Por ahora he conovertido la primera parte.

    Imports System
    Imports System.Text
    Imports System.IO.Ports
    Imports System.IO
    Imports System.Diagnostics
    Imports System.Threading
    
    'https//social.msdn.microsoft.com/Forums/es-ES/9c4eb65a-4a78-41f1-a8b1-696d1eed6549/no-me-hace-bien-la-conversin?forum=vbes
    
    
    Namespace Recibir_archivo_desde_Arduino_consola_VB
    
        Class Program
            Shared cantidadBytes As Integer
            Shared sb As New StringBuilder()
    
            Private Shared Sub Main(args As String())
                Dim COM As String = ""
                ' 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.
                Dim Puerto_serie As New SerialPort()
    
                ' Configuración.
                Console.Write(vbCr & vbLf & "Introduzca un número para seleccionar puerto COM." & vbCr & vbLf & "Por ejemplo el 4, sería COM4." & vbCr & vbLf & vbCr & vbLf & "Puerto: ")
                COM = Console.ReadLine()
                ' Escribir el número del puerto.
                Console.Clear()
    
                Puerto_serie.PortName = Convert.ToString("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
                    ' Abrir el puerto serie.
                    Puerto_serie.Open()
    
                Catch generatedExceptionName As IOException
                    Console.ForegroundColor = ConsoleColor.Red
                    ' Texto en rojo.
                    Console.CursorVisible = False
                    Console.SetCursorPosition(16, 6)
                    Console.WriteLine("El puerto " + Puerto_serie.PortName + " no existe" & vbCr & vbLf & "                o no lo encuentra.")
                    ' Pulse cualquier tecla para salir.
                    Console.ReadKey()
    
                Catch e As UnauthorizedAccessException
                    Console.WriteLine(e)
                End Try
                Puerto_serie.DataReceived += New SerialDataReceivedEventHandler(DataReceivedHandler)
    
                Console.WriteLine("Esperando datos desde Arduino... " & vbLf)
                Console.ReadKey()
                Puerto_serie.Close()
                ' Cerrar puerto.
            End Sub
    
            Private Shared Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
    
                ' Escribir aquí el código que deseas que se ejecute cuando
                ' se desencadene el evento DataReceived.
    
            End Sub
    
        End Class
    End Namespace

    La otra parte que va dentro de :

            Private Shared Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
    
                ' Escribir aquí el código que deseas que se ejecute cuando
                ' se desencadene el evento DataReceived.
    
            End Sub

    No traduce bien la parte de C# abajo.

    private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
            {
                try
                {
                    SerialPort sp = (SerialPort)sender;
                    string indata = sp.ReadExisting();
                    string[] data = indata.Split('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.'
                }
            }

    Mejor dicho, no me deja convertir.

    ¿Alguna idea?

    Saludos.

    • Editado Metaconta domingo, 19 de marzo de 2017 4:27
    domingo, 19 de marzo de 2017 3:42
  • Buenas:

    El primer enlace no me carga, lo he probado y se queda cargando, no me da respuesta ya desde hace tiempo. El Otro me carga pero da muchos problemas de conversión, sobre todo los Try Catch.

    Da muchos errores. Al final me da, que hay que hacerlo todo a mano.

    Imports System
    Imports System.Text
    Imports System.IO.Ports
    Imports System.IO
    Imports System.Diagnostics
    Imports System.Threading
    
    Namespace Recibir_archivo_desde_Arduino_consola_06
        Class Program
            Shared cantidadBytes As Integer
            Shared sb As New StringBuilder()
            Shared Sub Main(args As String())
                Dim COM As String = ""
                ' 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.
                Dim Puerto_serie As 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.
    
                Puerto_serie.Open() ' Abrir el puerto serie.
    
                Puerto_serie.DataReceived += New SerialDataReceivedEventHandler(DataReceivedHandler)
                Console.WriteLine("Esperando datos desde Arduino... " & vbLf & "")
                Console.ReadKey()
                Puerto_serie.Close() ' Cerrar puerto.
    
            End Sub
    
            Private Shared Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
    
                Dim sp As SerialPort = CType(sender, SerialPort)
                    Dim indata As String = sp.ReadExisting()
                    String() data = indata.Split("A"c)
                    cantidadBytes = Integer.Parse(Data(0))
    
                    Select Case 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;
                        Case Else
                            Console.WriteLine("Cosas raras en 'data': " & Data.ToString())
                            ' break;
    
                    End Select
    
                    Dim contador As Integer = 0 ' Por si hal algún error.
                    Dim datosArray(0 To cantidadBytes - 1) As Byte
                    Select Case indata
                        Case "17729A1"
                            Thread.Sleep(100)
                            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)
                            Byte() miBuffer2 = Encoding.ASCII.GetBytes("OK2") ' Codificación ASCII.
                            sp.Write(miBuffer2, 0, miBuffer2.Length) ' Envía OK2 al puerto serie.
                            ' break;
                        Case Else
                            Console.WriteLine("Cosas raras en 'indata': " & indata.ToString())
                            ' break;
    
                    End Select
    
                    While True
    
                        contador += sp.Read(datosArray, contador, datosArray.Length - contador) ' Por si hal algún error.
                        Console.SetCursorPosition(10, 6)
                        Console.Write("Datos recibidos:  {0}", contador & " Bytes.")
                        Console.WriteLine("                   ")
                        If (contador = cantidadBytes) AndAlso (contador = 17729) Then
                            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.
    
                        End If
    
                        If (contador = cantidadBytes) AndAlso (contador = 2065) Then
                            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.
    
                        End If
    
                    End While
    
    
            Sub Mensaje1()
                Console.WriteLine()
                Console.WriteLine("Creando archivo al disco duro...")
            End Sub
    
            Sub Mensaje2()
                Console.WriteLine()
                Console.WriteLine("Archivo creado. Ejecutando imagen.")
            End Sub
    
            Sub Mensaje3()
                Console.WriteLine()
                Console.WriteLine("Imagen ejecutada.")
                Console.WriteLine()
                Console.WriteLine("Cabecera recibida: " & indata & "" & vbLf & "")
                Console.ForegroundColor = ConsoleColor.Yellow ' Letras amarillas.
                Console.WriteLine("FIN DE PROGRAMA.")
                Console.ForegroundColor = ConsoleColor.Gray ' Letras grises otra vez.
            End Sub
    
        End Class
    
    End Namespace
    
    
    

    Da muchos fallos hasta en los métodos. Tendré que mirar como se hace en VB .net

    Le he quitado los Try y cath, da errores. Por ahora da errores así también hasta con los break.



    http://electronica-pic.blogspot.com

    lunes, 20 de marzo de 2017 10:46
  • Hola de nuevo:

    Tengo este método:

            Sub Mensaje1()
                Console.WriteLine()
                Console.WriteLine("Creando archivo al disco duro...")
            End Sub

    Me tradujo que se le llama así:

    Mensaje1()

    No funciona.

    ¿Cómo se le llama al método Mensaje1()?

    Ahí me da errores, por eso quiero averiguarlo. Lo estoy traduciendo partes por partes. Ahora me toca este y no se como resolver este problema.

    Saludos.


    http://electronica-pic.blogspot.com

    martes, 21 de marzo de 2017 5:59
  • tienes que probar con los convertidores que ya te propuesto y otros que hayas conseguido cual te va mejor si uno no funciona pruebas con otro. 

    .WriteLine
    Console.WriteLine("Creando archivo al disco duro...")
    Dim Sub As End
    
        
        Private Function Mensaje1() As Sub
        End Function

    martes, 21 de marzo de 2017 12:59
  • Funciona así por lo que veo.

    Public Shared Sub Mensaje1()
                Console.WriteLine()
                Console.WriteLine("Creando archivo al disco duro...")
            End Sub

    Esta parte y ano me da problemas.

    He probado muchos convertidores y ninguno saca algo al 100 %. Gracias por la propuesta.  Ahora te toca convertir estas líneas que no lo hace bien.

    El código es muy grande y no traduce bien todo. Voy partes por partes como este y este no convierte.

    Puerto_serie.DataReceived += New SerialDataReceivedEventHandler(DataReceivedHandler)


    http://electronica-pic.blogspot.com

    martes, 21 de marzo de 2017 15:12
  • Casi lo tengo, mira que llevo días con lo mismo. Este es el código pero me encuentra dos fallos.

    Imports System
    Imports System.Text
    Imports System.IO.Ports
    Imports System.IO
    Imports System.Diagnostics
    Imports System.Threading
    
    Namespace Recibir_archivo_desde_Arduino_consola_06
        Class Program
            Shared cantidadBytes As Integer
            Shared sb As New StringBuilder()
            Shared Sub Main(args As String())
                Dim COM As String = ""
                ' 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.
                Dim Puerto_serie As 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.
    
                Puerto_serie.Open() ' Abrir el puerto serie.
    
                'Puerto_serie.DataReceived += New SerialDataReceivedEventHandler(DataReceivedHandler)
                AddHandler Puerto_serie.DataReceived, AddressOf Me.Puerto_serie_DataReceived
                Console.WriteLine("Esperando datos desde Arduino... " & vbLf & "")
                Console.ReadKey()
                Puerto_serie.Close() ' Cerrar puerto.
    
            End Sub
    
            Private Shared Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
                'Private Sub Puerto_serie_DataReceived(ByVal sender As Object, ByVal e As DataReceivedHandler) Handles Puerto_serie.DataReceived
    
                Dim sp As SerialPort = DirectCast(sender, SerialPort)
                Dim indata As String = sp.ReadExisting()
                Dim data As String() = indata.Split({"A"c})
                cantidadBytes = Integer.Parse(data(0))
    
                Select Case data(1).ToString()
    
                    Case "1"
                        Console.WriteLine("Tamaño: " & cantidadBytes & " Bytes.")
                        Console.WriteLine("Foto: " & data(1) & ". Tipo de archivo: JPG")
    
                    Case "2"
                        Console.WriteLine("Tamaño: " & cantidadBytes & " Bytes.")
                        Console.WriteLine("Foto: " & data(1) & ". Tipo de archivo: PNG.")
    
                    Case Else
                        Console.WriteLine("Cosas raras en 'data': " & data.ToString())
    
                End Select
    
                Dim contador As Integer = 0 ' Por si hal algún error.
                Dim datosArray(0 To cantidadBytes - 1) As Byte
    
                Select Case indata
                    Case "17729A1"
                        Thread.Sleep(100)
                        Dim miBuffer = Encoding.ASCII.GetBytes("OK1") ' Codificación ASCII.
                        sp.Write(miBuffer, 0, miBuffer.Length) ' Envía OK1 al puerto serie.
    
                    Case "2065A2"
                        Thread.Sleep(100)
                        Dim miBuffer2 = Encoding.ASCII.GetBytes("OK2") ' Codificación ASCII.
                        sp.Write(miBuffer2, 0, miBuffer2.Length) ' Envía OK2 al puerto serie.
    
                    Case Else
                        Console.WriteLine("Cosas raras en 'indata': " & indata.ToString())
    
                End Select
    
                While True
    
                    contador += sp.Read(datosArray, contador, datosArray.Length - contador) ' Por si hal algún error.
                    Console.SetCursorPosition(10, 6)
                    Console.Write("Datos recibidos:  {0}", contador & " Bytes.")
                    Console.WriteLine("                   ")
                    If (contador = cantidadBytes) AndAlso (contador = 17729) Then
                        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.
    
                    End If
    
                    If (contador = cantidadBytes) AndAlso (contador = 2065) Then
                        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.
    
                    End If
    
                End While
    
            End Sub
    
            Public Shared Sub Mensaje1()
                Console.WriteLine()
                Console.WriteLine("Creando archivo al disco duro...")
            End Sub
    
    
            Public Shared Sub Mensaje2()
                Console.WriteLine()
                Console.WriteLine("Archivo creado. Ejecutando imagen.")
            End Sub
    
            Public Shared Sub Mensaje3()
                Console.WriteLine()
                Console.WriteLine("Imagen ejecutada.")
                Console.WriteLine()
                'Console.WriteLine("Cabecera recibida: " & indata & "" & vbLf & "")
                Console.ForegroundColor = ConsoleColor.Yellow ' Letras amarillas.
                Console.WriteLine("FIN DE PROGRAMA.")
                Console.ForegroundColor = ConsoleColor.Gray ' Letras grises otra vez.
            End Sub
    
        End Class
    
    End Namespace
    
    
    

    Saludos.


    http://electronica-pic.blogspot.com

    miércoles, 22 de marzo de 2017 5:38
  • Tengo una curiosidad en VB cuando inicias sale por default:

    Un proyecto Windows Form sale algo asi:

    Public Class Form1/End Class

    En tu caso solo veo Class Program / End Class

    Pero fijate mas en esto:

    Cuando agregue el espacio de nombres, vaya de nuevo al Explorador de soluciones y haga clic con el botón secundario en el nombre del proyecto en la parte superior y abra la ventana Propiedades.
    Seleccione allí el objeto de inicio Namespace.modulename

    Info Error1

    Respecto al otro Error: Me 

    Info Error2

    Casi en todo usas shared podria ser en las primeras declaraciones has probado usar 

    Dim cantidadBytes As Integer
    Private sb As New StringBuilder()
    Private Sub Main(args As String())

    Saludos

    • Editado Javier Roque miércoles, 22 de marzo de 2017 23:24
    miércoles, 22 de marzo de 2017 23:15
  • Hola a todos y a todas:

    Se me quitó el error menos el:

    AddHandler Puerto_serie.DataReceived, AddressOf Me.Puerto_serie_DataReceived


    Desde que puse esto:

    Dim cantidadBytes As Integer
    Private sb As New StringBuilder()
    Private Sub Main(args As String())

    Haciendo pruebas:
    Con Windows Form se me crea esto:

    Public Class Form1
    
    End Class

    Modo consola:
    Module Module1
    
        Sub Main()
    
        End Sub
    
    End Module

    Dejando como estaba todo el código, solo me aparece este error del Me que dijiste arriba y todavía no me lo quito de encima.

    Gravedad    Código    Descripción    Proyecto    Archivo    Línea    Estado suprimido
    Error    BC30043    'Me' solo es válido en un método de instancia.    Recibir_archivo_desde_Arduino_consola_VB    C:\Users\Usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consola_VB\Recibir_archivo_desde_Arduino_consola_VB\Module1.vb    51    Activo


    http://electronica-pic.blogspot.com

    viernes, 24 de marzo de 2017 8:34
  • Ok dejalo como estaba entonces el error se refiere al Me. de la linea:

    AddHandler Puerto_serie.DataReceived, AddressOf Me.Puerto_serie_DataReceived

    Quitale el Me. dejalo solo:

    AddHandler Puerto_serie.DataReceived, AddressOf Puerto_serie_DataReceived

    Saludos


    viernes, 24 de marzo de 2017 15:16
  • Te sale este error.

    Gravedad    Código    Descripción    Proyecto    Archivo    Línea    Estado suprimido
    Error    BC30451    'Puerto_serie_DataReceived' no está declarado. Puede que sea inaccesible debido a su nivel de protección.    Recibir_archivo_desde_Arduino_consola_VB    C:\Users\Usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consola_VB\Recibir_archivo_desde_Arduino_consola_VB\Module1.vb    51    Activo


    http://electronica-pic.blogspot.com

    viernes, 24 de marzo de 2017 18:30
  • Bueno estoy instalando el vs para poder ver.

    Esta parte:

    Private Shared Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
                'Private Sub Puerto_serie_DataReceived(ByVal sender As Object, ByVal e As DataReceivedHandler) Handles Puerto_serie.DataReceived
    
                Dim sp As SerialPort = DirectCast(sender, SerialPort)
                Dim indata As String = sp.ReadExisting()
                Dim data As String() = indata.Split({"A"c})
                cantidadBytes = Integer.Parse(data(0))
    
                Select Case data(1).ToString()
    
                    Case "1"
    .....
    Esta con ' has revisado eso

    viernes, 24 de marzo de 2017 18:36
  • Nada es al 100%, casi siempre se requiere una revisión y ajustes, a mi donde mejor he resuelto es en:

    http://www.carlosag.net/tools/codetranslator/

    Inclusive me atreví a hacerle una donación de 1.00USD, no se si al final se haga rico pero por lo pronto a mi me ha ayudado bastante.

    Saludos

    Si te sirvió marca como respuesta.

    viernes, 24 de marzo de 2017 19:24
  • Lo he probado y nay nay.

    http://electronica-pic.blogspot.com

    viernes, 24 de marzo de 2017 21:00