Páginas

sábado, 13 de septiembre de 2014

"Simulador de Señales Electrónicas con Visual Basic .NET"

Generador de "Señales Electrónicas" o "Simulator of Electronic Signals" with Visual Basic .NET

Aquí os presento este simulador de señales electrónicas realizado con Visual Basic .NET. La idea principal que me ha llevado hacer este diseño fue inicialmente, dar uso a un par de controles que había desarrollado. Concretamente al control Display LCD con Visual Basic .NET y Display de 7 segmentos con Visual Basic .NET también explicadas, en dos entradas más antiguas de este mismo blog. A continuación os dejo ambos enlaces por si queréis echarlas un vistazo:


Pues bien, el resultado fue esta aplicación:






Programé una pantalla gráfica con el aspecto de una pantalla de osciloscopio para poder mostrar las señales que se iban a generar (seno, coseno, semionda, triangular, diente de sierra ,cuadrada y "función sinc") así como una serie de opciones que permitiesen poder modificar algunos parámetros de configuración sobre las señales que se simulaban. 





En concreto, los parámetros con los que se pueden experimentar y probar son: la amplitud, el número de armónicos (si la señal se compone con la serie de Fourier) y el número de ciclos que se quieren mostrar en la pantalla gráfica. Además es posible también cambiar el color, trazo y ángulo de la linea que es dibujada en la pantalla. Por último es posible hacer un efecto de barrido al activar el modo simulación y hacer que cuando llegue al señal al final de la pantalla esta sea borre y comience de nuevo para dar un efecto más real.



Como podéis observar he incluido los controles de Display LCD y el de Display de 7 Segmentos, para ver que pueden usarse en otro tipo de aplicaciones y que el aspecto que da es mucho más electrónico y por supuesto bonito, si se compara con un simple label o textbox. 

En el Display LCD se muestran los parámetros elegidos de la señal a simular así como el tipo de señal elegida y en display de 7 segmentos, se muestra simplemente el valor que va tomando cada parámetro que se va modificando de la señal.




A continuación os muestro un pantallazo de como he estructurado el código fuente de esta aplicación para que pueda ser más legible.








Aplicación de "Simulador de Señales Electrónicas".
 (Incluye también los ficheros .dll de los controles LCD y Display 7 Segmentos)



Aquí os dejo el Código Fuente de la Aplicación de las regiones mostradas en la figura anterior:

'*****************************************************************************************
' LICENSE INFORMATION
'*****************************************************************************************
' Simulador de Señales Electrónicas Version 1.0.1.0
' Application that generates several electronics signals with a smart GUI in Visual Basic .NET
'
' Copyright © 2014 
' Rubén García Coronado
' Email: rubengaco13@gmail.com
' Created: Aug 2014
'
' This program is free software: you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation, either version 3 of the License, or
' (at your option) any later version.
'
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' GNU General Public License for more details.
'
' You should have received a copy of the GNU General Public License
' along with this program. If not, see <http://www.gnu.org/licenses/>.
'*****************************************************************************************

#Region "DEFINICION DE VARIABLES GLOBALES Y CONSTANTES"

    Public Nombre_Aplicacion As String = "SIMULADOR DE SEÑALES ELECTRONICAS"

    Public Fecha_Software As String = "01/08/2014"
    Public Version_Software As String = "Versión 1.0.3" & "(" & Chr(223) & "eta)"
    Public Copyright_Software As String = "Copyright " & Chr(174) & " " & Fecha_Software  'Chr(169)



    Const Pi As Double = 3.1416

    Dim Periodos As Integer = 3
    Dim Amplitud As Integer = 60
    Dim Armonicos As Integer = 10

    Dim Amplitud_Seno As Integer = Amplitud '80

    Dim Periodos_Seno As Integer = Periodos '8
    Dim Correccion As Integer = 4

    Dim Tiempo_Maximo As Integer

    Dim Tiempo As Integer

    Dim Color_Señal As Color = Color.Red

    Dim Color_Señal_Seno As Color = Color.Red
    Dim Color_Señal_Coseno As Color = Color.Cyan
    Dim Color_Señal_Triangular As Color = Color.White
    Dim Color_Señal_SemiOnda As Color = Color.Yellow
    Dim Color_Señal_Cuadrada As Color = Color.Lime
    Dim Color_Señal_Diente_Sierra As Color = Color.Violet
    Dim Color_Señal_Sinc As Color = Color.Orange

    Dim Grosor_Lineas As Integer = 1

    Dim Grados_Lineas As Integer = 180

#End Region


