Páginas

viernes, 24 de enero de 2014

"Control Display LCD con Visual Basic .NET y Arduino" Parte I

"Display LCD Visual Basic .NET"  "Crea tu control con Visual Basic .NET"


En esta ocasión voy a realizar una aplicación para controlar un display LCD de dos lineas y 16 caracteres (el cual esta basado en el controlador "HD44780U") a través de Visual Basic .NET y usando como interface hardware la tarjeta bien conocida de Arduino.


En la primera parte de este proyecto voy a crear un control .dll realizado con Visual Basic .NET y a continuación incluirlo en una aplicación ejecutable para poder controlar un LCD.

A continuación os muestro una imagen de como me ha quedado el control "LCD con Visual Basic .NET".



Además en este vídeo os muestro un ejemplo de aplicación para el manejo del Display LCD:



Bien aquí esta la primera parte del desarrollo. Como en otras ocasiones he desarrollado un archivo .dll que permite controlar el display LCD, de esta forma es mucho mas portable y fácil de usar, tanto como cualquier otro control gráfico de los que posee Visual Basic en el cuadro de Herramientas. Lo he desarrollado de la misma forma que hice el Control Display de 7 Segmentos:


Lo primero de todo para poder usar esta libreria .dll con el control es añadirla a nuestro proyecto. Como de la siguiente forma:

1. Pulsamos con el botón derecho sobre el cuadro de herramientas donde pone General y veréis como se despliega un menú emergente. En este aparecerá una opción que se llama Elegir elementos



2. Pulséis sobre esta opción y aparecerá un formulario con varias pestañas. Hacéis click sobre la que dice Componentes de .NET Framework  y pulsáis al botón de examinar.



3. Elegís el fichero .dll que queréis que se cargue. En este caso será el "Control Display LCD.dll"



Y veréis como en cuadro de herramientas, se nos ha cargado el nuevo control del Display LCD.




4. Por último añadimos nuestro nuevo control arrastrándolo como hacemos con cualquier otro.



y ya está ... a partir de ahí se puede hacer nuestra propia aplicación como queramos. Yo en este caso he realizado un ejemplo muy sencillo de una aplicación para controlar este Display y mostrar algunas de sus características. Es un ejemplo que muestra como se pueden desplazar los caracteres a modo de scroll y también como se puede cambiar el color de los datos mostrados en la pantalla del Display LCD.




Librería .dll del Control Display LCD




El código de la aplicación de test del Display es este:

'*****************************************************************************************
'                           LICENSE INFORMATION
'*****************************************************************************************
'   Example Application with Control_Display_LCD Version 1.0.0.0
'   It shows an example that how can use the user control for Visual Basic .NET
'
'   Copyright © 2014  
'   Rubén García Coronado 
'   Email: rubengaco13@gmail.com
'   Created: Jan 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/>.
'*****************************************************************************************

Public Class Form_Prueba_Control
    Inherits System.Windows.Forms.Form

