Vb Interfaces Para Pic

58
Visual Basic 2008 - Creando Interfaces para PIC desde CERO Este tutorial, introduce al mundo de la programación para poder hacer interfaces para microcontroladores para controlar el puerto USB, COM, LTP según va apareciendo nuevas tecnologías. 24/05/2009 www.ucontrol.com.ar Ariel

Transcript of Vb Interfaces Para Pic

Page 1: Vb Interfaces Para Pic

Visual Basic 2008 -

Creando Interfaces para PIC desde

CERO Este tutorial, introduce al mundo de la programación para poder hacer interfaces para microcontroladores para controlar el puerto USB, COM, LTP según va apareciendo nuevas tecnologías. 24/05/2009 www.ucontrol.com.ar Ariel

Page 2: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 2

Visual Basic 2008 - Creando

Interfaces para PIC desde CERO

La versión que voy a utilizar es la Visual Basic 2008 Express Edition, que se puede

descargar desde aquí (cuidando de elegir la versión en español):

Una vez seleccionado el idioma, presionamos el link "Download" y se nos preguntará si

queremos descargar el archivo "vbsetup.exe" de 2.6MB:

Eso va a demorar muy poco tiempo, ya que solo es un instalador. Cuando lo ejecutemos

comenzará la verdadera descarga.

Page 3: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 3

Esta es la pantalla que veremos al comenzar la instalación:

Page 4: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 4

Debemos aceptar la licencia (no estaría mal que le des una leída) antes de seguir:

Page 5: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 5

Conviene conservar la ruta por defecto, así todos los que sigamos este pequeño tutorial

tenemos los archivos en los mismos lugares:

Page 6: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 6

Ahora si comenzará la verdadera descarga, que implica unos 180MB, así que puede demorar

algunos minutos horas:

Cuando esta etapa termine, se nos invitará a reiniciar el ordenador:

Page 7: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 7

Después del reinicio, buscamos entre los programas instalados en nuestro ordenador y

arrancamos por primera vez la suite. O casi, ya que antes de ir a la pantalla de trabajo se

efectuaran algunos ajustes que nos obligarán a esperar unos minutos más:

Finalmente, después de (en mi caso) unas dos horas, tenemos por fin instalado el Visual

Basic 2008 Express Edition (VB o Visual Basic de ahora en más).

El IDE:

IDE son las iniciales, en ingles, de Integrated Development Environment, algo así como

entorno de desarrollo integrado.

Se trata de un programa que nos pone a disposición las herramientas que necesitamos

para programar en un (o en varios) lenguajes de programación.

Page 8: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 8

En el caso del Visual Basic 2008, lo primero que vemos es la imagen de la figura anterior. Si

vamos a "Archivo" y luego "Nuevo proyecto..." aparece la ventana siguiente:

La ventana nos mostrará las opciones con las que contamos a la hora de decidir el carácter que

tendrá nuestro desarrollo. Son algunos menos que las disponibles en la versión completa del

Visual Studio, pero no están nada mal para ser gratis.

Page 9: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 9

Comenzaremos viendo como se construye un programa “normal” para Windows. Para ello,

hacemos dos veces clic sobre el primer icono, el de la leyenda “Aplicación para Windows”.

Aparecerá algo parecido a lo siguiente:

Aquí debemos hacer una aclaración. Debe haber pocos programas que brinden la posibilidad

de personalización de sus barras de herramientas como este IDE. Seria muy conveniente que

no cambiemos de lugar las barras, cuadros o botones por ahora, para que la disposición se

parezca lo más posible a las capturas de pantalla que ofrecemos como muestra. Eso hará más

fácil de seguir las explicaciones.

En la parte superior de la ventana se encuentra la barra del menú principal Desde allí es

posible acceder a casi todas las opciones del Visual Basic, que iremos viendo a medida que

resulten necesarias.

Más abajo hay una fila de iconos, que representan las tareas que utilizaremos con mayor

frecuencia. Si alguna vez utilizaste alguno de los integrantes del paquete Microsoft Office, ya

sabes como se utilizan estos iconos.

Arriba, a la derecha, tenemos el “Explorador de soluciones”, que es básicamente una lista de

cada parte que compone nuestro proyecto, y que proporciona una forma rápida de llegar a

cada uno de ellos.

Page 10: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 10

Abajo de esto se encuentra la zona que muestra (y nos permite modificar) las propiedades del

objeto o control que hayamos seleccionado en ese momento. Será una de las zonas que mas

emplearemos del IDE.

Por fin, en la parte central de la ventana vemos el “formulario”, que contendrá los elementos

que conforman nuestra aplicación. En el momento que el programa que estamos creando este

listo, será la ventana que lo contenga. Allí depositaremos los botones, menues, etiquetas, y

todo lo que necesite nuestra aplicación para llevar a cabo su tarea.

Por ultimo, sobre la derecha, hay un acceso que lleva al “Cuadro de herramientas”. Este

menú, que se divide en varias zonas, será el que proporcione todos los controles que

necesitamos para completar nuestra aplicación. La forma de colocar alguno de ellos sobre el

“formulario” es tan sencilla como “arrastrarlo” sobre este.

Formularios y controles

Durante algunos días nos ocuparemos de los formularios y los controles más comunes

que podemos emplear en nuestras aplicaciones. También veremos cuales son sus

propiedades más útiles y como cambiarlas.

Resulta bastante complicado elegir un orden determinado al intentar explicar una

herramienta como Visual Basic. Nosotros vamos a seguir un camino poco ortodoxo,

tomando atajos y tratando temas bastante distintos entre si, pero que nos permitirán

crear pequeñas aplicaciones desde el comienzo.

Como habíamos mencionado, el “marco” encargado de contener a nuestra aplicación es

el “formulario”. Cuando arrancamos Visual Basic y elegimos crear una aplicación para

Windows, automáticamente el IDE nos proporciona un formulario con el nombre

“Form1”. Este formulario tiene una serie de propiedades que pueden modificarse

fácilmente: basta con editar el valor que aparece a la derecha de su nombre.

Page 11: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 11

Asumimos que el lector tiene a disposición la ayuda que brinda MSDN Library, que puede

descargarse e instalarse junto a Visual Basic, para consultar los detalles de cada propiedad.

Solo explicaremos las que vayan siendo necesarias para entender los ejemplos que vayamos

planteando.

Page 12: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 12

El titulo del formulario

Una de las propiedades que primero cambiamos de un formulario es “Text”. El texto que

contiene este campo es el que aparecerá como titulo de nuestra ventana. Puedes hacer click

con el mouse sobre el texto que tiene por defecto, y editarlo para escribir el titulo que quieras

muestre el formulario:

Como puedes ver, muy fácilmente hemos hecho que el formulario tenga como titulo "uControl

- Electrónica Fácil". Cuando nuestra aplicación esté lista, ese será el nombre de la ventana que

la contenga.

En Visual Basic también pueden cambiarse el valor de estas propiedades mediante órdenes

incluidas en el programa. Por ejemplo, podemos utilizar

Me.Text = "uControl - Electrónica Fácil"

para lograr el mismo resultado. “Me” es el formulario actual, en este caso representa a Form1.

Siempre que el código que escribimos este dentro del mismo formulario, nos referimos a él

como “Me”. Luego del “.” viene el nombre de la propiedad que queremos cambiar, en este

caso “Text”. Y por ultimo, después del igual y entre comillas (por ser una cadena de texto),

“uControl - Electrónica Fácil”, que es el titulo que queremos para nuestra ventana.

Page 13: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 13

Para poder escribir código, debemos dar un doble click en el formulario, y aparecerá el editor