#Region "REPRESENTACION Y DIBUJADO"

    Sub Dibuja_Cuadricula()

        Dim G_2 As Graphics

        Dim i As Integer = 0
        Dim P_Central As Point
        'SE DIBUJA LA CUADRICULA ENTERA
        Dim Number_Ticks As Integer = 8
        Dim Ancho_Cuadricula As Integer = 1
        Dim Grosor_Cuadricula As New Pen(Color.White, Ancho_Cuadricula)
        Dim Ancho_Cuadricula_Central As Integer = 1
        Dim Grosor_Cuadricula_Central As New Pen(Color.LightBlue, Ancho_Cuadricula_Central)
        Dim O_X_Rect_Cuadricula As Integer = 2 'Origen Rectangulo coordenada X
        Dim O_Y_Rect_Cuadricula As Integer = 2 'Origen Rectangulo coordenada Y
        Dim Ancho_Borde_Cuadricula As Integer = 2
        Dim Grosor_Punto_Central As New Pen(Color.LightBlue, 3)


        Me.PictureBox_G_1.Refresh()


        G_2 = Me.PictureBox_G_1.CreateGraphics


        'Borde

        Dim Rect_Cuadricula As New Rectangle(O_X_Rect_Cuadricula, O_Y_Rect_Cuadricula, Me.PictureBox_G_1.Width - ((Ancho_Borde_Cuadricula * O_Y_Rect_Cuadricula) + O_Y_Rect_Cuadricula) - Ancho_Borde_Cuadricula, Me.PictureBox_G_1.Height - ((Ancho_Borde_Cuadricula * O_X_Rect_Cuadricula) + O_X_Rect_Cuadricula) - Ancho_Borde_Cuadricula)
        G_2.DrawRectangle(Grosor_Cuadricula, Rect_Cuadricula)
        'Cuadricula
        For i = ((Me.PictureBox_G_1.Height) \ Number_Ticks) To Me.PictureBox_G_1.Height - ((Me.PictureBox_G_1.Height) \ Number_Ticks) Step ((Me.PictureBox_G_1.Height) \ Number_Ticks)
            G_2.DrawLine(Grosor_Cuadricula, Ancho_Borde_Cuadricula, i, Me.PictureBox_G_1.Width - Ancho_Borde_Cuadricula * 3, i)
        Next
        For i = ((Me.PictureBox_G_1.Width) \ Number_Ticks) To Me.PictureBox_G_1.Width - ((Me.PictureBox_G_1.Width) \ Number_Ticks) Step ((Me.PictureBox_G_1.Width) \ Number_Ticks)
            G_2.DrawLine(Grosor_Cuadricula, i, Ancho_Borde_Cuadricula, i, Me.PictureBox_G_1.Height - Ancho_Borde_Cuadricula * 3)
        Next i
        'Eje central
        G_2.DrawLine(Grosor_Cuadricula_Central, ((Me.PictureBox_G_1.Width - 4) \ 2), 0, ((Me.PictureBox_G_1.Width - 4) \ 2), Me.PictureBox_G_1.Height - 4)
        G_2.DrawLine(Grosor_Cuadricula_Central, 0, ((Me.PictureBox_G_1.Height - 4) \ 2), Me.PictureBox_G_1.Width - 4, ((Me.PictureBox_G_1.Height - 4) \ 2))
        'Punto Central
        P_Central = New Point((Me.PictureBox_G_1.Width \ 2) - 4, (Me.PictureBox_G_1.Height \ 2) - 4)
        G_2.DrawArc(Grosor_Punto_Central, New Rectangle(P_Central.X, P_Central.Y, 4, 4), 0, 360)


    End Sub

    Sub Dibuja_Señal()


        Dim G_1 As Graphics

        Dim i, j As Integer

        Amplitud_Seno = Amplitud

        Periodos_Seno = Periodos * 2


        Dim P_1 As Point

        Dim P_2 As Point


        Dim Grosor_Seno As New Pen(Color_Señal_Seno, Grosor_Lineas)

        Dim Grosor_Coseno As New Pen(Color_Señal_Coseno, Grosor_Lineas)
        Dim Grosor_Triangular As New Pen(Color_Señal_Triangular, Grosor_Lineas)
        Dim Grosor_Semionda As New Pen(Color_Señal_SemiOnda, Grosor_Lineas)
        Dim Grosor_Cuadrada As New Pen(Color_Señal_Cuadrada, Grosor_Lineas)
        Dim Grosor_Diente_Sierra As New Pen(Color_Señal_Diente_Sierra, Grosor_Lineas)
        Dim Grosor_Sinc As New Pen(Color_Señal_Sinc, Grosor_Lineas)

        Dim Amplitud_Coseno As Integer = Amplitud_Seno

        Dim Amplitud_T As Double = (((Periodos_Seno * 0.77) / 4) * Amplitud_Seno) / 70
        Dim Amplitud_SO As Double = (((Periodos_Seno * 0.77) / 4) * Amplitud_Seno) / 70
        Dim Amplitud_C As Double = (4 * Amplitud_Seno) / Pi
        Dim Amplitud_DS As Double = (Amplitud_Seno)
        Dim Amplitud_S As Double = (Amplitud_Seno)

        Dim Periodos_Coseno As Integer = Periodos_Seno

        Dim Periodos_T As Integer = Periodos_Seno
        Dim Periodos_SO As Integer = Periodos_Seno
        Dim Periodos_C As Integer = Periodos_Seno
        Dim Periodos_DS As Integer = Periodos_Seno
        Dim Periodos_S As Integer = Periodos_Seno

        Dim Suma_Armonicos_T As Double

        Dim Suma_Armonicos_SO As Double
        Dim Suma_Armonicos_C As Double
        Dim Suma_Armonicos_C_Aux As Double
        Dim Suma_Armonicos_DS As Double
        Dim Suma_Armonicos_S As Double


        G_1 = Me.PictureBox_G_1.CreateGraphics


        'Barrido de DIFERENTES SEÑALES ELECTRONICAS

        For i = 0 To Tiempo  'Me.PictureBox_G_1.Width - Correccion
            If Me.RadioButton_Seno.Checked = True Then
                'SEÑAL SENO Y COSENO
                G_1.DrawArc(Grosor_Seno, New Rectangle(i, ((Me.PictureBox_G_1.Height - 6) / 2) - Amplitud_Seno * Math.Sin((Periodos_Seno * Pi * i) / (Me.PictureBox_G_1.Width - Correccion)), 1, 1), 0, Grados_Lineas)
                Armonicos = 0
                Me.Label_Armonicos.Text = "Armonicos: " & Armonicos
            ElseIf Me.RadioButton_Coseno.Checked = True Then
                G_1.DrawArc(Grosor_Coseno, New Rectangle(i, ((Me.PictureBox_G_1.Height - 6) / 2) - Amplitud_Coseno * Math.Cos((Periodos_Coseno * Pi * i) / (Me.PictureBox_G_1.Width - Correccion)), 1, 1), 0, Grados_Lineas)
                Armonicos = 0
                Me.Label_Armonicos.Text = "Armonicos: " & Armonicos
                'G_1.DrawArc(Grosor_Coseno, New Rectangle(i, (Me.PictureBox_G_1.Height / 1.2) - Amplitud_Coseno * Math.Cos((2 * Pi * i) * (Math.Cos(i * 0.08)) / (Me.PictureBox_G_1.Width - Correccion)), 1, 1), 0, 180)
            ElseIf Me.RadioButton_Triangular.Checked = True Then
                'SEÑAL TRIANGULAR
                For j = 1 To Armonicos Step 2
                    Suma_Armonicos_T = (1 / j) * Math.Sin((Periodos_T * Pi * j * i) / (Me.PictureBox_G_1.Width - Correccion)) + Suma_Armonicos_T
                Next j
                G_1.DrawArc(Grosor_Triangular, New Rectangle(i, ((Me.PictureBox_G_1.Height - 6) / 2) - Amplitud_T * Suma_Armonicos_T, 1, 1), 0, Grados_Lineas)
                Armonicos = Me.HScrollBar_Armonicos.Value
                Me.Label_Armonicos.Text = "Armonicos: " & Me.HScrollBar_Armonicos.Value
            ElseIf Me.RadioButton_SemiOnda.Checked = True Then
                'SEÑAL SEMIONDA
                For j = 1 To Armonicos Step 1
                    Suma_Armonicos_SO = (1 / j) * Math.Sin((Periodos_SO * Pi * j * i) / (Me.PictureBox_G_1.Width - Correccion)) + Suma_Armonicos_SO
                Next j
                G_1.DrawArc(Grosor_Semionda, New Rectangle(i, ((Me.PictureBox_G_1.Height - 6) / 2) - Amplitud_SO * Suma_Armonicos_SO, 1, 1), 0, Grados_Lineas)
                Armonicos = Me.HScrollBar_Armonicos.Value
                Me.Label_Armonicos.Text = "Armonicos: " & Me.HScrollBar_Armonicos.Value
            ElseIf Me.RadioButton_Cuadrada.Checked = True Then
                'SEÑAL CUADRADA
                'Suma_Armonicos_C_Aux = 0
                'Suma_Armonicos_C_Aux = (Math.Sin((Periodos_Seno * Pi * 1 * i) / (Me.PictureBox_G_1.Width - Correccion))) / 1 + (Math.Sin((Periodos_Seno * Pi * 3 * i) / (Me.PictureBox_G_1.Width - Correccion))) / 3 + (Math.Sin((Periodos_Seno * Pi * 5 * i) / (Me.PictureBox_G_1.Width - Correccion))) / 5 + (Math.Sin((Periodos_Seno * Pi * 7 * i) / (Me.PictureBox_G_1.Width - Correccion))) / 7 + (Math.Sin((Periodos_Seno * Pi * 9 * i) / (Me.PictureBox_G_1.Width - Correccion))) / 9 + +(Math.Sin((Periodos_Seno * Pi * 11 * i) / (Me.PictureBox_G_1.Width - Correccion))) / 11 + (Math.Sin((Periodos_Seno * Pi * 13 * i) / (Me.PictureBox_G_1.Width - Correccion))) / 13
                Suma_Armonicos_C = 0
                For j = 1 To Armonicos Step 2
                    Suma_Armonicos_C = (Math.Sin((Periodos_C * Pi * j * i) / (Me.PictureBox_G_1.Width - Correccion))) / j + Suma_Armonicos_C
                Next j
                G_1.DrawArc(Grosor_Cuadrada, New Rectangle(i, ((Me.PictureBox_G_1.Height - 6) / 2) - Amplitud_C * Suma_Armonicos_C, 1, 1), 0, Grados_Lineas)
                Armonicos = Me.HScrollBar_Armonicos.Value
                Me.Label_Armonicos.Text = "Armonicos: " & Me.HScrollBar_Armonicos.Value

            ElseIf Me.RadioButton_Diente_Sierra.Checked = True Then

                'SEÑAL Diente de Sierra
                Suma_Armonicos_DS = 0
                For j = 1 To Armonicos 'Step 1
                    Suma_Armonicos_DS = -((Math.Sin((Periodos_DS * Pi * i * j) / (Me.PictureBox_G_1.Width - Correccion))) / j) + Suma_Armonicos_DS
                Next j

                G_1.DrawArc(Grosor_Diente_Sierra, New Rectangle(i, ((Me.PictureBox_G_1.Height - 6) / 2) - (2 / Pi) * (Amplitud_DS * Suma_Armonicos_DS), 1, 1), 0, Grados_Lineas)

                Armonicos = Me.HScrollBar_Armonicos.Value
                Me.Label_Armonicos.Text = "Armonicos: " & Me.HScrollBar_Armonicos.Value


            ElseIf Me.RadioButton_Sinc.Checked = True Then

                'SEÑAL Sinc   Sinc = Sin(x)/x
                Dim Valor As Double
                Valor = (Periodos_Seno * Pi * (i - (Me.PictureBox_G_1.Width - Correccion) / 2)) / (Me.PictureBox_G_1.Width - Correccion)
                If Valor = 0 Then
                    GoTo sigue
                End If
                G_1.DrawArc(Grosor_Sinc, New Rectangle(i, ((Me.PictureBox_G_1.Height - 6) / 2) - Amplitud_Seno * (Math.Sin(Valor) / Valor), 1, 1), 0, Grados_Lineas)
