Encontrar errores de este programa que hice

Iniciado por Meta, 2 Febrero 2016, 22:42 PM

0 Miembros y 1 Visitante están viendo este tema.

Meta

Hola:

Estoy con WPF de VB 2015. Este es la interfaz.



La parte de programación es esta:
Código (vbnet,28) [Seleccionar]
Imports System.IO.Ports ' No olvidar.
Imports System.Text ' No olvidar.

Class MainWindow
    ' Utilizaremos un string como buffer de recepción.
    Dim Recibidos As String
    ' Creamos un objeto sdel puerto serie.
    Dim serialPort1 As New SerialPort()

    Private Sub Form_Principal_Loaded(sender As Object, e As RoutedEventArgs) Handles Form_Principal.Loaded
        ' Configuramos el puerto serie.
        serialPort1.BaudRate = 115200 ' Baudios, tiene que ser el mismo que Arduino UNO.
        serialPort1.PortName = "COM4" ' Elegimos el COM4 igual que Arduino en mi caso.
        serialPort1.Parity = Parity.None ' Nada de paridad.
        serialPort1.DataBits = 8 ' 8 bits.
        serialPort1.StopBits = StopBits.Two ' Funciona mejor con 2 bits de Stop.

        ' Abrir puerto mientras se ejecute la aplicación.
        If Not serialPort1.IsOpen Then
            Try
                serialPort1.Open()
            Catch ex As System.Exception
                MessageBox.Show(ex.ToString())

            End Try
        End If
        ' Ejecutar la función Recepción por disparo del evento ¡DataReived!
        serialPort1.DataReceived += Recepcion
    End Sub

    Private Sub Recepcion(sender As Object, e As SerialDataReceivedEventArgs)
        ' Acumular los caracteres recibidos a nuestro "buffer" (string).
        Recibidos += serialPort1.ReadExisting()

        ' Invocar o llamar al proceso de tramas.
        Me.Dispatcher.Invoke(AddressOf Actualizar)
    End Sub

    ' Procesar los datos recibidos en el buffer y extraer tramas completas.
    Private Sub Actualizar()
        Dim doc = New FlowDocument()
        doc.Blocks.Add(New Paragraph(New Run(Recibidos)))

        Select Case Recibidos
            Case "ON"
                image.Source = (New BitmapImage(New Uri("Led rojo encendido.png", UriKind.Relative)))
                label_Leyendo.Content = "Encendido."
                Rectangulo.Fill = New SolidColorBrush(Colors.Green)
                Recibidos = "" ' Limpiar.
                Exit Select

            Case "OFF"
                image.Source = (New BitmapImage(New Uri("Led rojo apagado.png", UriKind.Relative)))
                label_Leyendo.Content = "Apagado."
                Rectangulo.Fill = New SolidColorBrush(Colors.Red)
                Recibidos = "" ' Limpiar.
                Exit Select
        End Select
    End Sub

    ' Desde que cierres el programa, cierra el puerto.
    Private Sub Form_Principal_Closing(sender As Object, e As ComponentModel.CancelEventArgs) Handles Form_Principal.Closing
        If serialPort1.IsOpen Then ' ¿El puerto está abierto?
            serialPort1.Close() ' Cerrar puerto.
        End If
    End Sub
End Class


Gravedad    Código    Descripción    Proyecto    Archivo    Línea
Error    BC32022    'Public Event DataReceived As SerialDataReceivedEventHandler' es un evento y no se puede llamar directamente. Use una instrucción 'RaiseEvent' para generar un evento.    Entrada_Arduino_WPF_1_VB    C:\Users\Usuario\Documents\Visual Studio 2015\Projects\Entrada_Arduino_WPF_1_VB\Entrada_Arduino_WPF_1_VB\MainWindow.xaml.vb    28

Gravedad    Código    Descripción    Proyecto    Archivo    Línea
Error    BC30455    No se especificó un argumento para el parámetro 'e' de 'Private Sub Recepcion(sender As Object, e As SerialDataReceivedEventArgs)'.    Entrada_Arduino_WPF_1_VB    C:\Users\Usuario\Documents\Visual Studio 2015\Projects\Entrada_Arduino_WPF_1_VB\Entrada_Arduino_WPF_1_VB\MainWindow.xaml.vb    28

El programa completo se trada de recibir tramas de bytes por el puerto serie.

¿Alguna solución al problema?

Saludos.

PD: Uso Visual Studio Community 2015.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Eleкtro

#1
Cita de: Meta en  2 Febrero 2016, 22:42 PM
Código (vbnet) [Seleccionar]
serialPort1.DataReceived += Recepcion

Supongo que esa orden que muestras proviene de un copy/paste cualquiera por haber intentado traducir un código de C# a VB.Net (ya que esas instrucciones siempre se traducen de la misma e incorrecta manera que has mostrado), por que de otro modo no me explico que intentas hacer...

Lee un poco y entenderás como asociar un controlador de eventos a un evento (en Vb.Net):

O también puedes hacerlo de esta manera...

Información adicional:

Saludos








Meta

Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Eleкtro

#3
Cita de: Meta en  3 Febrero 2016, 13:37 PMes este tal como indicaste.

( En realidad es la combinación de ambos keywords: AddHandler {EVENTO}, AddressOf {CONTROLADOR DE EVENTOS}, pero es igual. )

En el código que mostraste, yo te sugiero utilizar la otra metodología que mencioné, por el simple hecho de que te puedes beneficiar de ello para simplificarlo:

Código (vbnet,1,4) [Seleccionar]
Friend WithEvents SerialPort1 As New SerialPort

Private Sub Recepcion(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) _
Handles SerialPort1.DataReceived
...
End Sub

( nótese también el cambio de mayúscula en la nomenclatura del nombre del miembro usando el modificador de visibilidad especificado. )

E intentar limitarte a utilizar AddHandler solamente al instanciar, de forma dinámica, objetos que expongan eventos ( por ejemplo en un búcle de creación de controles dinámicos a los que quieras suscribir sus eventos ).

Saludos