con algo escrito. Intentemos modificar el texto para que quede así:

Hay otra forma de escribir el código, también muy fácil: basta con hacer un clic en la solapa

que lleva el nombre del formulario (en este caso “Form1.vb”). El IDE automáticamente escribe

por nosotros los encabezados de los procedimientos, por lo que solo escribimos nuestro

código.

Si presionamos la tecla "F5", Visual Basic ejecutará nuestro pequeño programa y mostrará el

formulario siguiente:

Page 14: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 14

Algunas propiedades solo aceptan valores de verdadero o falso. En esos casos, al hacer clic a la

derecha del nombre de la propiedad, se abre un menú con ambas alternativas. Por ejemplo

“Locked”, que indica si nuestro formulario podrá o no ser cambiado de tamaño mediante el

procedimiento normal de arrastrar con el ratón sus bordes, puede ser configurado como

“True” (Verdadero) o “False” (Falso):

El ícono de nuestra aplicación

Otra propiedad que posiblemente quieras cambiar es “Icon”. Si haces clic sobre ella, se abrirá

un cuadro de dialogo que te permite elegir el archivo “.ICO” que desees sea el icono que se

muestre en la esquina superior de la ventana:

Page 15: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 15

El tamaño por defecto del formulario

Al igual que muchas otras características, el tamaño del formulario también puede ser

cambiado mediante la modificación de sus propiedades. Y esto puede hacerse desde el código.

Bastará con agregar

Me.Size.Width = ancho deseado (en pixeles)

O

Me.Size.Height = altura deseada (en pixeles)

donde lo necesitemos. Esto es muy útil, ya que nos proporciona un mecanismo dinámico para

el cambio de los atributos del formulario en tiempo de ejecución. Puedes probar agregando

Me.Size.Width = 480

(donde 480 es el ancho deseado) y ver que ocurre al correr el programa. Si deseas conocer

todos los atributos que puedes modificar de los formularios (¡son muchos!) dale un vistazo a la

ayuda.

Los controles

Una de las primeras impresiones que se tiene al entrar al IDE de Visual Basic es que

hay controles que no utilizaremos nunca. Sin embargo, con el tiempo vamos viendo que

todos son útiles en algún momento, y afortunadamente Microsoft los ha puesto a

disposición.

Los controles simplemente se arrastran con el ratón desde la paleta que está a la

izquierda de la pantalla hasta el formulario. Vamos a probar como hacerlo. Intenta

arrastrar 3 botones (Button), una etiqueta (Label), 3 casillas (CheckBoxes) y un cuadro

de texto (TextBox). No importa demasiado (por ahora) su posición sobre el formulario,

aunque si pones un poco de cuidad, podrás colocarlos tal como se ven en la imagen:

Page 16: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 16

Page 17: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 17

Una vez hecho esto, vamos a cambiarles a todos estos controles el texto que muestran. Los

vamos seleccionando de a uno, utilizando el ratón, y modificamos en la ventana “propiedades”

el valor de la propiedad “Text”. Toma tu tiempo, y haz que tus controles queden tal como se ve

aquí:

¿Fácil, verdad? Bien, hemos cambiado el nombre que muestran, aunque los controles todavía

tienen nombres tan poco amigables como “Button1” o “CheckBox3”. Por ahora los dejaremos

así, pero es bueno que sepas que el nombre también es una propiedad que se puede cambiar.

Si bien no hace al aspecto de nuestro programa, el uso de nombres descriptivos para los

controles que usamos en nuestra aplicación hará más fácil la confección del programa.

Vamos a ver como hacer para que los controles que hemos agregado ejecuten alguna tarea

cuando el usuario interactúa con ellos. La forma de hacer esto es, simplemente, escribir el

código necesario en el evento deseado. Dicho en palabras simples, Un evento es un mensaje

que envía un objeto anunciando que ha sucedido algo: un click con el mouse, un tecla

presionada, una ventana que se mueve de lugar, etc.

Page 18: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 18

Como siempre, un ejemplo puede resultar mucho más simple de entender. Hagamos que

cuando presionamos el tercer botón (el que tiene el texto “Salir”), haciendo click con el mouse

sobre él, el programa termine. En BASIC, la instrucción que finaliza la ejecución de un

programa es “End”. Para escribir esta instrucción en el evento “Click” del Button3 simplemente

le damos doble clic a este botón en la ventana principal del IDE, y Visual Basic nos posicionará

en el lugar correcto. Una vez editado, este debería ser el aspecto del código:

La flecha indica el lugar donde debemos escribir “End”. Como ves, el entorno del Visual Basic

ha escrito el encabezado del procedimiento por si solo. Una vez hecho esto, veremos que si

corremos el programa, al hacer “clic” sobre el botón “Salir”, el programa termina. Los demás,

al no tener código asociado, no efectúan ninguna tarea.

Page 19: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 19

Tenemos dos botones más para programar. Aprovechemos para ver como las acciones que se

llevan a cabo sobre un control pueden influir en otro. Vamos a darle doble clic al botón

“Escribir” para acceder a su evento “clic”, y escribir allí el código necesario para que el

TextBox1 (el pequeño cuadro de texto de la parte superior del formulario) muestre el texto

“Hola uControl!” cuando lo presionamos. El código debería quedar así:

Si ejecutamos el programa, veremos que el cuadro de texto aparece vacio. Al hacer clic sobre

“Escribir”, su contenido cambia a “Hola uControl!”. Lo que hemos hecho ha sido modificar el

evento “clic” del Button1 para que modifique la propiedad “Text” del control TextBox1. Resulta

bastante más difícil describir el proceso que llevarlo a cabo.

Page 20: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 20

El contenido del TextBox1 puede ser modificado utilizando el ratón y el teclado, editando o

copiando su contenido. Pero también podríamos modificarlo mediante código.

De la misma manera que programamos el comportamiento del primer botón, podemos

modificar el segundo para que al presionarlo limpie el contenido del cuadro de texto. Los

pasos son los mismos, pero la cadena asignada a TextBox1.Text debe estar vacía:

¡Listo! Ahora podemos escribir con un botón, borrar con el otro, y salir con el tercero. Y lo

mejor de todo es que hemos escrito muy poco código para lograrlo.

Page 21: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 21

CheckBoxes

Con todo lo visto hasta aquí, no debería resultarnos muy difícil hacer que si el usuario marca

alguno de las casillas (CheckBoxes) del formulario, se modifique el contenido del cuadro de

texto. En realidad, el procedimiento es el mismo que hemos empleado para modificar el

comportamiento de los primeros dos botones: le damos doble clic al CheckBox que queremos

editar, y escribimos el código necesario. Por ejemplo, en la figura siguiente vemos como hacer

para que el al marcar el CheckBox1 el TextBox1 muestre la frase "12 Pines":

Esto es lo que ocurre si le damos "run" al programa (con "F5"):

Ya puedes modificar por ti mismo los otros tres para que escriban el número de pines que

tiene cada microcontrolador. También puedes comprobar que el botón “Borrar” sigue

borrando el contenido del TextBox1, y que el botón “Escribir” sigue escribiendo “Hola

uControl!” independientemente del contenido del cuadro de texto.

Page 22: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 22

El código completo debería verse así:

Por supuesto, el programa tiene un defecto: El TextBox1 escribe lo que le pedimos al hacer clic,

independientemente de que estemos marcando o desmarcando el CheckBox

correspondiente. Por supuesto, no es un problema de Visual Basic (que hace exactamente lo

que le hemos indicado), sino de nuestro código, que no tiene en cuenta esta situación.