sigue:
                Armonicos = Me.HScrollBar_Armonicos.Value
                Me.Label_Armonicos.Text = "Armonicos: " & Me.HScrollBar_Armonicos.Value


            End If

        Next i
    End Sub
#End Region

#Region "SELECCION DE LA SEÑAL "

    Private Sub RadioButton_Seno_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton_Seno.CheckedChanged
        Dibuja_Cuadricula()
        Dibuja_Señal()
        Mensaje_LCD()
    End Sub
    Private Sub RadioButton_Coseno_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton_Coseno.CheckedChanged
        Dibuja_Cuadricula()
        Dibuja_Señal()
        Mensaje_LCD()
    End Sub
    Private Sub RadioButton_Triangular_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton_Triangular.CheckedChanged
        Dibuja_Cuadricula()
        Dibuja_Señal()
        Mensaje_LCD()
    End Sub
    Private Sub RadioButton_SemiOnda_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton_SemiOnda.CheckedChanged
        Dibuja_Cuadricula()
        Dibuja_Señal()
        Mensaje_LCD()
    End Sub
    Private Sub RadioButton_Cuadrada_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton_Cuadrada.CheckedChanged
        Dibuja_Cuadricula()
        Dibuja_Señal()
        Mensaje_LCD()
    End Sub
    Private Sub RadioButton_Diente_Sierra_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton_Diente_Sierra.CheckedChanged
        Dibuja_Cuadricula()
        Dibuja_Señal()
        Mensaje_LCD()
    End Sub
    Private Sub RadioButton_Sinc_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton_Sinc.CheckedChanged
        Dibuja_Cuadricula()
        Dibuja_Señal()
        Mensaje_LCD()
    End Sub