#Region " Código generado por el Diseñador de Windows Forms "

    Public Sub New()
        MyBase.New()

        'El Diseñador de Windows Forms requiere esta llamada.
        InitializeComponent()

        'Agregar cualquier inicialización después de la llamada a InitializeComponent()

    End Sub

    'Form reemplaza a Dispose para limpiar la lista de componentes.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Requerido por el Diseñador de Windows Forms
    Private components As System.ComponentModel.IContainer

    'NOTA: el Diseñador de Windows Forms requiere el siguiente procedimiento
    'Puede modificarse utilizando el Diseñador de Windows Forms. 
    'No lo modifique con el editor de código.
    Friend WithEvents Timer1 As System.Windows.Forms.Timer
    Friend WithEvents Control_13 As Control_Display_LCD.Control_13
    Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox
    Friend WithEvents TextBox_Test_LCD As System.Windows.Forms.TextBox
    Friend WithEvents RadioButton_Serie As System.Windows.Forms.RadioButton
    Friend WithEvents RadioButton_Paralelo As System.Windows.Forms.RadioButton
    Friend WithEvents CheckBox_Desplazar_Texto As System.Windows.Forms.CheckBox
    Friend WithEvents CheckBox_Test_Color_LCD As System.Windows.Forms.CheckBox
    Friend WithEvents Label_About As System.Windows.Forms.Label
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.components = New System.ComponentModel.Container()
        Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form_Prueba_Control))
        Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
        Me.Label_About = New System.Windows.Forms.Label()
        Me.GroupBox1 = New System.Windows.Forms.GroupBox()
        Me.CheckBox_Test_Color_LCD = New System.Windows.Forms.CheckBox()
        Me.TextBox_Test_LCD = New System.Windows.Forms.TextBox()
        Me.RadioButton_Serie = New System.Windows.Forms.RadioButton()
        Me.RadioButton_Paralelo = New System.Windows.Forms.RadioButton()
        Me.CheckBox_Desplazar_Texto = New System.Windows.Forms.CheckBox()
        Me.Control_13 = New Control_Display_LCD.Control_13()
        Me.GroupBox1.SuspendLayout()
        Me.SuspendLayout()
        '
        'Timer1
        '
        Me.Timer1.Interval = 200
        '
        'Label_About
        '
        Me.Label_About.AutoSize = True
        Me.Label_About.Cursor = System.Windows.Forms.Cursors.Hand
        Me.Label_About.ForeColor = System.Drawing.Color.DimGray
        Me.Label_About.Location = New System.Drawing.Point(412, 53)
        Me.Label_About.Name = "Label_About"
        Me.Label_About.Size = New System.Drawing.Size(68, 13)
        Me.Label_About.TabIndex = 46
        Me.Label_About.Text = "&Acerca de ..."
        '
        'GroupBox1
        '
        Me.GroupBox1.Controls.Add(Me.CheckBox_Test_Color_LCD)
        Me.GroupBox1.Controls.Add(Me.TextBox_Test_LCD)
        Me.GroupBox1.Controls.Add(Me.RadioButton_Serie)
        Me.GroupBox1.Controls.Add(Me.Label_About)
        Me.GroupBox1.Controls.Add(Me.RadioButton_Paralelo)
        Me.GroupBox1.Controls.Add(Me.CheckBox_Desplazar_Texto)
        Me.GroupBox1.Location = New System.Drawing.Point(12, 114)
        Me.GroupBox1.Name = "GroupBox1"
        Me.GroupBox1.Size = New System.Drawing.Size(486, 72)
        Me.GroupBox1.TabIndex = 48
        Me.GroupBox1.TabStop = False
        Me.GroupBox1.Text = "Test LCD:"
        '
        'CheckBox_Test_Color_LCD
        '
        Me.CheckBox_Test_Color_LCD.AutoSize = True
        Me.CheckBox_Test_Color_LCD.Cursor = System.Windows.Forms.Cursors.Hand
        Me.CheckBox_Test_Color_LCD.Location = New System.Drawing.Point(164, 41)
        Me.CheckBox_Test_Color_LCD.Name = "CheckBox_Test_Color_LCD"
        Me.CheckBox_Test_Color_LCD.Size = New System.Drawing.Size(141, 17)
        Me.CheckBox_Test_Color_LCD.TabIndex = 47
        Me.CheckBox_Test_Color_LCD.Text = "Test Color LCD aleatorio"
        Me.CheckBox_Test_Color_LCD.UseVisualStyleBackColor = True
        '
        'TextBox_Test_LCD
        '
        Me.TextBox_Test_LCD.BackColor = System.Drawing.Color.Black
        Me.TextBox_Test_LCD.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.TextBox_Test_LCD.ForeColor = System.Drawing.Color.Red
        Me.TextBox_Test_LCD.Location = New System.Drawing.Point(18, 14)
        Me.TextBox_Test_LCD.MaxLength = 32
        Me.TextBox_Test_LCD.Name = "TextBox_Test_LCD"
        Me.TextBox_Test_LCD.Size = New System.Drawing.Size(287, 22)
        Me.TextBox_Test_LCD.TabIndex = 3
        Me.TextBox_Test_LCD.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
        '
        'RadioButton_Serie
        '
        Me.RadioButton_Serie.AutoSize = True
        Me.RadioButton_Serie.Checked = True
        Me.RadioButton_Serie.Cursor = System.Windows.Forms.Cursors.Hand
        Me.RadioButton_Serie.Location = New System.Drawing.Point(415, 17)
        Me.RadioButton_Serie.Name = "RadioButton_Serie"
        Me.RadioButton_Serie.Size = New System.Drawing.Size(49, 17)
        Me.RadioButton_Serie.TabIndex = 2
        Me.RadioButton_Serie.TabStop = True
        Me.RadioButton_Serie.Text = "Serie"
        Me.RadioButton_Serie.UseVisualStyleBackColor = True
        '
        'RadioButton_Paralelo
        '
        Me.RadioButton_Paralelo.AutoSize = True
        Me.RadioButton_Paralelo.Cursor = System.Windows.Forms.Cursors.Hand
        Me.RadioButton_Paralelo.Location = New System.Drawing.Point(324, 17)
        Me.RadioButton_Paralelo.Name = "RadioButton_Paralelo"
        Me.RadioButton_Paralelo.Size = New System.Drawing.Size(63, 17)
        Me.RadioButton_Paralelo.TabIndex = 1
        Me.RadioButton_Paralelo.Text = "Paralelo"
        Me.RadioButton_Paralelo.UseVisualStyleBackColor = True
        '
        'CheckBox_Desplazar_Texto
        '
        Me.CheckBox_Desplazar_Texto.AutoSize = True
        Me.CheckBox_Desplazar_Texto.Cursor = System.Windows.Forms.Cursors.Hand
        Me.CheckBox_Desplazar_Texto.Location = New System.Drawing.Point(18, 41)
        Me.CheckBox_Desplazar_Texto.Name = "CheckBox_Desplazar_Texto"
        Me.CheckBox_Desplazar_Texto.Size = New System.Drawing.Size(103, 17)
        Me.CheckBox_Desplazar_Texto.TabIndex = 0
        Me.CheckBox_Desplazar_Texto.Text = "Desplazar Texto"
        Me.CheckBox_Desplazar_Texto.UseVisualStyleBackColor = True
        '
        'Control_13
        '
        Me.Control_13.Cursor = System.Windows.Forms.Cursors.Hand
        Me.Control_13.Location = New System.Drawing.Point(12, 12)
        Me.Control_13.Name = "Control_13"
        Me.Control_13.Ruben_Color = Nothing
        Me.Control_13.Ruben_Input_LCD = Nothing
        Me.Control_13.Ruben_Input_Output = False
        Me.Control_13.Ruben_Nombre_LCD = Nothing
        Me.Control_13.Size = New System.Drawing.Size(488, 96)
        Me.Control_13.TabIndex = 47
        '
        'Form_Prueba_Control
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(510, 189)
        Me.Controls.Add(Me.GroupBox1)
        Me.Controls.Add(Me.Control_13)
        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
        Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
        Me.MaximizeBox = False
        Me.Name = "Form_Prueba_Control"
        Me.Text = "Control Display LCD con Visual Basic .NET"
        Me.GroupBox1.ResumeLayout(False)
        Me.GroupBox1.PerformLayout()
        Me.ResumeLayout(False)

    End Sub

