Hola:
Estoy con WPF de VB 2015. Este es la interfaz.
(https://social.msdn.microsoft.com/Forums/getfile/798093)
La parte de programación es esta:
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.
Cita de: Meta en 2 Febrero 2016, 22:42 PMserialPort1.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):
- AddHandler Statement (Vb.Net) - MSDN (https://msdn.microsoft.com/en-us/library/7taxzxka.aspx)
- AddressOf Operator (Vb.Net) - MSDN (https://msdn.microsoft.com/en-us/library/y72ewk2b.aspx)
O también puedes hacerlo de esta manera...
- WithEvents Modifier (Vb.Net) - MSDN (https://msdn.microsoft.com/en-us/library/aty3352y.aspx)
- Handles Clause (Vb.Net) - MSDN (https://msdn.microsoft.com/en-us/library/6k46st1y.aspx)
Información adicional:
- Events and Event Handlers (Vb.Net) - MSDN (https://msdn.microsoft.com/en-us/library/aa984105%28v=vs.71%29.aspx)
Saludos
Hola:
Muchas gracias, me ha servido, es este tal como indicaste.
https://msdn.microsoft.com/es-es/library/y72ewk2b.aspx
Saludos.
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:
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