#End Region


#Region "SELECCION DE PARAMETROS DE LAS SEÑALES"

    Private Sub HScrollBar_Amplitud_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles HScrollBar_Amplitud.ValueChanged
        Amplitud = Me.HScrollBar_Amplitud.Value
        Me.Label_Amplitud.Text = "Amplitud: " & Me.HScrollBar_Amplitud.Value
        Dibuja_Cuadricula()
        Dibuja_Señal()
        Mensaje_LCD()

        If Me.HScrollBar_Amplitud.Value < 10 Then

            Me.Control_D0.Ruben_Input_Display = Mid(Me.HScrollBar_Amplitud.Value, 1, 1)
            Me.Control_D1.Ruben_Input_Display = "0"
            Me.Control_D2.Ruben_Input_Display = "0"
        ElseIf Me.HScrollBar_Amplitud.Value > 9 And Me.HScrollBar_Amplitud.Value < 100 Then
            Me.Control_D0.Ruben_Input_Display = Mid(Me.HScrollBar_Amplitud.Value, 2, 1)
            Me.Control_D1.Ruben_Input_Display = Mid(Me.HScrollBar_Amplitud.Value, 1, 1)
            Me.Control_D2.Ruben_Input_Display = "0"
        Else
            Me.Control_D0.Ruben_Input_Display = Mid(Me.HScrollBar_Amplitud.Value, 3, 1)
            Me.Control_D1.Ruben_Input_Display = Mid(Me.HScrollBar_Amplitud.Value, 2, 1)
            Me.Control_D2.Ruben_Input_Display = Mid(Me.HScrollBar_Amplitud.Value, 1, 1)
        End If
    End Sub
    Private Sub HScrollBar_Armonicos_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles HScrollBar_Armonicos.ValueChanged
        Armonicos = Me.HScrollBar_Armonicos.Value
        Me.Label_Armonicos.Text = "Armonicos: " & Me.HScrollBar_Armonicos.Value
        Dibuja_Cuadricula()
        Dibuja_Señal()
        Mensaje_LCD()
        If Me.HScrollBar_Armonicos.Value < 10 Then
            Me.Control_D0.Ruben_Input_Display = Mid(Me.HScrollBar_Armonicos.Value, 1, 1)
            Me.Control_D1.Ruben_Input_Display = "0"
            Me.Control_D2.Ruben_Input_Display = "0"
        ElseIf Me.HScrollBar_Armonicos.Value > 9 And Me.HScrollBar_Armonicos.Value < 100 Then
            Me.Control_D0.Ruben_Input_Display = Mid(Me.HScrollBar_Armonicos.Value, 2, 1)
            Me.Control_D1.Ruben_Input_Display = Mid(Me.HScrollBar_Armonicos.Value, 1, 1)
            Me.Control_D2.Ruben_Input_Display = "0"
        Else
            Me.Control_D0.Ruben_Input_Display = Mid(Me.HScrollBar_Armonicos.Value, 3, 1)
            Me.Control_D1.Ruben_Input_Display = Mid(Me.HScrollBar_Armonicos.Value, 2, 1)
            Me.Control_D2.Ruben_Input_Display = Mid(Me.HScrollBar_Armonicos.Value, 1, 1)
        End If
    End Sub
    Private Sub HScrollBar_Periodos_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles HScrollBar_Periodos.ValueChanged
        Periodos = Me.HScrollBar_Periodos.Value
        Me.Label_Periodos.Text = "Periodos: " & Me.HScrollBar_Periodos.Value
        Dibuja_Cuadricula()
        Dibuja_Señal()
        Mensaje_LCD()

        If Me.HScrollBar_Periodos.Value < 10 Then

            Me.Control_D0.Ruben_Input_Display = Mid(Me.HScrollBar_Periodos.Value, 1, 1)
            Me.Control_D1.Ruben_Input_Display = "0"
            Me.Control_D2.Ruben_Input_Display = "0"
        ElseIf Me.HScrollBar_Periodos.Value > 9 And Me.HScrollBar_Periodos.Value < 100 Then
            Me.Control_D0.Ruben_Input_Display = Mid(Me.HScrollBar_Periodos.Value, 2, 1)
            Me.Control_D1.Ruben_Input_Display = Mid(Me.HScrollBar_Periodos.Value, 1, 1)
            Me.Control_D2.Ruben_Input_Display = "0"
        Else
            Me.Control_D0.Ruben_Input_Display = Mid(Me.HScrollBar_Periodos.Value, 3, 1)
            Me.Control_D1.Ruben_Input_Display = Mid(Me.HScrollBar_Periodos.Value, 2, 1)
            Me.Control_D2.Ruben_Input_Display = Mid(Me.HScrollBar_Periodos.Value, 1, 1)
        End If

    End Sub

    Private Sub HScrollBar_Barrido_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles HScrollBar_Barrido.ValueChanged
        Me.Timer_Simulacion.Interval = Me.HScrollBar_Barrido.Value
    End Sub
    Private Sub HScrollBar_Grosor_Lineas_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HScrollBar_Grosor_Lineas.Scroll
        Grosor_Lineas = Me.HScrollBar_Grosor_Lineas.Value
        Dibuja_Cuadricula()
        Dibuja_Señal()
        Mensaje_LCD()
    End Sub
    Private Sub HScrollBar_Grados_Lineas_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HScrollBar_Grados_Lineas.Scroll
        Grados_Lineas = Me.HScrollBar_Grados_Lineas.Value
        Dibuja_Cuadricula()
        Dibuja_Señal()
        Mensaje_LCD()
    End Sub