Sentencias para el control del programa

Este grupo de instrucciones pueden modificar el orden en que se ejecutan las demás

sentencias que componen nuestro programa. Básicamente, existen dos grupos de

instrucciones que pueden llevar a cabo estas tareas: las que determinan la ejecución de

un trozo de código tomando una decisión, y las que permiten repetir un grupo de

sentencias un número determinado de veces. Comenzaremos analizando las del primer

grupo.

Page 23: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 23

Sentencias de decisión

Una instrucción de este tipo representa una división en el flujo normal del programa. A

partir del punto del código en que escribimos una instrucción de este tipo se produce

una “división” en dos o mas alternativas. Del resultado de la evaluación de una

condición (que forma parte de la sentencia de decisión) dependerá cual de las

alternativas es la que finalmente se ejecuta.

Dentro de este grupo veremos las sentencias If, Choose y Select Case.

If…Then

Existen varias maneras de utilizar esta sentencia. Su forma más simple ocupa solo una

línea de código, y tiene la forma siguiente:

If condición then sentencia

A menudo los programadores se refieren a este formato como “If de una línea”, y se

emplea generalmente para asignar un valor a alguna variable cuando se da una

condición determinada. Veamos un ejemplo.

Supongamos que si la tensión leída de alguna forma (que veremos más adelante) desde

un sensor conectado al ordenador es mayor a 5V, debemos guardar en la variable

“tension_estado” el valor “sobretensión”. La tensión medida está almacenada en la

variable “tension_valor”. La sentencia If que realiza esta comprobación y (eventual)

asignación es la siguiente:

If tension_valor > 5 then tension_estado = “sobretensión”

La sentencia en cuestión, en caso de que la condición sea verdadera (es decir, que la

tensión sea efectivamente mayor a 5 voltios), ejecuta la asignación que se encuentra a la

derecha del “then”, haciendo que tension_estado contenga la cadena “sobretensión”. Y

luego continuará con la sentencia siguiente.

En caso de que “tension_valor” sea igual o menor a 5, el programa continuará con la

sentencia siguiente a la del ejemplo sin realizar ninguna asignación.

Hay una variación posible al “If de una línea”, y consiste en el agregado de la cláusula

“else”. Dicha sentencia tiene la siguiente forma:

If condición then sentencia1 else sentencia2

Este tipo de construcción es muy útil cuando, en función del resultado que arroje la

evaluación de la condición deban ejecutarse uno u otro (pero no ambos) grupo de

instrucciones.

Page 24: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 24

Nuevamente, un ejemplo nos aclarará mejor la cuestión. Supongamos que queremos

asignar a la variable tension_estado el valor “sobretensión” o “normal” dependiendo si

es mayor o no de 5 Voltios. Nuestro “If de una línea” quedará como sigue:

If tension_valor > 5 then tension_estado = “sobretensión” else

tension_estado = “normal”

Al ejecutar esa línea, Visual BASIC decidirá si la condición es o no verdadera, y en

función del resultado ejecutará la asignación que se encuentra a la derecha del ”then” o

la que está después del “else”. Independientemente de cual sea el resultado, el programa

(luego de realizar la asignación correspondiente) seguirá con la línea siguiente a la del

“if…”.

Por supuesto, nada de esto sirve cuando necesitamos, luego de evaluar una condición,

ejecutar un grupo de instrucciones y no solamente una. En esos casos, si el número de

instrucciones es pequeño, podemos optar por separarlas por dos puntos:

If condición then sentencia1 : sentencia2 : sentencia3 : ….

En caso de que la condición sea verdadera, se ejecutarán todas las sentencias que están

luego del “then”, en riguroso orden de izquierda a derecha. El mismo truco puede

emplearse para colocar varias sentencias después del “else”.

Pero aún así, hay casos en que esto no basta. Veamos que podemos hacer.

If...Then multilinea

Por ejemplo, no podemos poner otra sentencia “If…” a continuación del “then” o “else”.

Para estos casos tenemos la “versión larga” del “If…”, que ocupa todas las líneas que

haga falta, y que, en la practica, es la que más utilizaremos. El formato de esta

alternativa es la siguiente:

If condición then

sentencia1

sentencia2

sentencia3

….

End If

Page 25: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 25

El funcionamiento es el mismo que cuando utilizamos los “:” en la versión de una sola

línea para separar las sentencias unas de otras, pero se agrega la clausula “End If” al

final para que el compilador sepa donde termina el bloque de instrucciones

correspondientes al “If…” y donde comienzan las que pertenecen al resto del programa.

Si realizamos el ejemplo anterior con este formato, nos quedaría:

If tension_valor > 5 then

tension_estado = “sobretensión”

End If

Ahora ya sabes por que, cada vez que pueden, los programadores eligen el “If de una línea”.

Pero donde realmente se luce es en los casos que el código a ejecutar es mas extenso, ya que

no solo permite un numero (teóricamente) infinito de sentencias de todo tipo en su interior, si

no que es mucho más legible que el “If de una línea” con sentencias separadas por “:”. Y por

supuesto, puede usarse con el “Else”:

If condición then

Sentencia_v1

Sentencia_v2

Sentencia_v3

….

Else

Sentencia_f1

Sentencia_f2

Sentencia_f3

….

End If

Pero lo más interesante es que pueden “anidarse” sentencias condicionales, unas dentro de

otras. Eso permite la toma de decisiones realmente complejas. Y si somos ordenados

(comentando e indentando el código a conciencia), el programa seguirá siendo legible a pesar

de la longitud que pueda tener.

Veamos un ejemplo. Supongamos que tenemos una variable, llamada “sujeto_sexo”, cuyo

Page 26: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 26

valor puede ser “H” o “M” (por “Hombre”o “Mujer”), y otra llamada “sujeto_edad” que

contiene (¡como no!) la edad del sujeto. El siguiente código:

If sujeto_sexo = “H” then „Si el sujeto es HOMBRE

If sujeto_edad > 18 then „Y tiene más de 18 años…

sujeto = “Varón mayor de edad”

Else „Si no….

Sujeto = “Varón menor de edad”

End If

Else „Si el sujeto es MUJER

If sujeto_edad > 18 then „Y tiene más de 18 años…

sujeto = “Mujer mayor de edad”

Else „Si no….

Sujeto = “Mujer menor de edad”

End If

End If

coloca en la variable “sujeto” una descripción de la persona basada en los datos conocidos.

Puede verse en que forma se han “anidado” un If dentro de otro. La indentación del código

permite identificar fácilmente cada parte del programa.

IIF

Para terminar con esta indispensable instrucción, aprenderemos a utilizar el “If…” como

función. Efectivamente, es posible utilizar esta sentencia como si fuese una función. Luego de

ser evaluada la condición, devuelve en la variable el valor que se encuentra después de la

primer “,” (condición verdadera) o el que se encuentra después de la segunda (condición falsa).

La forma es la siguiente:

Variable = IIF(condición, valor1, valor2)

Esta puede ser una herramienta interesante, y en muchos casos puede reemplazar al “If de

una línea”. Veamos uno de los ejemplos anteriores, aquel de la tensión leida de alguna forma

desde un sensor conectado al ordendors, “traducido” a este nuevo formato:

tension_estado = IIF ( tension_valor > 5, “sobretensión”, “normal”)

Como puede verse, una vez comprendida la sintaxis puede ser una buena forma de escribir un

código claro.

Page 27: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 27

Pero no terminan aquí las ventajas del IIF. También puede formar parte de otras sentencias,

como el FOR…NEXT. Aún a riesgo de adelantarnos, veamos como podríamos hacer un bucle