#End Region


    Public Nombre_Aplicacion As String = "Control Display LCD with Visual Basic .NET"
    Public Fecha_Software As String = "05/03/2014"
    Public Version_Software As String = "Version 1.0.1" & " (" & Chr(223) & "eta)"
    Public Copyright_Software As String = Chr(174) & " " & Fecha_Software
    Dim Ticks As Integer = 0
    Dim S As Integer = 0
    Dim Segundos As Integer = 0
    Dim Longitud As Integer = 0

    Dim Indice_Caracteres As Integer = 0
    Dim Ticks_LCD As Integer = 0
    Dim S_LCD As Integer = 0
    Dim Mensaje_Linea1 As String = "   By Joe and   "
    Dim Mensaje_Linea2 As String = "  Alex's Daddy  "
    Dim Color_LCD_Default As String

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        '*****************************************************
        'SIMULACION DEL CONTROL POR MEDIO DE UN TIMER
        '*****************************************************
        Ticks_LCD = Ticks_LCD + 1
        S_LCD = Ticks_LCD Mod 1


        If CheckBox_Desplazar_Texto.Checked = True Then

            Me.RadioButton_Serie.Enabled = True
            Me.RadioButton_Paralelo.Enabled = True


            If RadioButton_Serie.Checked = True Then
                'Bucle de movimiento en el LCD en serie
                Indice_Caracteres = Indice_Caracteres + 1
                Me.Control_13.Ruben_Input_LCD = Space(Indice_Caracteres) & TextBox_Test_LCD.Text
                If Indice_Caracteres = 32 Then
                    Indice_Caracteres = 0
                    Me.Control_13.Ruben_Input_LCD = TextBox_Test_LCD.Text
                End If
            End If
            If RadioButton_Paralelo.Checked = True Then
                'Bucle de movimiento en el LCD en paralelo
                Indice_Caracteres = Indice_Caracteres + 1
                Me.Control_13.Ruben_Input_LCD = Mid(Space(Indice_Caracteres) & Mid(TextBox_Test_LCD.Text, 1, 16), 1, 16) & Mid(Space(Indice_Caracteres) & Mid(TextBox_Test_LCD.Text, 17, 33), 1, 16)
                If Indice_Caracteres = 16 Then
                    Indice_Caracteres = 0
                    Me.Control_13.Ruben_Input_LCD = TextBox_Test_LCD.Text
                End If
            End If
        End If

        If CheckBox_Desplazar_Texto.Checked = False Then

            Me.RadioButton_Serie.Enabled = False
            Me.RadioButton_Paralelo.Enabled = False
            Me.TextBox_Test_LCD.Text = Mensaje_Linea1 & Mensaje_Linea2
            Me.Control_13.Ruben_Input_LCD = Me.TextBox_Test_LCD.Text

            If Me.CheckBox_Test_Color_LCD.Checked = False Then
            Else
                Me.Control_13.Ruben_Color = "144;238;144"
            End If
        End If


        If Me.CheckBox_Test_Color_LCD.Checked = True Then
            Dim R, G, B As Integer

            R = CInt(Math.Floor((255 - 0 + 1) * Rnd())) + 0
            G = CInt(Math.Floor((255 - 0 + 1) * Rnd())) + 0
            B = CInt(Math.Floor((255 - 0 + 1) * Rnd())) + 0

            Me.Control_13.Ruben_Color = "" & R & ";" & G & ";" & G & ""

        Else

        End If


    End Sub
    Private Sub Label_About_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label_About.Click
        MessageBox.Show(Me, Nombre_Aplicacion & vbCrLf & vbCrLf & "Software developed by Joe and Alex's Daddy" & Chr(169) & vbCrLf & Version_Software & Copyright_Software, "About ", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
    End Sub

    Private Sub TextBox_Test_LCD_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox_Test_LCD.TextChanged
        Indice_Caracteres = 0
        Me.Control_13.Ruben_Input_LCD = TextBox_Test_LCD.Text
    End Sub

    Private Sub RadioButton_Serie_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton_Serie.CheckedChanged
        Indice_Caracteres = 0
        Me.Control_13.Ruben_Input_LCD = TextBox_Test_LCD.Text
    End Sub

    Private Sub RadioButton_Paralelo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton_Paralelo.CheckedChanged
        Indice_Caracteres = 0
        Me.Control_13.Ruben_Input_LCD = TextBox_Test_LCD.Text
    End Sub

    Private Sub Form_Prueba_Control_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Control_13.Ruben_Input_Output = True
        Me.RadioButton_Paralelo.Checked = True
        Me.CheckBox_Desplazar_Texto.Checked = False
        Me.TextBox_Test_LCD.Text = Mensaje_Linea1 & Mensaje_Linea2
        Me.Timer1.Enabled = True
    End Sub


End Class


Código fuente de la aplicación. 
(Incluye también la librería .dll)



Espero que os guste ....!  Hasta pronto .... y a por la parte II!

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.
----------------------------------------------------------------------------------------------------------------------------------------------------------------

1 comentario:

  1. Me parece muy interesante el desarrollo de la pantalla LCD. Me gustaría tener el código del archivo "Control Display LCD.dll", para cambiar el tamaño de la pantalla del LCD para una aplicación que quiero desarrollar. Un tablero de control.
    Quedo atento a su colaboración. Y cuando lo termine se lo envio

    ResponderEliminar

Deja tu comentario