#Region "Color de las Señales"
    Private Sub Button_Color_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Color.Click

        Dim Resultado As DialogResult

        Resultado = Me.ColorDialog_1.ShowDialog()

        If Resultado = Windows.Forms.DialogResult.OK Then

            Color_Señal = Me.ColorDialog_1.Color
            If Me.RadioButton_Seno.Checked = True Then
                Color_Señal_Seno = Color_Señal
                Me.Label_Seno_Color.BackColor = Color_Señal
            ElseIf Me.RadioButton_Coseno.Checked = True Then
                Color_Señal_Coseno = Color_Señal
                Me.Label_Coseno_Color.BackColor = Color_Señal
            ElseIf Me.RadioButton_SemiOnda.Checked = True Then
                Color_Señal_SemiOnda = Color_Señal
                Me.Label_SemiOnda_Color.BackColor = Color_Señal
            ElseIf Me.RadioButton_Triangular.Checked = True Then
                Color_Señal_Triangular = Color_Señal
                Me.Label_Triangular_Color.BackColor = Color_Señal
            ElseIf Me.RadioButton_Cuadrada.Checked = True Then
                Color_Señal_Cuadrada = Color_Señal
                Me.Label_Cuadrada_Color.BackColor = Color_Señal
            ElseIf Me.RadioButton_Diente_Sierra.Checked = True Then
                Color_Señal_Diente_Sierra = Color_Señal
                Me.Label_Diente_Sierra_Color.BackColor = Color_Señal
            ElseIf Me.RadioButton_Sinc.Checked = True Then
                Color_Señal_Sinc = Color_Señal
                Me.Label_Sinc_Color.BackColor = Color_Señal
            End If

        Else

            Exit Sub
        End If

    End Sub


    Private Sub Label_Sinc_Color_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label_Sinc_Color.Click

        Button_Color_Click(sender, e)
    End Sub
    Private Sub Label_Seno_Color_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label_Seno_Color.Click
        Button_Color_Click(sender, e)
    End Sub
    Private Sub Label_Coseno_Color_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label_Coseno_Color.Click
        Button_Color_Click(sender, e)
    End Sub
    Private Sub Label_SemiOnda_Color_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label_SemiOnda_Color.Click
        Button_Color_Click(sender, e)
    End Sub
    Private Sub Label_Triangular_Color_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label_Triangular_Color.Click
        Button_Color_Click(sender, e)
    End Sub
    Private Sub Label_Cuadrada_Color_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label_Cuadrada_Color.Click
        Button_Color_Click(sender, e)
    End Sub
    Private Sub Label_Diente_Sierra_Color_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label_Diente_Sierra_Color.Click
        Button_Color_Click(sender, e)
    End Sub