que cuente hasta 20 o hasta 50 dependiendo del valor de una variable:

For i = 1 to IIF(variable = 1, 20, 50)

….

….

….

Next i

Si “variable” es 1, el bucle se ejecutará 20 veces. Caso contrario, se ejecutará 50. El código

equivalente, de no existir el IIF podría escribirse así:

If variable = 1 then

For i = 1 to 20

….

….

….

Next i

Else

For i = 1 to 50

….

….

….

Next i

End If

O asi:

If variable = 1 then limite = 20 else limite = 50

For i = 1 to limite

….

….

….

Next i

Como puede verse, la forma mas corta de todas es la que emplea el IFF.

Hemos aprendido como hacer que nuestro programa pueda “tomar decisiones” utilizando

algunas de las varias formas que posee la sentencia “if…then”. A medida que vayamos

escribiendo nuestros propios programas seremos capaces de determinar rápidamente cual es

la más conveniente en cada ocasión.

Page 28: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 28

Choose() y Select Case

Seguimos avanzando. Analizaremos en profundidad las sentencias destinadas a

controlar el flujo del programa, y proporcionando ejemplos que sirvan para su mejor

entendimiento. Concretamente, veremos como sacar provecho a Choose() y Select Case.

Como hemos visto antes, existe un grupo de instrucciones que tienen la capacidad de

modificar el orden en que se ejecutan las demás sentencias de nuestro programa. Ya

aprendimos a utilizar “If…Then”, la instrucción de este tipo que se utiliza con mayor

frecuencia. Ahora es el turno de las dos restantes: Choose() y Select Case.

Choose()

Esta función recibe una lista de parámetros, de los cuales el primero se utiliza como

índice para determinar cual de los demás se devuelve al ser evaluada. Esto puede

parecer difícil de entender, pero en realidad, como demostraremos con los ejemplos, es

muy simple. El formato de Choose() es el siguiente:

Variable1 = Choose (indice, valor1, valor1, valor1, valor1,….,

valorN)

Al ejecutarse esta sentencia, “Variable1” tomará alguno de los valores de la serie

“Valor1” a “ValorN”. El contenido de la variable “indice” será el que determine cual

resulta elegido: si “indice” es igual a 1, Choose() hará que “Variable1” tome el valor de

“Valor1”; si “indice” es igual a 2 tomará el de “Valor2”; y así sucesivamente.

Pero un ejemplo nos ayudara aún más a comprender el funcionamiento de Choose():

supongamos que tenemos que elegir un componente de una lista, donde el valor 1 está

asignado al resistor, el 2 al condensador y el 3 al transistor. Y queremos que la variable

“Variable1” almacene la palabra “resistor”, “condensador ” o “transistor” en función del

valor de la variable “componente”. Usando Choose(), se haría de la siguiente forma:

variable1 = Choose(componente, "resistor", "condensador ",

"transistor")

Page 29: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 29

Si hubiésemos querido hacer lo mismo utilizando “If…Then”, el programa sería mucho mas

extenso (y quizás mas confuso):

Dim variable1 As String

Dim componente As Integer

If componente = 1 Then

variable1 = "resistor"

Else

If componente = 2 Then

variable1 = "condensador "

Else

'asumo que si componente no es 1 ni 2, es 3.

variable1 = "transistor"

End If

End If

Page 30: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 30

Select Case

Esta instrucción es ideal para utilizar en aquellas situaciones en que debemos elegir una

alternativa de entre muchas. Si bien Choose() hace mas o menos esto mismo (“If…Then”

también), por lo general “Select Case” resulta más fácil de leer. Particularmente, yo prefiero

utilizar “Choose()” cuando quiero que el código (fuente) sea compacto, y “Select Case” cuando

hay muchas alternativas, pero cada programador elije la forma que cree más conveniente.

Su formato es el siguiente:

Select Case <expresión a evaluar>

Case <lista de expresiones1>

'Instrucciones a ejecutar

Case <lista de expresiones2>

'Instrucciones a ejecutar

Case <lista de expresiones3>

'Instrucciones a ejecutar

Case <lista de expresionesN>

'Instrucciones a ejecutar

Case Else

'Instrucciones a ejecutar si no se cumple

' ninguna de las listas de expresiones anteriores

End Select

La <expresión a evaluar> puede ser algo tan simple como una variable, o una expresión más

compleja que Visual Basic resolverá antes de elegir que grupo de instrucciones ejecutar. Las

<lista de expresiones> que siguen a cada sentencia “Case” se evalúan, y de ser verdaderas (solo

debería serlo una de ellas) se ejecutan las sentencias que estén a continuación.

En caso de que ninguna de las <lista de expresiones> sea verdadera, se ejecutan las

instrucciones que están a continuación del “Case Else”. Esta sección no es obligatoria. Si no

existe “Case Else” y ninguna de las <lista de expresiones> es verdadera, el programa no

ejecutará nada de lo que hay dentro de la estructura.

Veamos como podríamos resolver el ejemplo de los componentes visto antes, usando Select

Case:

Select Case componente

Case 1

variable1 = "resistor"

Case 2

variable1 = "condensador"

Case 3

variable1 = "transistor"

End Select

Page 31: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 31

Si quisiésemos que, cuando “componente” tiene un valor distinto de 1, 2 o 3 “Variable1” fuese

igual a la palabra “Error”, podemos agregar la sección “Case Else”:

Select Case componente

Case 1

variable1 = "resistor"

Case 2

variable1 = "condensador"

Case 3

variable1 = "transistor"

Case Else

variable1 = "Error"

End Select

Respecto de las expresiones que pueden utilizarse a continuación de las cláusulas “Case”, no

tiene por que ser necesariamente un numero. Supongamos que queremos que si

“componente” vale 1,2 o 3, “Variable1” sea igual a “Correcto”. No necesitamos usar tres

“Case” diferentes, sino que podemos hacerlo en uno solo, separando los valores por comas.

Quedaría así:

Select Case componente

Case 1,2,3

variable1 = "Correcto"

Case Else

variable1 = "Error"

End Select

Page 32: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 32

En estos casos, donde queremos hacer lo mismo para un grupo de valores comprendidos en un

rango determinado, también podemos utilizar la cláusula “To”. El siguiente código hace

exactamente lo mismo que el visto recién:

Select Case componente

Case 1 To 3

variable1 = "Correcto"

Case Else

variable1 = "Error"

End Select

Resulta evidente que su la lista de valores es larga, “To” simplifica mucho el código.

En todos los ejemplos vistos, hemos efectuado alguna acción cuando el valor de <expresión a

evaluar> es igual a un valor determinado. Pero puede darse el caso de que necesitemos hacer

algo cuando la <expresión a evaluar> sea mayor, menor o diferente a un valor determinado.

Para ello, debemos utilizar el operador “Is”. Literalmente, el significado, en español, de este

operador es “Es”. Su uso brinda una gran flexibilidad a la <expresión a evaluar>. Veamos un

ejemplo:

Select Case valor_tension

Case Is < 12

variable1 = "Baja tensión"

Case Else

variable1 = "12V o más"

End Select

El código anterior guardará en “Variable1” el texto "Baja tensión" solo cuando el valor de

“tension” sea menor a 12.

En estos casos, donde queremos hacer lo mismo para un grupo de valores comprendidos en un

rango determinado, también podemos utilizar la cláusula “To”. El siguiente código hace

exactamente lo mismo que el visto recién:

Select Case componente

Case 1 To 3

variable1 = "Correcto"

Case Else

variable1 = "Error"

End Select

Resulta evidente que su la lista de valores es larga, “To” simplifica mucho el código.

