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.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Muy bonito proyecto, gracias por compartirlo.
ResponderEliminarrolesp
Se ve muy interesante
ResponderEliminar