#End Region

#End Region

#Region "SIMULACION"

    Private Sub CheckBox_Simulacion_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox_Simulacion.CheckedChanged
        Dibuja_Cuadricula()
        If Me.CheckBox_Simulacion.Checked = True Then
            Me.Timer_Simulacion.Enabled = True
            Me.Led_Verde.Visible = True
            Me.Led_Gris.Visible = False
        Else
            Me.Timer_Simulacion.Enabled = False
            Me.Led_Verde.Visible = False
            Me.Led_Gris.Visible = True
            Tiempo = Tiempo_Maximo
            Dibuja_Señal()
        End If
    End Sub
    Private Sub Timer_Simulacion_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_Simulacion.Tick
        Tiempo = Tiempo + 1
        If Tiempo >= Me.PictureBox_G_1.Width - Correccion Then
            Tiempo = 0
            If Me.CheckBox_Borrar.Checked = True Then
                Me.PictureBox_G_1.Refresh()
                Dibuja_Cuadricula()
            End If
        End If
        Dibuja_Señal()
    End Sub
#End Region

#Region "INICIALIZACION"



    Private Sub Form_Grafica_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing


        Dim Respuesta As String


        Respuesta = MessageBox.Show(Me, "¿Esta seguro de que desea salir de la Aplicación """ & Nombre_Aplicacion & """?", "Salir", MessageBoxButtons.YesNo, _

                 MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
        If Respuesta = vbYes Then
            End
            Me.Close()
        Else
            e.Cancel = True
        End If
    End Sub


    Private Sub Form_Grafica_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.NotificationWindow1.DefaultText = "Lanzada la Aplicación:  SIMULADOR DE SEÑALES  ELECTRONICAS by Joe and Alex's Daddy"
        Me.NotificationWindow1.Notify()

        'INICIALIZACION DE LOS CONTROLES DISEÑADOS POR MI, QUE ESTAN EMBEBIDOS EN LA FICHEROS .DLL

        Me.Control_LCD.Ruben_Input_Output = True
        Me.Control_LCD.Ruben_Input_LCD = "  SIMULADOR DE       SEÑALES"
        Me.Control_LCD.Ruben_Color = Color_Señal.R.ToString & ";" & Color_Señal.G.ToString & ";" & Color_Señal.B.ToString   '"255;0;255"


        Me.Control_D0.Ruben_Input_Display = "1"

        Me.Control_D1.Ruben_Input_Display = "0"
        Me.Control_D2.Ruben_Input_Display = "0"

        Me.Control_D0.Ruben_Color_Display = "yellow"

        Me.Control_D1.Ruben_Color_Display = "yellow"
        Me.Control_D2.Ruben_Color_Display = "yellow"


    End Sub


    Private Sub Form_Grafica_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

        If Me.CheckBox_Simulacion.Checked = True Then
            Dibuja_Cuadricula()
        Else
            Tiempo_Maximo = Me.PictureBox_G_1.Width - Correccion
            Tiempo = Tiempo_Maximo
            Dibuja_Cuadricula()
            Dibuja_Señal()
            Mensaje_LCD()
        End If
    End Sub
#End Region

#Region "MOSTRAR INFORMACION EN EL LCD"

    Sub Mensaje_LCD()
        If Me.RadioButton_Seno.Checked = True Then
            Me.Control_LCD.Ruben_Input_LCD = "      Seno      " & "P:" & Me.HScrollBar_Periodos.Value & "A:" & Me.HScrollBar_Amplitud.Value & "F:" & Me.HScrollBar_Armonicos.Value
            Me.Control_LCD.Ruben_Color = Color_Señal_Seno.R.ToString & ";" & Color_Señal_Seno.G.ToString & ";" & Color_Señal_Seno.B.ToString   '"255;0;255"
            Me.HScrollBar_Armonicos.Enabled = False
        ElseIf Me.RadioButton_Coseno.Checked = True Then
            Me.Control_LCD.Ruben_Input_LCD = "     Coseno     " & "P:" & Me.HScrollBar_Periodos.Value & "A:" & Me.HScrollBar_Amplitud.Value & "F:" & Me.HScrollBar_Armonicos.Value
            Me.Control_LCD.Ruben_Color = Color_Señal_Coseno.R.ToString & ";" & Color_Señal_Coseno.G.ToString & ";" & Color_Señal_Coseno.B.ToString   '"255;0;255"
            Me.HScrollBar_Armonicos.Enabled = False
        ElseIf Me.RadioButton_SemiOnda.Checked = True Then
            Me.Control_LCD.Ruben_Input_LCD = "    Semionda    " & "P:" & Me.HScrollBar_Periodos.Value & "A:" & Me.HScrollBar_Amplitud.Value & "F:" & Me.HScrollBar_Armonicos.Value
            Me.Control_LCD.Ruben_Color = Color_Señal_SemiOnda.R.ToString & ";" & Color_Señal_SemiOnda.G.ToString & ";" & Color_Señal_SemiOnda.B.ToString   '"255;0;255"
            Me.HScrollBar_Armonicos.Enabled = True
        ElseIf Me.RadioButton_Triangular.Checked = True Then
            Me.Control_LCD.Ruben_Input_LCD = "   Triangular   " & "P:" & Me.HScrollBar_Periodos.Value & "A:" & Me.HScrollBar_Amplitud.Value & "F:" & Me.HScrollBar_Armonicos.Value
            Me.Control_LCD.Ruben_Color = Color_Señal_Triangular.R.ToString & ";" & Color_Señal_Triangular.G.ToString & ";" & Color_Señal_Triangular.B.ToString   '"255;0;255"
            Me.HScrollBar_Armonicos.Enabled = True
        ElseIf Me.RadioButton_Cuadrada.Checked = True Then
            Me.Control_LCD.Ruben_Input_LCD = "    Cuadrada    " & "P:" & Me.HScrollBar_Periodos.Value & "A:" & Me.HScrollBar_Amplitud.Value & "F:" & Me.HScrollBar_Armonicos.Value
            Me.Control_LCD.Ruben_Color = Color_Señal_Cuadrada.R.ToString & ";" & Color_Señal_Cuadrada.G.ToString & ";" & Color_Señal_Cuadrada.B.ToString   '"255;0;255"
            Me.HScrollBar_Armonicos.Enabled = True
        ElseIf Me.RadioButton_Diente_Sierra.Checked = True Then
            Me.Control_LCD.Ruben_Input_LCD = "Diente de Sierra" & "P:" & Me.HScrollBar_Periodos.Value & "A:" & Me.HScrollBar_Amplitud.Value & "F:" & Me.HScrollBar_Armonicos.Value
            Me.Control_LCD.Ruben_Color = Color_Señal_Diente_Sierra.R.ToString & ";" & Color_Señal_Diente_Sierra.G.ToString & ";" & Color_Señal_Diente_Sierra.B.ToString   '"255;0;255"
            Me.HScrollBar_Armonicos.Enabled = True
        ElseIf Me.RadioButton_Sinc.Checked = True Then
            Me.Control_LCD.Ruben_Input_LCD = "      Sinc      " & "P:" & Me.HScrollBar_Periodos.Value & "A:" & Me.HScrollBar_Amplitud.Value & "F:" & Me.HScrollBar_Armonicos.Value
            Me.Control_LCD.Ruben_Color = Color_Señal_Sinc.R.ToString & ";" & Color_Señal_Sinc.G.ToString & ";" & Color_Señal_Sinc.B.ToString   '"255;0;255"
            Me.HScrollBar_Armonicos.Enabled = False
        End If

    End Sub

#End Region

#Region "ACERCA DE ..."


    Private Sub Label_Acerca_De_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label_Acerca_De.Click

        MessageBox.Show(Me, Nombre_Aplicacion & vbCrLf & vbCrLf & "Software desarrollado por Joe and Alex's Daddy" & Chr(169) & vbCrLf & Version_Software & vbCrLf & Copyright_Software, "Información de la Aplicación", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
    End Sub

    Private Sub ImageButton1_Click() Handles ImageButton1.Click

        Label_Acerca_De_Click(Nothing, Nothing)
    End Sub

#End Region


#Region "PRUEBAS VARIAS .......!!!!!"


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim G_3 As Graphics
        Dim i As Integer = 0
        Dim Grosor_Prueba As New Pen(Color.LightBlue, 3)

        Dim P1, P2, P3 As Point


        P1.X = 10

        P1.Y = 20

        P2.X = 35

        P2.Y = 40

        P3.X = 55

        P3.Y = 30

        Dim P4 As PointF



        Me.PictureBox_G3.Refresh()


        G_3 = Me.PictureBox_G3.CreateGraphics


        'Borde

        Dim Rect_Cuadricula As New Rectangle(100, 69, Me.PictureBox_G_1.Width, 10)
        G_3.DrawRectangle(Grosor_Prueba, Rect_Cuadricula)

        Dim pts() As Point = { _

        New Point(1, 1), _
        New Point(20, 10), _
        New Point(30, 5), _
        New Point(35, 12), _
        New Point(24, 26), _
        New Point(12, 15), _
        New Point(5, 31), _
        New Point(7, 19) _
    }
        G_3.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        G_3.DrawPolygon(Pens.Black, pts)

        Dim myPoints() As Point



        ReDim myPoints(6)

        myPoints(0) = New Point(15, 70)
        myPoints(1) = New Point(25, 65)
        myPoints(2) = New Point(35, 70)
        myPoints(3) = New Point(15, 90)
        myPoints(4) = New Point(25, 95)
        myPoints(5) = New Point(35, 90)
        myPoints(6) = New Point(15, 70)

        'draw the polygon (connect the dots between the points in the array)

        G_3.DrawPolygon(Pen:=New Pen(Color.Blue, Width:=2), _
         points:=myPoints)


        ReDim myPoints(6)

        myPoints(0) = New Point(15, 20)
        myPoints(1) = New Point(25, 15)
        myPoints(2) = New Point(35, 20)
        myPoints(3) = New Point(35, 40)
        myPoints(4) = New Point(25, 45)
        myPoints(5) = New Point(15, 40)
        myPoints(6) = New Point(15, 20)

        'draw the polygon (connect the dots between the points in the array)

        G_3.DrawPolygon(Pen:=New Pen(Color.Blue, Width:=2), _
         points:=myPoints)


        'Dim myGraphics As Graphics

        Dim myRectangle As Rectangle
        Dim myPen As New Pen(Color:=Color.Blue, Width:=1)

        'return the current form as a drawing surface

        ' myGraphics = Graphics.FromHwnd(ActiveForm().Handle)

        'create a rectangle based on x,y coor. width & height

        myRectangle = New Rectangle(x:=5, y:=5, Width:=50, Height:=50)

        'draw the upper-right pie section

        G_3.DrawPie(Pen:=myPen, rect:=myRectangle, _
         startAngle:=0, sweepAngle:=-90)

        'draw the upper-left pie section

        G_3.DrawPie(Pen:=myPen, rect:=myRectangle, _
         startAngle:=-90, sweepAngle:=-90)

        'draw the bottom-left pie section

        G_3.DrawPie(Pen:=myPen, rect:=myRectangle, _
         startAngle:=-180, sweepAngle:=-90)

        'draw the bottom-right pie section 

        G_3.FillPie(New SolidBrush(Color.Chartreuse), _
         rect:=New Rectangle(x:=8, y:=8, Width:=50, Height:=50), _
         startAngle:=-270, sweepAngle:=-90)



    End Sub


#End Region





Código fuente del Simulador de Señales Electrónicas.
 (Incluye también los ficheros .dll de los controles LCD y Display 7 Segmentos)



Espero que os guste .....

Un saludo.

----------------------------------------------------------------------------------------------------------------------------------------------------------------
Por favor, si te ha gustado el blog, te ha ayudado o has visto algún proyecto interesante del que te has podido descargar alguna documentación por favor deja algún comentario. Gracias.
----------------------------------------------------------------------------------------------------------------------------------------------------------------

2 comentarios:

Deja tu comentario