En todos los ejemplos vistos, hemos efectuado alguna acción cuando el valor de <expresión a

evaluar> es igual a un valor determinado. Pero puede darse el caso de que necesitemos hacer

algo cuando la <expresión a evaluar> sea mayor, menor o diferente a un valor determinado.

Para ello, debemos utilizar el operador “Is”. Literalmente, el significado, en español, de este

operador es “Es”. Su uso brinda una gran flexibilidad a la <expresión a evaluar>. Veamos un

Page 33: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 33

ejemplo:

Select Case tension_medida

Case Is < 12

variable1 = "Baja tensión"

Case Else

variable1 = "12V o más"

End Select

El código anterior guardará en “Variable1” el texto "Baja tensión" solo cuando el valor de

“tension_medida” sea menor a 12.

Para terminar con “Select Case”, vamos a resolver un problema utilizando todo lo visto hasta

aquí.

Supongamos por un momento que en un variable tenemos el valor de un resistor, y que

debemos, en función de su valor, determinar que en que rango se encuentra (ohms, Kohms o

Mohms). Mira el código fuente siguiente e intenta comprender que hace cada línea:

Dim variable1 As String

Dim edad As Integer

valor_resistor = 47000

Select Case valor_resistor

Case 0

variable1 = "¡No hay resistencia!"

Case 1 to 999

variable1 = "Ohms"

Case 1000 To 999999

variable1 = "Kohms"

Case Is > 999999

variable1 = "Mohms"

Case Else

variable1 = "¡No deberia haber aparecido esta

leyenda!"

End Select

Seguramente podrás descubrir, leyendo el programa, cual es el valor de “Variable1” una vez

ejecutado el código anterior, verdad?

Page 34: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 34

Bucles

Comenzaremos a analizar las diferentes instrucciones que Visual BASIC dispone para

la construcción de bucles (o reiteraciones). Su comprensión nos ayudará a crear

programas capaces de realizar tareas más complejas y útiles.

Es muy difícil encontrar un problema que implique el procesamiento de datos que no

requiera de algún tipo de repetición. Si solo tuviésemos que llevar a cabo una acción

determinada en dos o tres oportunidades, podríamos limitarnos a repetir el código en

cuestión la cantidad necesaria de veces. Esto funcionaria, a pesar de que a un

programador “serio” le produciría dolor de estomago. Pero si necesitamos efectuar un

proceso sobre, digamos, un millón de lecturas recibidas a través del bus USB, la

solución anterior, además de ser muy poco eficaz, es absolutamente impracticable.

Para resolver estas situaciones, los lenguajes de programación proporcionan una serie de

instrucciones destinadas a la repetición de porciones de código. Si bien todas ellas hacen

básicamente lo mismo, tienen sutiles diferencias que hacen, frente a un determinado

problema, unas resulten más apropiadas que otras.

FOR-NEXT

Esta quizás sea la estructura de este tipo mas conocida. De hecho, se encuentra presente

en los dialectos BASIC -incluidos los BASIC para PIC- desde los orígenes de este

lenguaje. Su formato es el siguiente:

For variable = valor_inicial To valor_final Step incremento

Instrucciones

Next variable

donde “variable” irá cambiando su valor a lo largo de la ejecución del bucle For-Next,

comenzando con “valor_inicial” hasta “valor_final”, en incrementos de “incremento”.

Por cada valor que asuma “variable”, la(s) instrucción(es) que se encuentran entre el

For y el Next se ejecutarán una vez.

¿Estás completamente perdido? Posiblemente. Pero el ejemplo siguiente te aclarará las

cosas.

Supongamos que queremos sumar los números enteros de 1 a 10 (ambos inclusive).

Usando For-Next podríamos hacerlo así:

Dim i, suma As Integer

suma = 0

For i = 1 To 10 Step 1

suma = suma + i

Next i

Page 35: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 35

En primer lugar, declaramos la variable “i”, que será la que controlara el bucle, y la

variable “suma” (guardará el total de la suma) como enteras. Luego, hacemos que suma

sea igual a cero. Esto no es indispensable, por que el compilador la inicializa por

defecto con ese valor, pero es recomendable tener a la vista ese dato.

Luego, tenemos el bucle for-Next propiamente dicho. Vemos que “i” adoptará valores desde 1

hasta 10, incrementándose en 1 cada iteración.

La sentencia “suma = suma + i” se ejecutará 10 veces, sumando cada vez el valor de “i” en la

variable suma. “i” tomará valores 1, 2, 3, 4, 5, 6, 7, 8, 9 y 10, mientras que “suma” será 1, 3, 6,

10, 15, 21, 28, 36, 45 y 55.

Colocar el nombre de la “variable” a continuación del Next es opcional. Pero a pesar de no ser

obligatorio, es una buena práctica hacerlo, ya que en aquellos programas en que se emplean

varios bucles, uno dentro de otro, ayuda a identificar a que For corresponde cada Next.

Cuando el incremento de la “variable” es 1, como en el ejemplo anterior, tampoco hace falta

poner “Step 1”, ya que el compilador lo hace por defecto. Digamos que si queremos escribir lo

menos posible, nuestro ejemplo podría quedar como sigue:

Dim i, suma As Integer

For i = 1 To 10

suma = suma + i

Next

Page 36: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 36

En programas tan sencillos, podemos omitir todas estas cuestiones que son opcionales. Pero si

nuestro programa es muy extenso, o si debe ser modificado o leído por otra persona, conviene

incluir todo lo necesario para que su comprensión sea más fácil.

La declaración del tipo de la “variable” puede hacerse dentro del mismo “For”, lo que

compacta un poco más el código:

Dim suma As Integer

For i As Integer = 1 To 10

suma = suma + i

Next

Personalmente, me gusta ésta forma de declarar la variable usada en el bucle.

También puede ser útil construir bucles que modifiquen el valor de la “variable” de forma

decreciente. Esto es posible gracias a que el valor a continuación del Step puede ser negativo.

Si se da esta condición, el valor de la “variable” se decrementa en cada iteración. Veamos un

ejemplo:

Dim suma As Integer

For i As Integer = 100 To 0 Step -2

suma = suma + i

Next

Page 37: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 37

En este caso, el valor inicial de “i” será 100, ira descendiendo de a dos unidades en cada

iteración, y la última se producirá cuando el valor de “i” sea igual a cero. La variable “suma” va

incrementando su valor en cada pasada, y al finalizar contiene la suma de los números pares

que se encuentran entre el 0 y el 100, ambos inclusive. Puedes comprobarlo, el resultado final

de “suma” será 2550.

Por supuesto, en ese caso el “valor_inicial” debe ser mayor que el “valor_final”, si no nuestro

bucle no se ejecutará ni una vez. Esto plantea un tema interesante: puede darse el caso de que

un bucle no se ejecute ninguna vez, ya que sus valores iniciales son tales que lo hacen

imposible. La situación se produce cuando, al principio del bucle, Visual Basic evalúa los

valores de “variable”, “valor_inicial”,“valor_final” e “incremento” y descubre que se ha

alcanzado el máximo valor posible, saltando a la instrucción que sigue al Next.

Por ejemplo, el siguiente código no realiza ninguna suma, ya que el valor inicial es inferior al

final, y el incremento es negativo:

Dim suma As Integer

For i As Integer = 1 To 10 Step -2

suma = suma + i

Next

Nada impide utilizar valores no enteros en cualquiera de los parámetros del For-Next.

Supongamos que, siguiendo con las sumas, queremos sumar los valores comprendidos entre 0

y 10, de 0.1 en 0.1:

