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)
| | | |-+  Encontrar errores de este programa que hice
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Encontrar errores de este programa que hice  (Leído 3,878 veces)
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Encontrar errores de este programa que hice
« en: 2 Febrero 2016, 22:42 pm »

Hola:

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



La parte de programación es esta:
Código
  1. Imports System.IO.Ports ' No olvidar.
  2. Imports System.Text ' No olvidar.
  3.  
  4. Class MainWindow
  5.    ' Utilizaremos un string como buffer de recepción.
  6.    Dim Recibidos As String
  7.    ' Creamos un objeto sdel puerto serie.
  8.    Dim serialPort1 As New SerialPort()
  9.  
  10.    Private Sub Form_Principal_Loaded(sender As Object, e As RoutedEventArgs) Handles Form_Principal.Loaded
  11.        ' Configuramos el puerto serie.
  12.        serialPort1.BaudRate = 115200 ' Baudios, tiene que ser el mismo que Arduino UNO.
  13.        serialPort1.PortName = "COM4" ' Elegimos el COM4 igual que Arduino en mi caso.
  14.        serialPort1.Parity = Parity.None ' Nada de paridad.
  15.        serialPort1.DataBits = 8 ' 8 bits.
  16.        serialPort1.StopBits = StopBits.Two ' Funciona mejor con 2 bits de Stop.
  17.  
  18.        ' Abrir puerto mientras se ejecute la aplicación.
  19.        If Not serialPort1.IsOpen Then
  20.            Try
  21.                serialPort1.Open()
  22.            Catch ex As System.Exception
  23.                MessageBox.Show(ex.ToString())
  24.  
  25.            End Try
  26.        End If
  27.        ' Ejecutar la función Recepción por disparo del evento ¡DataReived!
  28.        serialPort1.DataReceived += Recepcion
  29.    End Sub
  30.  
  31.    Private Sub Recepcion(sender As Object, e As SerialDataReceivedEventArgs)
  32.        ' Acumular los caracteres recibidos a nuestro "buffer" (string).
  33.        Recibidos += serialPort1.ReadExisting()
  34.  
  35.        ' Invocar o llamar al proceso de tramas.
  36.        Me.Dispatcher.Invoke(AddressOf Actualizar)
  37.    End Sub
  38.  
  39.    ' Procesar los datos recibidos en el buffer y extraer tramas completas.
  40.    Private Sub Actualizar()
  41.        Dim doc = New FlowDocument()
  42.        doc.Blocks.Add(New Paragraph(New Run(Recibidos)))
  43.  
  44.        Select Case Recibidos
  45.            Case "ON"
  46.                image.Source = (New BitmapImage(New Uri("Led rojo encendido.png", UriKind.Relative)))
  47.                label_Leyendo.Content = "Encendido."
  48.                Rectangulo.Fill = New SolidColorBrush(Colors.Green)
  49.                Recibidos = "" ' Limpiar.
  50.                Exit Select
  51.  
  52.            Case "OFF"
  53.                image.Source = (New BitmapImage(New Uri("Led rojo apagado.png", UriKind.Relative)))
  54.                label_Leyendo.Content = "Apagado."
  55.                Rectangulo.Fill = New SolidColorBrush(Colors.Red)
  56.                Recibidos = "" ' Limpiar.
  57.                Exit Select
  58.        End Select
  59.    End Sub
  60.  
  61.    ' Desde que cierres el programa, cierra el puerto.
  62.    Private Sub Form_Principal_Closing(sender As Object, e As ComponentModel.CancelEventArgs) Handles Form_Principal.Closing
  63.        If serialPort1.IsOpen Then ' ¿El puerto está abierto?
  64.            serialPort1.Close() ' Cerrar puerto.
  65.        End If
  66.    End Sub
  67. End Class
  68.  

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.


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Encontrar errores de este programa que hice
« Respuesta #1 en: 3 Febrero 2016, 12:51 pm »

Código
  1. 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


« Última modificación: 3 Febrero 2016, 12:55 pm por Eleкtro » En línea



Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Encontrar errores de este programa que hice
« Respuesta #2 en: 3 Febrero 2016, 13:37 pm »

Hola:

Muchas gracias, me ha servido, es este tal como indicaste.

https://msdn.microsoft.com/es-es/library/y72ewk2b.aspx

Saludos.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Encontrar errores de este programa que hice
« Respuesta #3 en: 3 Febrero 2016, 15:22 pm »

es 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
  1. Friend WithEvents SerialPort1 As New SerialPort
  2.  
  3. Private Sub Recepcion(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) _
  4. Handles SerialPort1.DataReceived
  5. ...
  6. 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
« Última modificación: 3 Febrero 2016, 15:38 pm por Eleкtro » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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