Dim suma, i As Double

For i = 0 To 10 Step 0.1

suma = suma + i

Next

(nótese el detalle de que hemos declarado las variables como “Double”).

Page 38: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 38

Por supuesto, todos los parámetros de un For-Next pueden ser variables. Esto le otorga una

gran flexibilidad a nuestros programas, ya que permite construir bucles cuyo numero de

ejecuciones dependa, por ejemplo, del numero de productos que contiene una base de datos,

o de los días que tiene el mes en curso.

El ejemplo siguiente ilustra esta posibilidad:

Dim suma, i, inicio, final, incremento As Double

inicio = 85.7

final = 100.8

incremento = 0.1

For i = inicio To final Step incremento

suma = suma + i

Next i

Como dijimos antes, si no se es cuidadoso se puede terminar con un bucle que no se ejecute ni

una vez.

Por ultimo, hay un par de instrucciones que pueden alterar el número de veces que se va a

repetir el contenido de un bucle For-Next. Supongamos que queremos sumar los números

enteros hasta que la suma sea superior a 1000. Salvo que seamos muy buenos con la

matemática, no tenemos forma de conocer cual será el “valor_final” de nuestra cuenta.

Page 39: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 39

Pero con “Exit For” podemos abortar el For-Next cuando queramos. Si Visual BASIC se

encuentra con esta instrucción, inmediatamente pasa a la instrucción posterior al Next, sin

importar que se haya alcanzado el “valor_final” elegido o no. Así es como se usa:

Dim suma, i, inicio, final, incremento As Double

inicio = 1

final = 1000

incremento = 1

For i = inicio To final Step incremento

suma = suma + i

If suma >= 1000 Then

Exit For

End If

Next i

Usando el IF-THEN que vimos antes, preguntamos si la suma ya es igual o superior a 1000. En

caso de que sea así, ejecutamos el Exit For para abandonar el bucle.

For-Next tiene una variante que permite recorrer los ítems de una colección, mediante For-

Each. Cuando hayamos visto que son y como se emplean las colecciones, volveremos sobre

For-Next para explicar este ultimo aspecto.

Ya vimos como FOR…NEXT podía ayudarnos a resolver aquellas situaciones en las que un

grupo de instrucciones debían repetirse un numero determinado de veces. Pero existen otras

situaciones, y aparecen con mucha frecuencia, en las que no se conoce de antemano el

número de iteraciones que debería tener nuestro bucle.

A pesar de que un programador con experiencia siempre encontrará la forma de afrontar esas

situaciones haciendo uso de FOR…NEXT, resulta mas fácil, apropiado y eficiente emplear las

instrucciones que el repertorio sentencias de Visual Basic pone a nuestra disposición. Veamos

cuales son.

Do…Loop

El bucle DO...LOOP es muy versátil. Tanto, que puede reemplazar a FOR…NEXT en casi todos

los casos. Con él se pueden crear una gran variedad de bucles diferentes, dependiendo si

comprueban una condición antes de ejecutar el bucle una vez; después de la primera

ejecución; mientras que se cumple la condición o hasta que la mencionada condición se

cumpla. La sintaxis básica de esta estructura es la siguiente:

Do

Instrucciones…

[Exit Do]

Instrucciones…

Loop

Page 40: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 40

Esta es la forma más simple de escribir este tipo de bucle. Las instrucciones comprendidas

entre el Do y el Loop se ejecutaran indefinidamente. Resulta muy apropiado para aquellos

casos en que nuestro programa se encuentra esperando que ocurra alguna situación

determinada, a la vez que repite un grupo de instrucciones.

La opción “Exit Do” permite abandonar el bucle cuando lo deseemos. En general, una

sentencia “If…Then” comprueba el valor de alguna expresión, y cuando dicha expresión es

verdadera, se ejecuta el “Exit Do”. El siguiente ejemplo ilustra este caso:

Dim frecuencia As Integer

frecuencia = 2000

Do

frecuencia = frecuencia - 100

if frecuencia = 0 Then

Exit Do

End If

Loop

Como puede verse, el bucle se repetirá mientras que el valor de “frecuencia” sea diferente de

cero. Cuando esto ocurre, la condición que evalúa el “If…Then” será verdadera y el control del

programa saltará a la instrucción que haya a continuación del “Loop”.

La segunda forma en que se puede escribir un bucle “Do…Loop” es la que sigue:

Do { While | Until } condición

Instrucciones…

[Exit Do]

Instrucciones…

Loop

Por supuesto, no podemos utilizar “While” y “Until” a la vez. En esta forma del bucle, la

condición se evalúa al comienzo del mismo. En el caso de utilizar la opción “While”, el bucle se

repetirá mientras que la condición sea verdadera. Podemos escribir el ejemplo anterior

utilizando esta posibilidad:

Do While frecuencia<> 0

frecuencia= frecuencia- 100

Loop

Como puede verse, es mucho más simple utilizar “While” que “If…Then” y “Exit Do”. Aclaramos

que la condición evalúa que frecuenciasea diferente de cero.

También podríamos haber resuelto el problema con el uso de “Until”:

Do Until frecuencia= 0

frecuencia = frecuencia - 100

Loop

Page 41: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 41

En este caso, el bucle se repetirá hasta que frecuencia sea igual a cero. En estos dos ultimo

ejemplos puede darse el caso de que, si frecuencia es igual a cero cuando se llega a la

instrucción “Do”, las instrucciones existentes en el interior del bucle no se ejecuten nunca.

La tercera forma que puede adoptar el bucle que estamos analizando es la siguiente:

Do

Instrucciones…

[Exit Do]

Instrucciones…

Loop { While | Until } condición

Como puede verse, se ha delegado la capacidad de evaluar la condición al final del bucle. Esto

tiene la particularidad de permitir que el grupo de instrucciones existentes en el interior del

bucle se ejecuten al menos una vez, independientemente de que la condición a evaluar sea o

no verdadera.

Nuestro ejemplo podría resolverse así:

Dim frecuencia As Integer

frecuencia = 20000

Do

frecuencia = frecuencia - 100

Loop Until frecuencia = 0

O asi:

Dim frecuencia As Integer

frecuencia = 20000

Do

frecuencia = frecuencia - 100

Loop While edad <> 0

En todos los casos puede utilizarse, entre las instrucciones que están dentro del bucle, la

sentencia “Continue Do”, que hace que el control del programa salte nuevamente al “Do…”,

repitiendo el ciclo actual.

Page 42: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 42

Controles

Hoy veremos cuales son y como se emplean los controles que dispone Visual Basic.

Son estos elementos los que nos permitirán crear la interfaz con el usuario de nuestras

aplicaciones, y también manejar muchas de las potentes características que dispone esta

herramienta. ¡Comienza la parte interesante!

Los controles, que pueden arrastrarse y soltarse sobre los formularios (Forms) de Visual

Basic, son componentes extremadamente importantes para la construcción de las

aplicaciones. Son, en resumen, los que permiten confeccionar la interfaz que el usuario

utilizara para controlar las funciones de nuestro programa.

Los controles, básicamente, proveen mecanismos para proporcionar información al

usuario (Label, ToolTip, PictureBox, TreeView, etc.), organizar los datos para que sean

fácilmente interpretados (GroupBox, TabControl, Panel, etc.), ingresar datos (TextBox,

ComboBox, MonthCalendar, etc.), seleccionar una(s) opcion(es) de entre varias

(ListBox, CheckBox, RadioButton, etc.) o interactuar con elementos que no pertenecen,

necesariamente, a nuestra aplicación (OpenFileDialog, SaveFileDialog, PrintDocument,

etc.). Además, algunos controles especiales nos proporcionan herramientas para manejar

o complementar otros controles (ImageList, ToolTip, etc.) Todo esto nos proporciona

una completisima cantidad de herramientas con las que podremos construir la interface

que controle o interactue con nuestros proyectos.

No veremos absolutamente todos los disponibles (para eso tenemos la ayuda del

paquete), pero la información que proporcionaremos en esta entrega y las siguientes

seguramente bastarán para que el lector pueda sacar provecho de todos los controles que

posee Visual Basic. Esta es la paleta de controles disponibles:

Page 43: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 43

Comenzaremos viendo como utilizar los “Controles comunes”. Es bastante difícil encontrar

alguna aplicación que no utilice alguno de estos controles como parte de su interfaz. El

primero de ellos, cuyo icono es una pequeña flecha, no es en realidad un control, sino la

herramienta que podemos usar para mover o seleccionar alguno de los controles que tenemos

en nuestro formulario.

Page 44: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 44

Hecha esta aclaración, comencemos con el análisis. Lo primero que haremos será abrir el

Microsoft Visual Basic 2008 Express, seleccionemos “Aplicación para Windows”, y

asegurémonos que tenemos el “Form1” en la pantalla, en modo diseño. Deberíamos tener a la

vista algo más o menos así:

El primer control que usaremos será “Button”. Como habrás adivinado, se trata del clásico

botón presente en prácticamente la totalidad de las ventanas de cada programa. Este control

puede ejecutar una acción cuando el usuario hace clic sobre él.

Utilizando la flecha, arrastraremos uno hasta el formulario “Form1”. No importa demasiado, al

menos por ahora, en que posición lo coloquemos, ni tampoco su tamaño. Es más, puede ser un

buen momento para que pases unos minutos “jugando” con la flecha y el control, para

asegurarte que comprendes de qué forma puedes arrastrarlo por el formulario o cambiar su

tamaño.

Page 45: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 45

Una vez colocado el control, el formulario se verá como sigue:

Lo primero que vamos a aprender es como cambiarle el nombre, ya que “Button1” difícilmente

sea apropiado para nuestra aplicación. Vamos a modificar el botón para que termine la

aplicación cuando le hacemos clic, así que un nombre apropiado para el sería “Salir”.

Debemos, como se ve en la imagen, utilizar el cuadro “Propiedades” para cambiar el valor

correspondiente al atributo “Text” del control. Simplemente, hacemos clic sobre ese renglón, y

escribimos “Salir” (o lo que queramos poner). Debería quedar como sigue:

Page 46: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 46

Con esto tenemos el botón con el texto deseado escrito en él. Ahora, vemos como hacer para

que, cuando el usuario haga “clic” sobre el control, la aplicación termine. Para ello, debemos

escribir un trozo de código que se ejecute cuando esta acción tenga lugar. La forma de hacerlo

es muy sencilla (y ya vimos como hacerlo aqui): simplemente, damos un doble clic sobre el

botón, y Visual Basic pasará al Form.vb.

El IDE de Visual Basic nos facilita mucho las cosas. Tanto, que como puede verse nos lleva

directamente al lugar exacto donde debemos escribir el código que se ejecutará, en tiempo de

ejecución, al pulsar el botón. Como queremos que la aplicación termine cuando esto ocurra,

simplemente escribimos “End”:

Page 47: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 47

Una vez hecho esto, ya podemos probar nuestro programa para ver si funciona correctamente.

Para ello, basta con presionar “F5” o hacer clic sobre la flecha verde de la barra de

herramientas que tenemos en la parte superior del IDE, debajo del menú. Haz clic sobre el

botón y comprueba como se cierra la ventana.

MsgBox()

Por supuesto, podemos hacer cosas mucho más interesantes con este control.

Aprovecharemos, de paso, para aprender a utilizar la función MsgBox(), que permite desplegar

pequeñas ventanas con un mensaje (y algunos botones) en ella. Su sintaxis es la siguiente:

MsgBox(prompt[, buttons][, title][, helpfile, context])

Donde prompt, que obligatoriamente debe estar, es una cadena que representa el texto que

aparecerá en el cuadro de diálogo. La longitud máxima de prompt es de unos 1024 caracteres,

variando con el ancho de los caracteres utilizados.

Buttons es un parámetro opcional. Es una expresión numérica que corresponde a la suma de

los valores que especifican el número y el tipo de los botones que se pretenden mostrar, el

estilo de icono que se va a utilizar, la identidad del botón predeterminado y la modalidad del

cuadro de mensajes. Si no ponemos nada (o ponemos “0”), solo aparecerá un botón con el

texto “Ok” que cerrará el cuadro de dialogo cuando le demos clic.

Title es otra cadena opcional, que se muestra en la barra de título del cuadro de diálogo. Si se

omite este parámetro, en la barra de título se verá el nombre de la aplicación.

Helpfile también es opcional. Es la cadena que identifica el archivo de ayuda relacionado con el

cuadro de dialogo. Volveremos sobre este tema cuando tratemos la forma de implementar

ayuda interactiva en nuestras aplicaciones. El parámetro context también se relaciona con la

ayuda.

Veamos un ejemplo. La siguiente línea

MsgBox("Aprendiendo a usar Visual Basic 2008", 0, "uControl.com.ar")

genera un cuadro de diálogo con el texto "Aprendiendo Visual Basic 2008", un solo botón con

el texto “Ok” y el titulo “uControl.com.ar”. Tal cual se ve en la imagen:

Page 48: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 48

Ahora bien, seguramente te estas preguntando “¿Cómo hago yo para enterarme que poner

para crear cada combinación de botones?”. Esta es la respuesta:

Como puede verse, Visual Basic proporciona una palabra clave para que no tengamos que

recordar números extraños. El siguiente código

MsgBox("Error grave, se ha perdido la información",VbAbortRetryIgnore

+ VbCritical,"Error grave")

Muestra como podemos utilizarlas. Y la figura de abajo el resultado que produce:

Lo interesante de MsgBox() es que devuelve un código que nos indica que botón ha pulsado el

usuario. Esto significa que, si somos lo suficientemente hábiles a la hora de escribir nuestros

programas, podremos realizar diferentes acciones en respuesta a la respuesta del usuario.

Page 49: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 49

El siguiente código muestra un aviso de alerta con los botones Anular, Reintentar y Omitir.

Luego, utilizando la instrucción If-Then, el programa analiza la respuesta del usuario y muestra

otro cuadro de diálogo que nos confirma cual fue el botón presionado:

Dim a As Integer

a = MsgBox("Error grave, se ha perdido la información",

vbAbortRetryIgnore + vbCritical, "Error grave")

If a = vbAbort Then

MsgBox("Presionaste Anular")

End If

If a = vbRetry Then

MsgBox("Presionaste Reintentar")

End If

If a = vbIgnore Then

MsgBox("Presionaste Omitir")

End If

Si copias el código anterior dentro del evento click de un botón, al ejecutarlo tendrás algo

como esto:

Page 50: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 50

Esta tabla muestra el código devuelto por cada botón:

Como puede verse, resulta muy simple utilizar los controles disponibles en Visual Basic. Hoy

no hemos visto más que una pequeñísima parte de las opciones de uno de sus controles, pero

afortunadamente, la mayor parte de las características y propiedades de un control existen y

se utilizan de la misma forma en casi todos los demás. Esto facilitará mucho nuestro

aprendizaje.

Comenzaremos ahora a ver los controles que permiten al usuario seleccionar o definir

opciones. Dentro de este grupo hay algunos clásicos como el RadioButton, el CheckBox o el

ListBox.

Con mucha frecuencia, nuestra aplicación escrita en Visual Basic necesita que el usuario

seleccione una alternativa (o varias) de un grupo más o menos numeroso de opciones. Por

ejemplo, si estamos rellenando listas con los valores de temperatura medidos, es posible que

queramos ingresar el momento del día al que pertenece cada uno. La caja de herramientas de

VB dispone de varios controles que pueden ayudarnos en esta tarea.

RadioButton

El RadioButton es el control por excelencia para realizar este tipo de tarea. Para emplearlo,

simplemente debemos arrastrar el numero de controles que necesitemos desde la caja de

herramientas al formulario, y luego cambiarles el nombre. Si no lo hacemos, tendrán un

aspecto parecido al de la figura, y el usuario nada sabrá sobre lo que significa cada opción.

Page 51: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 51

Este control se utiliza para presentar al usuario un conjunto de opciones mutuamente

excluyentes. Si el usuario selecciona un componente del grupo de RadioButton disponibles en

el formulario, todos los demás se desmarcan o deseleccionan solos. Esta característica de

exclusión mutua se aplica perfectamente al ejemplo anterior. Vamos a ver cómo podemos

utilizarlo. Comienza por arrastrar al formulario dos controles RadioButton, un Button y un

Label. Luego de que lo hagas, el formulario presentará un aspecto similar al de la figura

anterior.

Antes de seguir, vamos a cambiar la descripción de los controles, tal como hicimos en

oportunidades anteriores a lo largo del tutorial. Pondremos "Dia" y "Noche" a los RadioButton,

"Listo" al botón y "" (nada) al Label. Si todo ha salido bien, nuestro formulario se parecerá al de

la figura:

Page 52: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 52

Recuerda que el cambio lo haces modificando la propiedad "Text" de cada control, y que el

Label, al tener un nombre "vacío" no se verá en el formulario. Luego, mediante código,

haremos que muestre el valor seleccionado por los RadioButton. Como puede verse en la

figura siguiente, si damos "Play" a nuestra aplicación, los RadioButton funcionan, y resulta

imposible marcar más (o menos) de uno: al intentarlo, el otro se desmarca.

Ahora escribiremos un trozo de código en el evento Click del Button1, para que cuando lo

presionemos le cambie la propiedad Text al Label, así este muestra cual es el momento del día

que hemos seleccionado.

Le damos un doble click al control Button1 (que ahora tiene el texto "Salir" escrito encima) y

debería abrirse una ventana similar a la siguiente:

En ella, dentro del "Private Sub Button1_Click" escribimos lo siguiente:

If RadioButton1.Checked Then Label1.Text = "Dia"

If RadioButton2.Checked Then Label1.Text = "Noche"

Cada instrucción "If…Then" válida uno de los RadioButton, y en función de su estado

(concretamente, si su propiedad "Checked" es verdadera) modifica la propiedad Text del

Label1. Más fácil, imposible. El código debe verse como sigue:

Page 53: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 53

Sería interesante que ejecutes el programa que has escrito y compruebes que realmente

funciona. También puedes probar de hacer algunos cambios. Por ejemplo, inventa un

problema que tenga tres o más alternativas y resuélvelo modificando este código; o cambia el

nombre de los controles (RadioButton1, RadioButton2) a algo más "humano", como "rbDia" y

"rbNoche". Verás que si lo haces así el código resultante es mucho más legible.

Más adelante veremos cómo realizar grupos de RadioButton en el mismo formulario, para que

funcionen de forma independiente unos de otros. Esto permitirá, dentro del mismo Form,

seleccionar varias clases de cosas al mismo tiempo.

Page 54: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 54

CheckBox

Las situaciones en las que debemos elegir solo una alternativa de una lista de

opciones no son las únicas posibles. De hecho, es bastante común el caso en que

debamos seleccionar varias opciones de un grupo mayor. En estos

casos, RadioButton y sus opciones mutuamente excluyentes son inútiles. Pero

afortunadamente, existen losCheckBox.

Desde el punto de vista del uso del control (colocación en el Form y configuración) no difiere

demasiado del visto anteriormente. Sin embargo, cuando lo usamos, veremos que si tenemos

una opción seleccionada y presionamos otra, la primera permanece en ese estado.

Abramos un nuevo proyecto en Visual Basic, y arrastremos cinco controles CheckBox al

formulario, más o menos como se ve en la figura:

Page 55: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 55

Luego, desde el cuadro de propiedades, modifiquemos su propiedad "Text" para que

aparezcan como "Rojo", "Verde", "Azul", "Blanco" y "Negro":

Si ejecutas ahora el proyecto, verás como tranquilamente puedes dejar todos sin marcar

(RadioButton obligaba a tener siempre uno elegido), marcar uno solo como si fuese un

RadioButton o bien elegir varios de ellos (¡o todos¡)

Un "truco" útil consiste en modificar el texto que aparece al lado de cada caja del CheckBox

durante la misma ejecución del programa. Hay casos en los que las "preguntas" que debemos

hacer al usuario dependen de alguna respuesta anterior (por ejemplo, si es hombre o mujer), y

mediante la modificación de la propiedad "Text" del CheckBox se puede lograr cambiar la

apariencia del Form. Para establecer valores en el código se hace, por ejemplo, así:

CheckBox1.Text = "¿Es un resistor?"

CheckBox2.Text = "¿Es de montaje superficial?"

CheckBox3.Text = "¿Funciona bien?"

CheckBox4.Text = "¿Hay más de uno?"

CheckBox5.Text = "¿Puede reemplazarlo?"

Si este trozo de código lo escribimos dentro del evento Load del Form, cuando se abre la

ventana que contiene nuestra aplicación el aspecto de los CheckBox será otro (conteniendo los

textos anteriores), independientemente de los valores que hayamos elegido para cada "Text"

en momento de diseñar el form.

La propiedad Checked del CheckBox es la que cambia al seleccionar (o no) el control. Esta

propiedad valdrá "1" (o verdadero) en caso de que el control este seleccionado, y "0" (o falso)

en caso contrario.

Page 56: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 56

Si hay algo en lo que Visual Basic se destaca, es en lo potente y compacto de su código. Con

solo escribir una decena de líneas ya tenemos controles que cambian su valor en tiempo de

ejecución, podemos comprobar el estado de algunos de ellos al presionar un botón, o

modificar el texto de una etiqueta en función de lo que ha seleccionado el usuario. Esto hace

que uno se sienta cómodo y pueda avanzar rápidamente en la comprensión del lenguaje.

La próxima entrega de este tutorial tratará sobre como interactuar con el puerto paralelo

utilizando la librería inpout.dll

Page 57: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 57

Page 58: Vb Interfaces Para Pic

Visual Basic 2008 - Creando Interfaces para PIC desde CERO

www.ucontrol.com.ar Página 58

Tutorial creado por Ariel.

Versión: 1.01

http://www.ucontrol.com.ar/forosmf/programacion-en-visual-basic/visual-basic-2008-

creando-interfaces-para-pic-desde-cero/

Portado a PDF por Meta.

http://electronica-pic.blogspot.com

Cualquier sugerencia, dudas o cualquier comentario, puedes realizarlas en el foro aquí.

http://www.ucontrol.com.ar/forosmf/programacion-en-visual-basic/re-visual-basic-2008-

creando-interfaces-para-pic-desde-cero/?PHPSESSID=82a9e11d4dbd2ec59fa1f38fa7f07521

Puede haber futuras actualizaciones, mejoras y contenidos.

www.ucontrol.com.ar