Juego de Luces Controlado por Computadora Versión 1.0

Description

Este documento muestra paso a paso el desarrollo de un juego de luces controlado por una computadora utilizando el puerto paralelo. Se presenta tanto la parte de programación como también el ensamblaje, materiales y desarrollo completo de este sistema.

Reviews
Shared by: Jaime Montoya
Stats
views:
578
rating:
not rated
reviews:
0
posted:
6/25/2008
language:
pages:
0
ÍNDICE Introducción Objetivos Detalles Técnicos Preliminares Funcionamiento del Programa Objetos del Programa Código del Programa Diseño y Ensamblaje del Circuito Eléctrico Puerto Paralelo de la Computadora Componentes Necesarios Diagrama Circuital Conclusión Bibliografía Anexos 3 4 5 7 17 45 82 83 84 85 86 87 88 2 INTRODUCCIÓN El Juego de Luces Controlado por Computadora Versión 1.0 es un circuito práctico y que tiene muchas aplicaciones útiles para cualquier persona en su hogar. Aunque este diseño tiene aplicaciones didácticas (como lo es el contador binario programado), puede ser a su vez utilizado para controlar los focos de una casa desde la computadora, encendiendo y apagando los focos que se desee con toda comodidad y seguridad desde la computadora, así como también se podrá relacionar música o videos a cada uno de los colores de los focos los focos que se encuentran encendidos, o grabaciones personalizadas, por ejemplo que cuando los focos azules se encuentren encendidos, que se pueda escuchar determinada canción o que se pueda ver un video en particular . Este diseño puede ser ampliado y modificado de acuerdo a las necesidades particulares de quien lo quiera implementar. Igualmente se muestran otras aplicaciones como un juego de luces, por ejemplo la rotación de los focos de izquierda a derecha o de derecha a izquierda, así como la rotación por colores igualmente de izquierda a derecha o viceversa. También se ofrece el encendido de cualquiera de los focos de manera aleatoria cada cierto tiempo, que puede ser medio segundo, un segundo o dos segundos según la velocidad seleccionada. El código completo del programa desarrollado en Visual Basic 2005 es presentado en este documento, de manera que cualquier persona pueda modificarlo y particularizarlo a sus propias necesidades, y a la vez comprender el funcionamiento del sistema en su parte de programación, para lo cual se han escrito múltiples comentarios del código. Finalmente se muestran los componentes y diagrama para desarrollar este circuito. El funcionamiento del programa está completamente comprobado, por lo cual se garantiza que en cada uno de los pines del dos al nueve del puerto paralelo se tendrán los voltajes correspondientes para generar cada una de las secuencias de luces que han sido programadas, así como el control de apagado y encendido de los focos por parte del usuario simplemente haciendo clic sobre botones o focos mostrados en el formulario principal del programa, que funciona como consola de control. Igualmente el circuito eléctrico ha sido probado y se garantiza su funcionamiento con los componentes y diagrama mostrado en este documento. Por supuesto que quien desee implementar este sistema tiene la libertad de utilizar componentes eléctricos o elementos equivalentes, o modificar el diseño según su gusto y necesidades, al igual que se tiene la libertad de modificar el programa para obtener los resultados que se deseen. En los anexos aparecen fotos y un enlace para ver un video del sistema funcionando, mostrando el proyecto finalizado y trabajando según lo programado. 3 OBJETIVOS OBJETIVO GENERAL “Programar y hacer funcionar un juego de luces que sea controlado por medio de una computadora.” OBJETIVOS ESPECÍFICOS Aprender a enviar valores al puerto paralelo de la computadora mediante herramientas de programación. Ser capaces de establecer comunicación entre la computadora y un circuito eléctrico externo a ella. Proporcionar un sistema para controlar focos de manera eficiente y eficaz a través de la computadora. 4 DETALLES TÉCNICOS PRELIMINARES Este programa está desarrollado en Visual Basic 2005, pero para su correcto funcionamiento y si se desea modificar el código fuente, deben tomarse en cuenta los siguientes detalles técnicos: 1. El archivo inpout32.dll debe ubicarse en C:\Windows\system para Windows Vista o en C:\Windows\system32 para Windows XP. 2. En tiempo de diseño, teniendo instalado Windows Media Player, debe habilitarse para que pueda interactuar con Visual Basic 2005. Para ello se deben seguir estos pasos: ir al menú Herramientas, Elegir elementos del cuadro de herramientas..., luego en la pestaña Componentes COM buscar Windows Media Player y ponerle el cheque de selección. Al tener instalado Windows Media Player, automáticamente el archivo DLL necesario se encuentra en C:\Windows\system32\wmp.dll. 3. Si se quiere ejecutar el programa en diferentes computadoras, el código del botón playmusicButton se debe actualizar de acuerdo a la ruta de dirección de los archivos de sonido, específicamente en las siguientes cuatro líneas de código: a) Dim song = AxWindowsMediaPlayer.newMedia("C:\Documents and Settings\hp pavilion a600n\Desktop\juegodelucespuertoparalelo\myresources\preview.mp3") 'Recordar que al ejecutar el programa en otra computadora, ésta dirección ruta del archivo (que puede tener cualquier formato soportado por Windows Media Player) tiene que ser actualizada a la ubicación del archivo en la nueva computadora, pues de lo contrario se estará invocando una dirección errónea. b) Dim song = AxWindowsMediaPlayer.newMedia("C:\Documents and Settings\hp pavilion a600n\Desktop\juegodelucespuertoparalelo\myresources\distance.wma") 'Recordar que al ejecutar el programa en otra computadora, ésta dirección ruta del archivo (que puede tener cualquier formato soportado por Windows Media Player) tiene que ser actualizada a la ubicación del 5 archivo en la nueva computadora, pues de lo contrario se estará invocando una dirección errónea. c) Dim song = AxWindowsMediaPlayer.newMedia("C:\Documents and Settings\hp pavilion a600n\Desktop\juegodelucespuertoparalelo\myresources\amanda.wma") 'Recordar que al ejecutar el programa en otra computadora, ésta dirección ruta del archivo (que puede tener cualquier formato soportado por Windows Media Player) tiene que ser actualizada a la ubicación del archivo en la nueva computadora, pues de lo contrario se estará invocando una dirección errónea. d) Dim song = AxWindowsMediaPlayer.newMedia("C:\Documents and Settings\hp pavilion a600n\Desktop\juegodelucespuertoparalelo\myresources\dindinwolittlechil d.wma") 'Recordar que al ejecutar el programa en otra computadora, ésta dirección ruta del archivo (que puede tener cualquier formato soportado por Windows Media Player) tiene que ser actualizada a la ubicación del archivo en la nueva computadora, pues de lo contrario se estará invocando una dirección errónea. 4. Verificar que los resultados del programa son correctos y que la comunicación con el puerto paralelo se está haciendo realmente y tal como aparece en las imágenes de las fotos en el programa creado en Visual Basic 2005. Para ello, en vez de medir voltajes en los pines, resulta muy práctico verificar el buen funcionamiento con un programa como el siguiente: Parallel Port Monitor (c) 1997-2002 Fred Bulback email: fred@geekhideout.com url: http://www.geekhideout.com 5. Los objetos contadorbinarioTimer, rotarTimer y randomTimer deben estar inicialmente con la propiedad Enabled en False, pues el conteo binario con los focos, las diferentes rotaciones y el encendido aleatorio de los focos no se debe iniciar sino hasta que se haga clic en el botón correspondiente. 6 FUNCIONAMIENTO DEL PROGRAMA Al iniciar el programa, aparecerá la siguiente pantalla: Al hacer clic en el botón Clic On/Off, los focos se encenderán y apagarán al hacer clic sobre ellos. Si el foco está apagado y se hace clic sobre él, se encenderá, y si el foco estuviera encendido y se hiciera clic sobre él, se apagará. Cuando un foco tenga el fondo blanco y un cero debajo de él, significa que está apagado. Cuando un foco tenga fondo anaranjado y un uno sobre él, significa que está encendido. Por ejemplo, luego de encender los focos amarillos y verdes (haciendo clic sobre ellos), se tendrá lo siguiente: 7 Al hacer clic sobre el botón Contador Binario, se inicializará un conteo binario con los focos, comenzando desde 0 hasta terminar en 255 (11111111 en sistema binario y FF en sistema hexadecimal). El incremento en el conteo se dará cada segundo si la velocidad seleccionada es Normal, cada dos segundos si la velocidad seleccionada es Lento, y cada medio segundo si la velocidad seleccionada es Rápido. Se puede aumentar la velocidad o disminuirla en cualquier momento seleccionando el botón de radio que corresponda a la velocidad deseada, sin que se tenga que reiniciar el conteo, de manera que el conteo se acelerará o se hará más lento sin que se tenga que volver a contar desde cero, sino continuando en el valor en el que se encontraba el conteo en determinado momento. Lo mismo se aplica en el caso de la rotación de los focos de izquierda a derecha o viceversa, lo cual se verá más adelante, donde el cambio se puede seleccionar en cualquier momento y no se necesitará comenzar la rotación nuevamente desde el primer foco ni desde el último, sino que se podrá hacer el cambio de sentido en cualquier momento y se hará a partir del foco que se 8 encuentre encendido en un determinado momento (o los focos, si se estuviera usando la rotación de dos en dos. Cada segundo se dará un incremento en uno del conteo. Cuando se llegue a 255, se reinicia el contador y continúa indefinidamente hasta que se ejecute una acción que detenga el conteo. Por ejemplo, cuando el contador vaya en 157 (10011101 binario y 9D hexadecimal), se verá de esta forma: 9 El botón Encender Focos simplemente encenderá los ocho focos: 10 Lo que hará el botón Apagar Focos es simplemente apagar todos los focos: 11 Al hacer clic sobre el botón Play, se encenderán los focos del color que esté seleccionado en los botones de radio. A la vez, el botón Play de Windows Media Player se activará. Por ejemplo, si estuviera seleccionado el color Rojo y se hiciera clic en el botón Play, encenderían los focos Rojos y se activaría el botón Play de Windows Media Player: 12 Luego al hacer clic sobre el botón Play de Windows Media Player, se escuchará una canción (la que se ha programado para los focos rojos): Haciendo clic en el botón Stop, se deshabilitará el sonido, se apagarán todos los focos, y el usuario podrá hacer clic sobre el botón Play y encender otra pareja de focos de otro color, lo cual activará el botón Play de Windows Media Player para que al hacer clic sobre él, se escuche una canción diferente (que puede ser también un video o cualquier archivo soportado por Windows Media Player, dependiendo del archivo que se haya programado en el código del botón Play). El botón Rotar hará que los focos roten en determinado sentido dependiendo de lo que se encuentre seleccionado en los botones de radio de la sección de Rotación, y a la velocidad que se encuentre seleccionada 13 en los botones de radio. Si se selecciona la rotación de izquierda a derecha, los focos irán encendiendo uno a uno de izquierda a derecha. También se puede hacer que los focos tengan una rotación por colores, por ejemplo si se selecciona “Izquierda a derecha por colores”, los focos se van a ir encendiendo de izquierda a derecha pero en las parejas de colores, es decir primero los dos focos azules, luego los dos focos rojos, a continuación los dos focos amarillos, después los dos focos verdes, a continuación otra vez los focos azules y así infinitamente hasta que se seleccione otra acción. Igualmente se puede cambiar el sentido de la rotación sin que se pierda la secuencia que se lleva, es decir sin tener que volver a comenzar desde el primer foco. Al hacer clic sobre el botón Random, los focos se van a encender de manera aleatoria uno por uno, es decir que solamente va a estar encendido uno a la vez. Lo que sucederá es que cada medio segundo, cada segundo o cada dos segundos (dependiendo de la velocidad que se encuentre seleccionada), se genera un número aleatorio entre uno y ocho y ese número define cuál de los ocho focos es el que se va a encender. Esto genera una interesante intermitencia aleatoria de los focos, donde cualquiera de ellos puede encender mientras todos los demás se mantienen apagados. 14 El botón Ayuda mostrará una ventana de ayuda sobre el uso del programa: A continuación se muestra cómo el programa realmente está estableciendo comunicación con el puerto paralelo, lo cual puede comprobarse midiendo voltajes en los pines 2 al 9 del puerto paralelo, aunque resulta sencillo hacerlo simplemente utilizando un programa que sirve para monitorear el estado del puerto paralelo (en este caso se ha utilizado el programa Parallel Port Monitor Version 1.4.2): 15 Se puede observar que los resultados del programa se están comunicando con el puerto 378 del puerto paralelo. 16 El botón Acerca de mostrará la siguiente ventana: OBJETOS DEL PROGRAMA En tiempo de diseño, insertar los siguientes objetos con las propiedades que se muestran a continuación: OBJETO Form1 System.Windows.Forms.Form PROPIEDAD (Name) BackgroundImage FormBorderStyle MaximizeButton Size StartPosition Text Form1 VALOR System.Drawing.Bitmap FixedSingle False 800, 627 CenterScreen Juego de Luces Controlado por Computadora Versión 1.0 contadorbinarioButton System.Drawing.Bitmap Arial, 12pt, style=Bold MidnightBlue 17 contadorbinarioButton System.Windows.Forms.Button (Name) BackgroundImage Font ForeColor Location Modifiers Size TabIndex Text UseVisualStyleBack Color title Systems.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text bulb5off System.Windows.Forms.PictureB ox (Name) BackgroundImage Location Modifiers Size bulb6off System.Windows.Forms.PictureB ox (Name) BackgroundImage Location Modifiers Size bulb7off System.Windows.Forms.PictureB ox (Name) BackgroundImage Location 142, 513 Friend 120, 60 0 Contador Binario True Title True Transparent Georgia, 21.75pt, style=Bold, Underline Lime 59, 23 Friend 687, 34 687, 34 Juego de Luces Controlado por Computadora bulb5off System.Drawing.Bitmap 409, 89 Friend 80, 80 bulb6off System.Drawing.Bitmap 501, 89 Friend 80, 80 bulb7off System.Drawing.Bitmap 593, 89 18 Modifiers Size bulb8off System.Windows.Forms.PictureB ox (Name) BackgroundImage Location Modifiers Size bulb1off System.Windows.Forms.PictureB ox (Name) BackgroundImage Location Modifiers Size bulb2off System.Windows.Forms.PictureB ox (Name) BackgroundImage Location Modifiers Size bulb3off System.Windows.Forms.PictureB ox (Name) BackgroundImage Location Modifiers Size bulb4off System.Windows.Forms.PictureB ox (Name) BackgroundImage Location Friend Size bulb5on System.Windows.Forms.PictureB ox (Name) BackgroundImage Location Modifiers Size Friend 80, 80 bulb8off System.Drawing.Bitmap 685, 89 Friend 80, 80 bulb1off System.Drawing.Bitmap 41, 89 Friend 80, 80 bulb2off System.Drawing.Bitmap 133, 89 Friend 80, 80 bulb3off System.Drawing.Bitmap 225, 89 Friend 80, 80 bulb4off System.Drawing.Bitmap 317, 89 Friend 80, 80 bulb5on System.Drawing.Bitmap 409, 89 Friend 80, 80 19 Visible bulb6on System.Windows.Forms.PictureB ox (Name) BackgroundImage Location Modifiers Size Visible bulb7on System.Windows.Forms.PictureB ox (Name) BackgroundImage Location Modifiers Size Visible bulb1on System.Windows.Forms.PictureB ox (Name) BackgroundImage Location Modifiers Size Visible bulb2on System.Windows.Forms.PictureB ox (Name) BackgroundImage Location Modifiers Size Visible bulb3on System.Windows.Forms.PictureB ox (Name) BackgroundImage Location Modifiers Size Visible bulb4on (Name) False bulb6on System.Drawing.Bitmap 501, 89 Friend 80, 80 False System.Drawing.Bitmap System.Drawing.Bitmap 593, 89 Friend 80, 80 False Bulb1on System.Drawing.Bitmap 41, 89 Friend 80, 80 False bulb2on System.Drawing.Bitmap 133, 89 Friend 80, 80 False bulb3on System.Drawing.Bitmap 225, 89 Friend 80, 80 False bulb4on 20 System.Windows.Forms.PictureB ox BackgroundImage Location Modifiers Size Visible System.Drawing.Bitmap 317, 89 Friend 80, 80 False Label1 True Transparent Arial, 27.75pt, style=Bold Yellow 59, 177 Friend 41, 44 22 0 Label2 True Transparent Arial, 27.75pt, style=Bold Yellow 153, 177 Friend 41, 44 23 0 Label3 True Transparent Arial, 27.75pt, style=Bold Yellow 246, 177 Friend 21 Label1 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label2 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label3 System.Windows.Forms.Label (Name) AutoSize BackColor BackColor ForeColor Location Modifiers Size TabIndex Text Label4 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label5 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label6 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex 41, 44 24 0 Label4 True Transparent Arial, 27.75pt, style=Bold Yellow 336, 177 Friend 41, 44 25 0 Label5 True Transparent Arial, 27.75pt, style=Bold Yellow 431, 177 Friend 41, 44 26 0 Label6 True Transparent Arial, 27.75pt, style=Bold Yellow 521, 177 Friend 41, 44 27 22 Text Label7 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label8 System.Windows.Forms.Label (Name) AutoSize BackColor FontColor ForeColor Location Modifiers Size TabIndex Text cliconoffButton System.Windows.Forms.Button (Name) BackgroundImage Font ForeColor Location Modifiers Size TabIndex Text UseVisualStyleBack Color 0 Label7 True Transparent Arial, 27.75pt, style=Bold Yellow 612, 177 Friend 41, 44 28 0 Label8 True Transparent Arial, 27.75pt, style=Bold Yellow 707, 177 Friend 41, 44 29 0 cliconoffButton System.Drawing.Bitmap Arial, 12pt, style=Bold MidnightBlue 12, 513 Friend 120, 60 30 Clic On/Off True 23 apagarfocosButton System.Windows.Forms.Button (Name) BackgroundImage Font ForeColor Location Modifiers Size TabIndex Text UseVisualStyleBack Color apagarfocosButton System.Drawing.Bitmap Arial, 12pt, style=Bold MidnightBlue 402, 513 Friend 120, 60 31 Apagar Focos True encenderfocusButton System.Drawing.Bitmap Arial, 12pt, style=Bold MidnightBlue Friend 120, 60 32 Encender Focos True Button1 System.Drawing.Bitmap Arial, 12pt, style=Bold MidnightBlue 662, 513 Friend 120, 60 33 Acerca de True encenderfocusButton System.Windows.Forms.Button (Name) BackgroundImage Font ForeColor Modifiers Size TabIndex Text UseVisualStyleBack Color Button1 System.Windows.Forms.Button (Name) BackgroundImage Font ForeColor Location Modifiers Size TabIndex Text UseVisualStyleBack Color 24 stopmusicButton System.Windows.Forms.Button (Name) BackgroundImage Enabled Location Modifiers Size TabIndex UseVisualStyleBack Color stopmusicButton System.Drawing.Bitmap False 334, 442 Friend 71, 66 39 True playmusicButton System.Drawing.Bitmap 437, 442 Friend 71, 66 40 True AxWindowsMediaPlayer True True False 293, 224 Friend 259, 212 True 42 Full False coloresGroupBox Transparent Georgia, 14.25pt, style=Bold Lime 25 playmusicButton System.Windows.Forms.Button (Name) BackgroundImage Location Modifiers Size TabIndex UseVisualStyleBack Color AxWindowsMediaPlayer AxWMPLib.AxWindowsMediaPla yer (Name) Ctlenabled EnableContextMenu fullScreen Location Modifiers Size stretchToFit TabIndex uiMode windowlessVideo coloresGroupBox System.Windows.Forms.GroupBo x (Name) BackColor Font ForeColor Location Modifiers Size TabIndex Text azulRadioButton System.Windows.Forms.RadioBu tton (Name) BackColor Font ForeColor Location Modifiers Size TabIndex TabStop Text UseVisualStyleBack Color rojoRadioButton System.Windows.Forms.RadioBu tton (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex TabStop Text UseVisualStyleBack Color amarilloRadioButton System.Windows.Forms.RadioBu (Name) AutoSize 144, 247 Friend 127, 170 51 Colores azulRadioButton Transparent Georgia, 14.25pt, style=Bold Yellow 11, 28 Friend 72, 27 47 True Azul False rojoRadioButton True Transparent Georgia, 14.25pt, style=Bold Yellow 10, 61 Friend 74, 27 48 True Rojo False amarilloRadioButton True 26 tton BackColor Font ForeColor Location Modifiers Size TabIndex TabStop Text UseVisualStyleBack Color Transparent Georgia, 14.25pt, style=Bold Yellow 10, 94 Friend 115, 27 49 True Amarillo False verdeRadioButton True Transparent Georgia, 14.25pt, style=Bold Yellow 9, 127 Friend 87, 27 50 True Verde False rotacionGroupBox Transparent Georgia, 14.25pt, style=Bold Lime 576, 224 Friend 196, 272 52 27 verdeRadioButton System.Windows.Forms.RadioBu tton (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex TabStop Text UseVisualStyleBack Color rotacionGroupBox System.Windows.Forms.GroupBo x (Name) BackColor Font ForeColor Location Modifiers Size TabIndex Text izquierdaaderechaRadioButton System.Windows.Forms.RadioBu tton (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex TabStop Text UseVisualStyleBack Color derechaaizquierdaRadioButton System.Windows.Forms.RadioBu tton (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex TabStop Text UseVisualStyleBack Color izquierdaaderechaporcoloresRadi oButton System.Windows.Forms.RadioBu AutoSize (Name) Rotación izquierdaaderechaRadioButton True Transparent Georgia, 14.25pt, style=Bold Yellow 11, 19 Friend 140, 50 47 True Izquierda a Derecha False derechaaizquierdaRadioButton True Transparent Georgia, 14.25pt, style=Bold Yellow 11, 69 Friend 126, 50 48 True Derecha a Izquierda False izquierdaaderechaporcoloresRadi oButton True 28 tton BackColor Font ForeColor Location Modifiers Size TabIndex TabStop Text Transparent Georgia, 14.25pt, style=Bold Yellow 11, 119 Friend 147, 73 49 True Izquierda a derecha por colores UseVisualStyleBack Color derechaaizquierdaporcoloresRadi oButton System.Windows.Forms.RadioBu tton AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex TabStop Text (Name) False derechaaizquierdaporcoloresRadi oButton True Transparent Georgia, 14.25pt, style=Bold Yellow 11, 192 Friend 163, 73 50 True Derecha a izquierda por colores UseVisualStyleBack Color velocidadGroupBox System.Windows.Forms.GroupBo x (Name) BackColor Font False velocidadGroupBox Transparent Georgia, 14.25pt, style=Bold 29 ForeColor Location Modifiers Size TabIndex Text lentoRadioButton System.Windows.Forms.RadioBu tton (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex TabStop Text UseVisualStyleBack Color normalRadioButton System.Windows.Forms.RadioBu tton (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex TabStop Text UseVisualStyleBack Color Lime 12, 248 Friend 123, 168 52 Velocidad lentoRadioButton True Transparent Georgia, 14.25pt, style=Bold Yellow 16, 37 Friend 85, 27 47 True Lento False normalRadioButton True Transparent Georgia, 14.25pt, style=Bold Yellow 15, 77 Friend 103, 27 48 True Normal False 30 rapidoRadioButton System.Windows.Forms.RadioBu tton (Name) BackColor Font ForeColor Location Modifiers Size TabIndex TabStop Text UseVisualStyleBack Color rapidoRadioButton Transparent Georgia, 14.25pt, style=Bold Yellow 15, 117 Friend 99, 27 49 True Rápido False Button2 System.Drawing.Bitmap Arial, 12pt, style=Bold MidnightBlue 532, 513 Friend 120, 60 52 Ayuda True rotarButton System.Drawing.Bitmap Arial, 12pt, style=Bold MidnightBlue 12, 442 Friend 120, 60 53 Rotar 31 Button2 System.Windows.Forms.RadioBu tton (Name) BackgroundImage Font ForeColor Location Modifiers Size TabIndex Text UseVisualStyleBack Color rotarButton System.Windows.Forms.RadioBu tton (Name) BackgroundImage Font ForeColor Location Modifiers Size TabIndex Text UseVisualStyleBack Color randomButton System.Windows.Forms.RadioBu tton (Name) BackgroundImage Font ForeColor Location Modifiers Size TabIndex Text UseVisualStyleBack Color contadorbinarioTimer System.Windows.Forms.Timer (Name) Interval Modifiers rotarTimer System.Windows.Forms.Timer (Name) Interval Modifiers randomTimer System.Windows.Forms.Timer (Name) Interval Modifiers True randomButton System.Drawing.Bitmap Arial, 12pt, style=Bold MidnightBlue 142, 442 Friend 120, 60 54 Random True contadorbinarioTimer 1000 Friend rotarTimer 1000 Friend randomTimer 1000 Friend OBJETO ayudaForm System.Windows.Forms.Form PROPIEDAD (Name) AutoScaleMode BackgroundImage FormBorderStyle MaximizeBox Size StartPosition Text VALOR ayudaForm Font System.Drawing.Bitmap FixedSingle False 790, 538 CenterScreen Juego de Luces Controlado 32 por Computadora Versión 1.0 title System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label1 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label2 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size title True Transparent Georgia, 21.75pt, style=Bold, Underline Lime 332, 10 Friend 109, 34 2 Ayuda Label1 True Transparent Georgia, 14.25pt, style=Bold, Underline Lime 17, 56 Friend 192, 23 3 Botón Clic On/Off: Label2 True Transparent Georgia, 14.25pt Yellow 205, 56 Friend 567, 23 33 TabIndex Text 4 permite encender o apagar focos simplemente haciendo clic sobre Label3 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label3 True Transparent Georgia, 14.25pt Yellow 17, 79 Friend 52, 23 5 ellos. Label4 True Transparent Georgia, 14.25pt, style=Bold, Underline Lime 17, 110 Friend 253, 23 6 Botón Contador Binario: Label5 True Transparent Georgia, 14.25pt Yellow 265, 110 Friend 34 Label4 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label5 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label6 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label7 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label8 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location 465, 23 7 realiza un conteo binario con los focos, que será lento, Label6 True Transparent Georgia, 14.25pt, style=Bold, Underline Lime 17, 167 Friend 238, 23 8 Botón Encender Focos: Label7 True Transparent Georgia, 14.25pt Yellow 252, 167 Friend 217, 23 9 enciende todos los focos. Label8 True Transparent Georgia, 14.25pt, style=Bold, Underline Lime 17, 198 35 Modifiers Size TabIndex Text Label9 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label10 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label11 System.Windows.Forms.Label (Name) AutoSize Transparent Font ForeColor Location Modifiers Friend 213, 23 10 Botón Apagar Focos: Label9 True Transparent Georgia, 14.25pt Yellow 227, 198 Friend 193, 23 11 apaga todos los focos. Label10 True Transparent Georgia, 14,25pt, style=Bold, Underline Lime 17, 235 Friend 126, 23 12 Botón Stop: Label11 True Transparent Georgia, 14,25pt Yellow 141, 235 Friend 36 Size TabIndex Text Label12 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label13 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text 386, 23 13 apaga todos los focos y deshabilita el sonido. Label12 True Transparent Georgia, 14,25pt, style=Bold, Underline Lime 17, 273 Friend 123, 23 14 Botón Play: Label13 True Transparent Georgia, 14,25pt Yellow 140, 273 Friend 628, 23 15 enciende los focos del color que esté seleccionado en los botones de radio, Label14 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Label14 True Transparent Georgia, 14,25pt Yellow 37 Location Modifiers Size TabIndex Text Button1 (Name) Font ForeColor Location Modifiers Size TabIndex Text UseVisualStyleBackColor Label17 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Modifiers Size TabIndex Text 17, 296 Friend 403, 23 16 al tiempo que habilita Windows Media Player. Button1 System.Drawing.Bitmap Arial, 12pt, style=Bold MidnightBlue 653, 439 Friend 120, 60 19 Cerrar True Label17 True Transparent Georgia, 14,25pt Yellow Friend 513, 23 20 normal o rápido, dependiendo de la velocidad seleccionada. System.Windows.Forms.Button BackgroundImage Label15 System.Windows.Forms.Label (Name) AutoSize BackColor Font Label15 True Transparent Georgia, 14,25pt, style=Bold, Underline 38 ForeColor Location Modifiers Size TabIndex Text Label16 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Lime 17, 332 Friend 137, 23 21 Botón Rotar: Label16 True Transparent Georgia, 14,25pt Yellow 153, 332 Friend 620, 23 22 Genera una rotación de los focos en el sentido y velocidad seleccionados, Label18 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label18 True Transparent Georgia, 14,25pt Yellow 19, 356 Friend 268, 23 23 ya sea uno a uno o por colores. Label19 True Transparent 39 Label19 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label20 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Georgia, 14,25pt, style=Bold, Underline Lime 19, 389 Friend 164, 23 24 Botón Random: Label20 True Transparent Georgia, 14,25pt Yellow 184, 390 Friend 461, 23 25 Enciende los focos de manera aleatoria (uno a la vez). Label21 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label21 True Transparent Georgia, 14,25pt Yellow 157, 423 Friend 224, 23 26 Lento = cada 2 segundos. Label22 True 40 Label22 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label23 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label24 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Transparent Georgia, 14,25pt, style=Bold, Underline Lime 21, 423 Friend 136, 23 27 Velocidades: Label23 True Transparent Georgia, 14,25pt Yellow 157, 450 Friend 217, 23 28 Normal = cada segundo. Label24 True Transparent Georgia, 14,25pt Yellow 157, 476 Friend 271, 23 29 Rápido = cada medio segundo. 41 OBJETO acercadeForm System.Windows.Forms.Form PROPIEDAD (Name) AutoScaleMode BackgroundImage FormBorderStyle MaximizeButton Size StartPosition Text VALOR acercadeForm Font System.Drawing.Bitmap FixedSingle False 546, 311 CenterScreen Juego de Luces Controlado por Computadora Versión 1.0 title True Transparent Georgia, 14,25pt, style=Bold, Underline Yellow 40, 22 Friend 457, 23 2 Juego de Luces Controlado por Computadora Label1 True Transparent Georgia, 12pt, style=Bold Yellow 22, 71 Friend 317, 18 3 Jennifer Esmeralda Chacón 42 title System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label1 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Carranza Label2 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label3 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text Label4 System.Windows.Forms.Label (Name) AutoSize BackColor Font FontColor Location Modifiers Size TabIndex Text Label2 True Transparent Georgia, 12pt, style=Bold Yellow 22, 98 Friend 283, 18 4 Jaime Oswaldo Montoya Guzmán Label3 True Transparent Georgia, 12pt, style=Bold Yellow 22, 126 Friend 252, 18 5 Marvin Eliezer Peña Figueroa Label4 True Transparent Georgia, 12pt, style=Bold Yellow 22, 151 Friend 195, 18 6 Mario Javier Quintana 43 PictureBox1 System.Windows.Forms.PictureB ox (Name) BackgroundImage Location Modifiers Size PictureBox1 System.Drawing.Bitmap 368, 80 Friend 140, 157 cerrarButton System.Drawing.Bitmap Arial, 12pt, style=Bold MidnightBlue 110, 189 Friend 131, 60 8 Cerrar True Label5 True Transparent Georgia, 12pt, style=Bold Lime 265, 248 Friend 273, 18 9 webmaster@jaimemontoya.co m cerrarButton System.Windows.Forms.Button (Name) BackgroundImage Font ForeColor Location Modifiers Size TabIndex Text UseVisualStyleBackCol or Label5 System.Windows.Forms.Label (Name) AutoSize BackColor Font ForeColor Location Modifiers Size TabIndex Text 44 CÓDIGO DEL PROGRAMA CÓDIGO DEL MÓDULO Module1.vb Module Module1 'Procedimiento para mandar valores al puerto paralelo. No se usa función porque no se tiene como objetivo devolver un único valor obtenido por cálculos, sino que simplemente se realizarán acciones que se requieren para enviar valores al puerto paralelo. Entonces en vez de usar "Public Function enviarapuerto" se usa "Public Sub enviarapuerto". Public Sub enviarapuerto(ByVal label1 As String, ByVal label2 As String, ByVal label3 As String, ByVal label4 As String, ByVal label5 As String, ByVal label6 As String, ByVal label7 As String, ByVal label8 As String) binary378port = label1 + label2 + label3 + label4 + label5 + label6 + label7 + label8 'Se convierte el valor binario contenido en la variable "binary378port" a decimal. valordecimal = 0 For i As Integer = Len(binary378port) To 1 Step -1 valordecimal = valordecimal + Val(Mid(binary378port, i, 1)) * 2 ^ (8 - i) 'Toma el último dígito y lo multiplica por 2 a la cero, luego el penúltimo por 2 a la uno y así sucesivamente, pues se está realizando la conversión de binario a decimal. Next 'Se convierte el valor decimal (contenido en la variable "valordecimal") al correspondiente hexadecimal en tipo Short. valorshort = CShort(valordecimal) 'Se manda el valor correspondiente al puerto paralelo para que se enciendan y apaguen los focos correspondientes. Out(&H378, valorshort) 'En el puerto 378 (valor hexadecimal) del puerto paralelo, se manda como salida el valor hexadecimal contenido en la variable "valorhexadecimal" en tipo Short. End Sub End Module CÓDIGO DEL FORMULARIO Form1.vb 45 Option Strict Off Option Explicit On Module InpOut32_Declarations 'Inp and Out declarations for port I/O using inpout32.dll. Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Short) As Short Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Short, ByVal Value As Short) End Module Module variables 'Para declarar variables globales que se van a utilizar al programar. Public binary378port As String 'Variable para almacenar en una cadena el valor binario del puerto 378 del puerto paralelo. Public valordecimal As Integer 'Variable para almacenar el resultado de la conversión de binario a decimal. Public valorshort As Short 'Variable para almacenar en tipo Short el resultado de la conversión de decimal a hexadecimal. Public contadorfoco7 As Integer 'Variable para controlar el conteo binario con el foco 7. Public contadorfoco6 As Integer 'Variable para controlar el conteo binario con el foco 6. Public contadorfoco5 As Integer 'Variable para controlar el conteo binario con el foco 5. Public contadorfoco4 As Integer 'Variable para controlar el conteo binario con el foco 4. Public contadorfoco3 As Integer 'Variable para controlar el conteo binario con el foco 3. Public contadorfoco2 As Integer 'Variable para controlar el conteo binario con el foco 2. Public contadorfoco1 As Integer 'Variable para controlar el conteo binario con el foco 1. Public contadorrotacion As Integer 'Variable para controlar la rotación de los focos. Public contadorrandom As Integer 'Variable para controlar el random de los focos. End Module Public Class Form1 Private Sub bulb1off_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb1off.Click bulb1on.Visible = True bulb1off.Visible = False Label1.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb1on_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb1on.Click bulb1off.Visible = True bulb1on.Visible = False Label1.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb2on_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb2on.Click bulb2off.Visible = True bulb2on.Visible = False Label2.Text = "0" 46 enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb3on_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb3on.Click bulb3off.Visible = True bulb3on.Visible = False Label3.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb4on_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb4on.Click bulb4off.Visible = True bulb4on.Visible = False Label4.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb5on_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb5on.Click bulb5off.Visible = True bulb5on.Visible = False Label5.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb6on_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb6on.Click bulb6off.Visible = True bulb6on.Visible = False Label6.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb7on_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb7on.Click bulb7off.Visible = True bulb7on.Visible = False Label7.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb8on_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb8on.Click bulb8off.Visible = True bulb8on.Visible = False Label8.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb2off_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb2off.Click bulb2on.Visible = True 47 bulb2off.Visible = False Label2.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb3off_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb3off.Click bulb3on.Visible = True bulb3off.Visible = False Label3.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb4off_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb4off.Click bulb4on.Visible = True bulb4off.Visible = False Label4.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb5off_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb5off.Click bulb5on.Visible = True bulb5off.Visible = False Label5.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb6off_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb6off.Click bulb6on.Visible = True bulb6off.Visible = False Label6.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb7off_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb7off.Click bulb7on.Visible = True bulb7off.Visible = False Label7.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub bulb8off_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bulb8off.Click bulb8on.Visible = True bulb8off.Visible = False Label8.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub 48 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load azulRadioButton.Select() 'Para que al cargar el formulario aparezca predeterminadamente seleccionado el color azul. normalRadioButton.Select() 'Para que al cargar el formulario aparezca predeterminadamente seleccionada la velocidad Normal para el conteo binario. izquierdaaderechaRadioButton.Select() 'Para que al cargar el formulario aparezca predeterminadamente seleccionada la rotación izquierda a derecha de los focos. 'Se deshabilitan todos los PictureBox al cargar el formulario. bulb1on.Enabled = False bulb1off.Enabled = False bulb2on.Enabled = False bulb2off.Enabled = False bulb3on.Enabled = False bulb3off.Enabled = False bulb4on.Enabled = False bulb4off.Enabled = False bulb5on.Enabled = False bulb5off.Enabled = False bulb6on.Enabled = False bulb6off.Enabled = False bulb7on.Enabled = False bulb7off.Enabled = False bulb8on.Enabled = False bulb8off.Enabled = False End Sub Private Sub contadorbinarioButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles contadorbinarioButton.Click rotarTimer.Enabled = False randomTimer.Enabled = False 'Reiniciar variables públicas o globales que coordinan el conteo binario con los focos. contadorfoco7 = 0 contadorfoco6 = 0 contadorfoco5 = 0 contadorfoco4 = 0 contadorfoco3 = 0 contadorfoco2 = 0 contadorfoco1 = 0 'Para quitar sonidos cargados previamente (si es que los hay). If AxWindowsMediaPlayer.currentPlaylist.count > 0 Then 'Si existiera música cargada, con la siguiente línea se quita. AxWindowsMediaPlayer.currentPlaylist.removeItem(AxWindowsMediaPlayer.currentMedia) End If 'Para que no estén activados los botones stopmusicButton y playmusicButton a la vez, sino que solamente uno de los dos. playmusicButton.Enabled = True stopmusicButton.Enabled = False 'Se deshabilita el Timer1 para detener el conteo binario (reiniciarlo). contadorbinarioTimer.Enabled = False 'Se ponen visibles todos los PictureBox con foto de foco apagado y se ponen invisibles todos los PictureBox con foto de foco encendido (para reiniciar el sistema de luces o resetearlo). Se ponen todos los Label en "0". bulb1off.Visible = True bulb1on.Visible = False Label1.Text = "0" bulb2off.Visible = True bulb2on.Visible = False Label2.Text = "0" bulb3off.Visible = True 49 bulb3on.Visible = False Label3.Text = "0" bulb4off.Visible = True bulb4on.Visible = False Label4.Text = "0" bulb5off.Visible = True bulb5on.Visible = False Label5.Text = "0" bulb6off.Visible = True bulb6on.Visible = False Label6.Text = "0" bulb7off.Visible = True bulb7on.Visible = False Label7.Text = "0" bulb8off.Visible = True bulb8on.Visible = False Label8.Text = "0" 'Se deshabilitan todos los PictureBox al inicializar el contador binario. bulb1on.Enabled = False bulb1off.Enabled = False bulb2on.Enabled = False bulb2off.Enabled = False bulb3on.Enabled = False bulb3off.Enabled = False bulb4on.Enabled = False bulb4off.Enabled = False bulb5on.Enabled = False bulb5off.Enabled = False bulb6on.Enabled = False bulb6off.Enabled = False bulb7on.Enabled = False bulb7off.Enabled = False bulb8on.Enabled = False bulb8off.Enabled = False 'Se habilita el contadorbinarioTimer para inicializar el conteo binario. contadorbinarioTimer.Enabled = True End Sub Private Sub cliconoffButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cliconoffButton.Click 'Para quitar sonidos cargados previamente (si es que los hay). If AxWindowsMediaPlayer.currentPlaylist.count > 0 Then 'Si existiera música cargada, con la siguiente línea se quita. AxWindowsMediaPlayer.currentPlaylist.removeItem(AxWindowsMediaPlayer.currentMedia) End If 'Para que no estén activados los botones stopmusicButton y playmusicButton a la vez, sino que solamente uno de los dos. playmusicButton.Enabled = True stopmusicButton.Enabled = False 'Se deshabilitan el contadorbinarioTimer, rotarTimer y randomTimer para detener el conteo binario, la rotación y el random (por si estuvieran activados esos Timer). contadorbinarioTimer.Enabled = False rotarTimer.Enabled = False randomTimer.Enabled = False 'Se ponen visibles todos los PictureBox con foto de foco apagado y se ponen invisibles todos los PictureBox con foto de foco encendido (para reiniciar el sistema de luces o resetearlo). Se ponen todos los Label en "0". bulb1off.Visible = True bulb1on.Visible = False Label1.Text = "0" bulb2off.Visible = True 50 bulb2on.Visible = False Label2.Text = "0" bulb3off.Visible = True bulb3on.Visible = False Label3.Text = "0" bulb4off.Visible = True bulb4on.Visible = False Label4.Text = "0" bulb5off.Visible = True bulb5on.Visible = False Label5.Text = "0" bulb6off.Visible = True bulb6on.Visible = False Label6.Text = "0" bulb7off.Visible = True bulb7on.Visible = False Label7.Text = "0" bulb8off.Visible = True bulb8on.Visible = False Label8.Text = "0" 'Se habilitan todos los PictureBox. bulb1on.Enabled = True bulb1off.Enabled = True bulb2on.Enabled = True bulb2off.Enabled = True bulb3on.Enabled = True bulb3off.Enabled = True bulb4on.Enabled = True bulb4off.Enabled = True bulb5on.Enabled = True bulb5off.Enabled = True bulb6on.Enabled = True bulb6off.Enabled = True bulb7on.Enabled = True bulb7off.Enabled = True bulb8on.Enabled = True bulb8off.Enabled = True enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub apagarfocosButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles apagarfocosButton.Click 'Para quitar sonidos cargados previamente (si es que los hay). If AxWindowsMediaPlayer.currentPlaylist.count > 0 Then 'Si existiera música cargada, con la siguiente línea se quita. AxWindowsMediaPlayer.currentPlaylist.removeItem(AxWindowsMediaPlayer.currentMedia) End If 'Para que no estén activados los botones stopmusicButton y playmusicButton a la vez, sino que solamente uno de los dos. playmusicButton.Enabled = True stopmusicButton.Enabled = False 'Se deshabilitan todos los PictureBox. bulb1on.Enabled = False bulb1off.Enabled = False bulb2on.Enabled = False bulb2off.Enabled = False bulb3on.Enabled = False bulb3off.Enabled = False bulb4on.Enabled = False 51 bulb4off.Enabled = False bulb5on.Enabled = False bulb5off.Enabled = False bulb6on.Enabled = False bulb6off.Enabled = False bulb7on.Enabled = False bulb7off.Enabled = False bulb8on.Enabled = False bulb8off.Enabled = False 'Se deshabilitan el contadorbinarioTimer, rotarTimer y randomTimer para detener el conteo binario, la rotación y el random (por si estuvieran activados esos Timer). contadorbinarioTimer.Enabled = False rotarTimer.Enabled = False randomTimer.Enabled = False 'Se ponen visibles todos los PictureBox con foto de foco apagado y se ponen invisibles todos los PictureBox con foto de foco encendido (para reiniciar el sistema de luces o resetearlo). Se ponen todos los Label en "0". bulb1off.Visible = True bulb1on.Visible = False Label1.Text = "0" bulb2off.Visible = True bulb2on.Visible = False Label2.Text = "0" bulb3off.Visible = True bulb3on.Visible = False Label3.Text = "0" bulb4off.Visible = True bulb4on.Visible = False Label4.Text = "0" bulb5off.Visible = True bulb5on.Visible = False Label5.Text = "0" bulb6off.Visible = True bulb6on.Visible = False Label6.Text = "0" bulb7off.Visible = True bulb7on.Visible = False Label7.Text = "0" bulb8off.Visible = True bulb8on.Visible = False Label8.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub encenderfocusButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles encenderfocusButton.Click 'Para quitar sonidos cargados previamente (si es que los hay). If AxWindowsMediaPlayer.currentPlaylist.count > 0 Then 'Si existiera música cargada, con la siguiente línea se quita. AxWindowsMediaPlayer.currentPlaylist.removeItem(AxWindowsMediaPlayer.currentMedia) End If 'Para que no estén activados los botones stopmusicButton y playmusicButton a la vez, sino que solamente uno de los dos. playmusicButton.Enabled = True stopmusicButton.Enabled = False 'Se deshabilitan el contadorbinarioTimer, rotarTimer y randomTimer para detener el conteo binario, la rotación y el random (por si estuvieran activados esos Timer). contadorbinarioTimer.Enabled = False rotarTimer.Enabled = False 52 randomTimer.Enabled = False 'Se ponen visibles todos los PictureBox con foto de foco encendido y se ponen invisibles todos los PictureBox con foto de foco apagado (para encender todas las luces del sistema). Se ponen todos los Label en "1". bulb1on.Visible = True Label1.Text = "1" bulb2on.Visible = True Label2.Text = "1" bulb3on.Visible = True Label3.Text = "1" bulb4on.Visible = True Label4.Text = "1" bulb5on.Visible = True Label5.Text = "1" bulb6on.Visible = True Label6.Text = "1" bulb7on.Visible = True Label7.Text = "1" bulb8on.Visible = True Label8.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click acercadeForm.Show() End Sub Private Sub stopmusicButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles stopmusicButton.Click 'Para que no estén activados los botones stopmusicButton y playmusicButton a la vez, sino que solamente uno de los dos. playmusicButton.Enabled = True stopmusicButton.Enabled = False 'Se deshabilitan todos los PictureBox. bulb1on.Enabled = False bulb1off.Enabled = False bulb2on.Enabled = False bulb2off.Enabled = False bulb3on.Enabled = False bulb3off.Enabled = False bulb4on.Enabled = False bulb4off.Enabled = False bulb5on.Enabled = False bulb5off.Enabled = False bulb6on.Enabled = False bulb6off.Enabled = False bulb7on.Enabled = False bulb7off.Enabled = False bulb8on.Enabled = False bulb8off.Enabled = False 'Se deshabilitan el contadorbinarioTimer, rotarTimer y randomTimer para detener el conteo binario, la rotación y el random (por si estuvieran activados esos Timer). contadorbinarioTimer.Enabled = False rotarTimer.Enabled = False randomTimer.Enabled = False 'Se ponen visibles todos los PictureBox con foto de foco apagado y se ponen invisibles todos los PictureBox con foto de foco encendido (para reiniciar el sistema de luces o resetearlo). Se ponen todos los Label en "0". bulb1off.Visible = True bulb1on.Visible = False 53 Label1.Text = "0" bulb2off.Visible = True bulb2on.Visible = False Label2.Text = "0" bulb3off.Visible = True bulb3on.Visible = False Label3.Text = "0" bulb4off.Visible = True bulb4on.Visible = False Label4.Text = "0" bulb5off.Visible = True bulb5on.Visible = False Label5.Text = "0" bulb6off.Visible = True bulb6on.Visible = False Label6.Text = "0" bulb7off.Visible = True bulb7on.Visible = False Label7.Text = "0" bulb8off.Visible = True bulb8on.Visible = False Label8.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. 'Para detener la música. AxWindowsMediaPlayer.close() 'Para quitar música cargada previamente (si es que hay) If AxWindowsMediaPlayer.currentPlaylist.count > 0 Then 'Si existiera música cargada, con la siguiente línea se quita. AxWindowsMediaPlayer.currentPlaylist.removeItem(AxWindowsMediaPlayer.currentMedia) End If End Sub Private Sub playmusicButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles playmusicButton.Click 'Para que no estén activados los botones stopmusicButton y playmusicButton a la vez, sino que solamente uno de los dos. stopmusicButton.Enabled = True playmusicButton.Enabled = False 'Se deshabilitan todos los PictureBox. bulb1on.Enabled = False bulb1off.Enabled = False bulb2on.Enabled = False bulb2off.Enabled = False bulb3on.Enabled = False bulb3off.Enabled = False bulb4on.Enabled = False bulb4off.Enabled = False bulb5on.Enabled = False bulb5off.Enabled = False bulb6on.Enabled = False bulb6off.Enabled = False bulb7on.Enabled = False bulb7off.Enabled = False bulb8on.Enabled = False bulb8off.Enabled = False 'Se deshabilitan el contadorbinarioTimer, rotarTimer y randomTimer para detener el conteo binario, la rotación y random (por si estuvieran activados esos Timer). contadorbinarioTimer.Enabled = False rotarTimer.Enabled = False 54 randomTimer.Enabled = False 'Se ponen visibles todos los PictureBox con foto de foco apagado y se ponen invisibles todos los PictureBox con foto de foco encendido (para reiniciar el sistema de luces o resetearlo). Se ponen todos los Label en "0". bulb1off.Visible = True bulb1on.Visible = False Label1.Text = "0" bulb2off.Visible = True bulb2on.Visible = False Label2.Text = "0" bulb3off.Visible = True bulb3on.Visible = False Label3.Text = "0" bulb4off.Visible = True bulb4on.Visible = False Label4.Text = "0" bulb5off.Visible = True bulb5on.Visible = False Label5.Text = "0" bulb6off.Visible = True bulb6on.Visible = False Label6.Text = "0" bulb7off.Visible = True bulb7on.Visible = False Label7.Text = "0" bulb8off.Visible = True bulb8on.Visible = False Label8.Text = "0" 'Para detener la música. AxWindowsMediaPlayer.close() 'Para quitar sonidos cargados previamente (si es que los hay). If AxWindowsMediaPlayer.currentPlaylist.count > 0 Then 'Si existiera música cargada, con la siguiente línea se quita. AxWindowsMediaPlayer.currentPlaylist.removeItem(AxWindowsMediaPlayer.currentMedia) End If 'Programación de los focos que se van a encender y sonidos correspondientes a cargar. If azulRadioButton.Checked = True Then 'Para encender los focos azules. bulb1on.Visible = True bulb1off.Visible = False Label1.Text = "1" bulb5on.Visible = True bulb5off.Visible = False Label5.Text = "1" 'Para apagar todos los focos que no sean azules. bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True 55 Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" 'Para cargar sonido correspondiente. Dim song = AxWindowsMediaPlayer.newMedia("C:\Documents and Settings\hp pavilion a600n\Desktop\juegodelucespuertoparalelo\myresources\preview.mp3") 'Recordar que al ejecutar el programa en otra computadora, ésta dirección ruta del archivo (que puede tener cualquier formato soportado por Windows Media Player) tiene que ser actualizada a la ubicación del archivo en la nueva computadora, pues de lo contrario se estará invocando una dirección errónea. AxWindowsMediaPlayer.currentPlaylist.appendItem(song) enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End If If rojoRadioButton.Checked = True Then 'Para encender los focos rojos. bulb2on.Visible = True bulb2off.Visible = False Label2.Text = "1" bulb6on.Visible = True bulb6off.Visible = False Label6.Text = "1" 'Para apagar todos los focos que no sean rojos. bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" 'Para cargar sonido correspondiente. Dim song = AxWindowsMediaPlayer.newMedia("C:\Documents and Settings\hp pavilion a600n\Desktop\juegodelucespuertoparalelo\myresources\distance.wma") 'Recordar que al ejecutar el programa en otra computadora, ésta dirección ruta del archivo (que puede tener cualquier formato soportado por Windows Media Player) tiene que ser actualizada a la ubicación del archivo en la nueva computadora, pues de lo contrario se estará invocando una dirección errónea. AxWindowsMediaPlayer.currentPlaylist.appendItem(song) enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End If If amarilloRadioButton.Checked = True Then 'Para encender los focos amarillos. bulb3on.Visible = True bulb3off.Visible = False Label3.Text = "1" bulb7on.Visible = True 56 bulb7off.Visible = False Label7.Text = "1" 'Para apagar todos los focos que no sean amarillos. bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" 'Para cargar sonido correspondiente. Dim song = AxWindowsMediaPlayer.newMedia("C:\Documents and Settings\hp pavilion a600n\Desktop\juegodelucespuertoparalelo\myresources\amanda.wma") 'Recordar que al ejecutar el programa en otra computadora, ésta dirección ruta del archivo (que puede tener cualquier formato soportado por Windows Media Player) tiene que ser actualizada a la ubicación del archivo en la nueva computadora, pues de lo contrario se estará invocando una dirección errónea. AxWindowsMediaPlayer.currentPlaylist.appendItem(song) enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End If If verdeRadioButton.Checked = True Then 'Para encender los focos verdes. bulb4on.Visible = True bulb4off.Visible = False Label4.Text = "1" bulb8on.Visible = True bulb8off.Visible = False Label8.Text = "1" 'Para apagar todos los focos que no sean verdes. bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" 'Para cargar sonido correspondiente. 57 Dim song = AxWindowsMediaPlayer.newMedia("C:\Documents and Settings\hp pavilion a600n\Desktop\juegodelucespuertoparalelo\myresources\dindinwolittlechild.wma") 'Recordar que al ejecutar el programa en otra computadora, ésta dirección ruta del archivo (que puede tener cualquier formato soportado por Windows Media Player) tiene que ser actualizada a la ubicación del archivo en la nueva computadora, pues de lo contrario se estará invocando una dirección errónea. AxWindowsMediaPlayer.currentPlaylist.appendItem(song) enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ayudaForm.Show() End Sub Private Sub contadorbinarioTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles contadorbinarioTimer.Tick 'Si está seleccionada velocidad lenta para el conteo binario. If lentoRadioButton.Checked = True Then contadorbinarioTimer.Interval = 2000 End If 'Si está seleccionada velocidad normal para el conteo binario. If normalRadioButton.Checked = True Then contadorbinarioTimer.Interval = 1000 End If 'Si está seleccionada velocidadd rápida para el conteo binario. If rapidoRadioButton.Checked = True Then contadorbinarioTimer.Interval = 500 End If 'Código para controlar el conteo binario con el foco 8. If Label8.Text = "0" Then 'Si el foco 8 está apagado. bulb8on.Visible = True bulb8off.Visible = False Label8.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Else 'Si el foco 8 está encendido. bulb8off.Visible = True bulb8on.Visible = False Label8.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End If 'Código para controlar el conteo binario con el foco 7. contadorfoco7 = contadorfoco7 + 1 If contadorfoco7 = 2 Then contadorfoco7 = 0 'Reinicia el contadorfoco7. If Label7.Text = "0" Then 'Si el foco 7 está apagado. bulb7on.Visible = True bulb7off.Visible = False Label7.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Else 'Si el foco 7 está encendido. bulb7off.Visible = True bulb7on.Visible = False Label7.Text = "0" 58 enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End If End If 'Código para controlar el conteo binario con el foco 6. contadorfoco6 = contadorfoco6 + 1 If contadorfoco6 = 4 Then contadorfoco6 = 0 'Reinicia el contadorfoco6. If Label6.Text = "0" Then 'Si el foco 6 está apagado. bulb6on.Visible = True bulb6off.Visible = False Label6.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Else 'Si el foco 6 está encendido. bulb6off.Visible = True bulb6on.Visible = False Label6.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End If End If 'Código para controlar el conteo binario con el foco 5. contadorfoco5 = contadorfoco5 + 1 If contadorfoco5 = 8 Then contadorfoco5 = 0 'Reinicia el contadorfoco5. If Label5.Text = "0" Then 'Si el foco 5 está apagado. bulb5on.Visible = True bulb5off.Visible = False Label5.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Else 'Si el foco 5 está encendido. bulb5off.Visible = True bulb5on.Visible = False Label5.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End If End If 'Código para controlar el conteo binario con el foco 4. contadorfoco4 = contadorfoco4 + 1 If contadorfoco4 = 16 Then contadorfoco4 = 0 'Reinicia el contadorfoco4. If Label4.Text = "0" Then 'Si el foco 4 está apagado. bulb4on.Visible = True bulb4off.Visible = False Label4.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Else 'Si el foco 4 está encendido. bulb4off.Visible = True bulb4on.Visible = False Label4.Text = "0" 59 enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End If End If 'Código para controlar el conteo binario con el foco 3. contadorfoco3 = contadorfoco3 + 1 If contadorfoco3 = 32 Then contadorfoco3 = 0 'Reinicia el contadorfoco3. If Label3.Text = "0" Then 'Si el foco 3 está apagado. bulb3on.Visible = True bulb3off.Visible = False Label3.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Else 'Si el foco 3 está encendido. bulb3off.Visible = True bulb3on.Visible = False Label3.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End If End If 'Código para controlar el conteo binario con el foco 2. contadorfoco2 = contadorfoco2 + 1 If contadorfoco2 = 64 Then contadorfoco2 = 0 'Reinicia el contadorfoco2. If Label2.Text = "0" Then 'Si el foco 2 está apagado. bulb2on.Visible = True bulb2off.Visible = False Label2.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Else 'Si el foco 2 está encendido. bulb2off.Visible = True bulb2on.Visible = False Label2.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End If End If 'Código para controlar el conteo binario con el foco 1. contadorfoco1 = contadorfoco1 + 1 If contadorfoco1 = 128 Then contadorfoco1 = 0 'Reinicia el contadorfoco1. If Label1.Text = "0" Then 'Si el foco 1 está apagado. bulb1on.Visible = True bulb1off.Visible = False Label1.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Else 'Si el foco 1 está encendido. bulb1off.Visible = True bulb1on.Visible = False Label1.Text = "0" 60 enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. End If End If End Sub Private Sub rotarTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rotarTimer.Tick 'Si está seleccionada velocidad lenta para el conteo binario. If lentoRadioButton.Checked = True Then rotarTimer.Interval = 2000 End If 'Si está seleccionada velocidad normal para el conteo binario. If normalRadioButton.Checked = True Then rotarTimer.Interval = 1000 End If 'Si está seleccionada velocidadd rápida para el conteo binario. If rapidoRadioButton.Checked = True Then rotarTimer.Interval = 500 End If If izquierdaaderechaRadioButton.Checked = True Then Select Case contadorrotacion Case 0 'Esto se dará la primera vez que se active el objeto "rotarTimer", entonces se van a mantener los focos apagados y al final se le va a cambiar el valor de 0 a 1 a la variable "contadorrotacion" para que después encienda el primer foco (contando los focos de izquierda a derecha) y luego se mantendrá el ciclo de rotación de izquierda a derecha. contadorrotacion = 1 'Para que la variable "contadorrotacion" valga 1 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 1 (contando los focos de izquierda a derecha). Case 1 'If "contadorrotacion = 1" 'Apagar todos los focos menos el foco 1 (contando los focos de izquierda a derecha). bulb1on.Visible = True bulb1off.Visible = False Label1.Text = "1" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 2 'Para que la variable "contadorrotacion" valga 2 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 2 (contando los focos de izquierda a derecha). 61 enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 2 'If "contadorrotacion = 2" 'Apagar todos los focos menos el foco 2 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = True bulb2off.Visible = False Label2.Text = "1" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 3 'Para que la variable "contadorrotacion" valga 3 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 3 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 3 'If "contadorrotacion = 3" 'Apagar todos los focos menos el foco 3 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = True bulb3off.Visible = False Label3.Text = "1" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False 62 bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 4 'Para que la variable "contadorrotacion" valga 4 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 4 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 4 'If "contadorrotacion = 4" 'Apagar todos los focos menos el foco 4 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = True bulb4off.Visible = False Label4.Text = "1" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 5 'Para que la variable "contadorrotacion" valga 5 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 5 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 5 'If "contadorrotacion = 5" 'Apagar todos los focos menos el foco 5 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = True bulb5off.Visible = False Label5.Text = "1" bulb6on.Visible = False bulb6off.Visible = True 63 Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 6 'Para que la variable "contadorrotacion" valga 6 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 6 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 6 'If "contadorrotacion = 6" 'Apagar todos los focos menos el foco 6 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = True bulb6off.Visible = False Label6.Text = "1" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 7 'Para que la variable "contadorrotacion" valga 7 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 7 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 7 'If "contadorrotacion = 7" 'Apagar todos los focos menos el foco 7 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" 64 bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = True bulb7off.Visible = False Label7.Text = "1" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 8 'Para que la variable "contadorrotacion" valga 8 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 8 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 8 'If "contadorrotacion = 8" 'Apagar todos los focos menos el foco 8 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = True bulb8off.Visible = False Label8.Text = "1" contadorrotacion = 1 'Para que la variable "contadorrotacion" valga 1 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 1 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. 'No se necesita un "Case Else", pues las 9 opciones que se pueden dar están bien definidas. End Select End If If derechaaizquierdaRadioButton.Checked = True Then Select Case contadorrotacion Case 0 'Esto se dará la primera vez que se active el objeto "rotarTimer", entonces se van a mantener los focos apagados y al final se le va a cambiar el valor de 0 a 8 a la variable "contadorrotacion" para que después encienda el octavo foco (contando 65 los focos de izquierda a derecha) y luego se mantendrá el ciclo de rotación de derecha a izquierda. contadorrotacion = 8 'Para que la variable "contadorrotacion" valga 8 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 8 (contando los focos de izquierda a derecha). Case 1 'If "contadorrotacion = 1" 'Apagar todos los focos menos el foco 1 contando de izquierda a derecha. bulb1on.Visible = True bulb1off.Visible = False Label1.Text = "1" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 8 'Para que la variable "contadorrotacion" valga 8 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 8 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 2 'If "contadorrotacion = 2" 'Apagar todos los focos menos el foco 2 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = True bulb2off.Visible = False Label2.Text = "1" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True 66 Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 1 'Para que la variable "contadorrotacion" valga 1 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 1 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 3 'If "contadorrotacion = 3" 'Apagar todos los focos menos el foco 3 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = True bulb3off.Visible = False Label3.Text = "1" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 2 'Para que la variable "contadorrotacion" valga 2 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 2 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 4 'If "contadorrotacion = 4" 'Apagar todos los focos menos el foco 4 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = True bulb4off.Visible = False Label4.Text = "1" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" 67 bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 3 'Para que la variable "contadorrotacion" valga 3 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 3 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 5 'If "contadorrotacion = 5" 'Apagar todos los focos menos el foco 5 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = True bulb5off.Visible = False Label5.Text = "1" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 4 'Para que la variable "contadorrotacion" valga 4 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 4 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 6 'If "contadorrotacion = 6" 'Apagar todos los focos menos el foco 6 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False 68 bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = True bulb6off.Visible = False Label6.Text = "1" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 5 'Para que la variable "contadorrotacion" valga 5 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 5 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 7 'If "contadorrotacion = 7" 'Apagar todos los focos menos el foco 7 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = True bulb7off.Visible = False Label7.Text = "1" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 6 'Para que la variable "contadorrotacion" valga 6 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 6 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 8 'If "contadorrotacion = 8" 'Apagar todos los focos menos el foco 8 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True 69 Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = True bulb8off.Visible = False Label8.Text = "1" contadorrotacion = 7 'Para que la variable "contadorrotacion" valga 7 y que cuando se vuelva a activar el "rotarTimer", que encienda el foco 7 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. 'No se necesita un "Case Else", pues las 9 opciones que se pueden dar están bien definidas. End Select End If If izquierdaaderechaporcoloresRadioButton.Checked = True Then Select Case contadorrotacion Case 0 'Esto se dará la primera vez que se active el objeto "rotarTimer", entonces se van a mantener los focos apagados y al final se le va a cambiar el valor de 0 a 1 a la variable "contadorrotacion" para que después enciendan el primer y cuarto foco (contando los focos de izquierda a derecha) y luego se mantendrá el ciclo de rotación de izquierda a derecha. contadorrotacion = 1 'Para que la variable "contadorrotacion" valga 1 y que cuando se vuelva a activar el "rotarTimer", que enciendan los focos 1 y 4 (contando los focos de izquierda a derecha). Case 1 'If "contadorrotacion = 1" 'Apagar todos los focos menos el foco 1 y el 5 contando de izquierda a derecha. bulb1on.Visible = True bulb1off.Visible = False Label1.Text = "1" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = True bulb5off.Visible = False Label5.Text = "1" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False 70 bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 2 'Para que la variable "contadorrotacion" valga 2 y que cuando se vuelva a activar el "rotarTimer", que enciendan los focos 2 y 4 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 2 'If "contadorrotacion = 2" 'Apagar todos los focos menos los focos 2 y 6 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = True bulb2off.Visible = False Label2.Text = "1" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = True bulb6off.Visible = False Label6.Text = "1" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 3 'Para que la variable "contadorrotacion" valga 3 y que cuando se vuelva a activar el "rotarTimer", que enciendan los focos 3 y 7 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 3 'If "contadorrotacion = 3" 'Apagar todos los focos menos los focos 3 y 7 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = True bulb3off.Visible = False Label3.Text = "1" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True 71 Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = True bulb7off.Visible = False Label7.Text = "1" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 4 'Para que la variable "contadorrotacion" valga 4 y que cuando se vuelva a activar el "rotarTimer", que encienda los focos 4 y 8 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 4 'If "contadorrotacion = 4" 'Apagar todos los focos menos los focos 4 y 8 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = True bulb4off.Visible = False Label4.Text = "1" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = True bulb8off.Visible = False Label8.Text = "1" contadorrotacion = 1 'Para que la variable "contadorrotacion" valga 1 y que cuando se vuelva a activar el "rotarTimer", que encienda los focos 1 y 5 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. 'No se necesita un "Case Else", pues las 5 opciones que se pueden dar están bien definidas. End Select End If If derechaaizquierdaporcoloresRadioButton.Checked = True Then Select Case contadorrotacion Case 0 'Esto se dará la primera vez que se active el objeto "rotarTimer", entonces se van a mantener los focos apagados y al final se le va a cambiar el valor de 0 a 1 a la variable "contadorrotacion" para que después enciendan el octavo y cuarto foco (contando los focos de izquierda a derecha) y luego se mantendrá el ciclo de rotación de izquierda a derecha. 72 contadorrotacion = 4 'Para que la variable "contadorrotacion" valga 4 y que cuando se vuelva a activar el "rotarTimer", que enciendan los focos 8 y 4 (contando los focos de izquierda a derecha). Case 1 'If "contadorrotacion = 1" 'Apagar todos los focos menos el foco 1 y el 5 contando de izquierda a derecha. bulb1on.Visible = True bulb1off.Visible = False Label1.Text = "1" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = True bulb5off.Visible = False Label5.Text = "1" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 4 'Para que la variable "contadorrotacion" valga 4 y que cuando se vuelva a activar el "rotarTimer", que enciendan los focos 4 y 8 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 2 'If "contadorrotacion = 2" 'Apagar todos los focos menos los focos 2 y 6 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = True bulb2off.Visible = False Label2.Text = "1" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = True bulb6off.Visible = False Label6.Text = "1" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False 73 bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 1 'Para que la variable "contadorrotacion" valga 1 y que cuando se vuelva a activar el "rotarTimer", que enciendan los focos 1 y 6 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 3 'If "contadorrotacion = 3" 'Apagar todos los focos menos los focos 3 y 7 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = True bulb3off.Visible = False Label3.Text = "1" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = True bulb7off.Visible = False Label7.Text = "1" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" contadorrotacion = 2 'Para que la variable "contadorrotacion" valga 2 y que cuando se vuelva a activar el "rotarTimer", que encienda los focos 2 y 6 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 4 'If "contadorrotacion = 4" 'Apagar todos los focos menos los focos 4 y 8 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = True bulb4off.Visible = False Label4.Text = "1" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True 74 Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = True bulb8off.Visible = False Label8.Text = "1" contadorrotacion = 3 'Para que la variable "contadorrotacion" valga 3 y que cuando se vuelva a activar el "rotarTimer", que encienda los focos 3 y 7 (contando los focos de izquierda a derecha). enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. 'No se necesita un "Case Else", pues las 5 opciones que se pueden dar están bien definidas. End Select End If End Sub Private Sub rotarButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rotarButton.Click contadorbinarioTimer.Enabled = False randomTimer.Enabled = False 'Reiniciar variable pública o global que coordina la rotación. contadorrotacion = 0 'Para quitar sonidos cargados previamente (si es que los hay). If AxWindowsMediaPlayer.currentPlaylist.count > 0 Then 'Si existiera música cargada, con la siguiente línea se quita. AxWindowsMediaPlayer.currentPlaylist.removeItem(AxWindowsMediaPlayer.currentMedia) End If 'Para que no estén activados los botones stopmusicButton y playmusicButton a la vez, sino que solamente uno de los dos. playmusicButton.Enabled = True stopmusicButton.Enabled = False 'Se deshabilita el rotarTimer para detener la rotación (reiniciarla). rotarTimer.Enabled = False 'Se ponen visibles todos los PictureBox con foto de foco apagado y se ponen invisibles todos los PictureBox con foto de foco encendido (para reiniciar el sistema de luces o resetearlo). Se ponen todos los Label en "0". bulb1off.Visible = True bulb1on.Visible = False Label1.Text = "0" bulb2off.Visible = True bulb2on.Visible = False Label2.Text = "0" bulb3off.Visible = True bulb3on.Visible = False Label3.Text = "0" bulb4off.Visible = True bulb4on.Visible = False Label4.Text = "0" bulb5off.Visible = True bulb5on.Visible = False Label5.Text = "0" bulb6off.Visible = True bulb6on.Visible = False Label6.Text = "0" bulb7off.Visible = True bulb7on.Visible = False Label7.Text = "0" bulb8off.Visible = True 75 bulb8on.Visible = False Label8.Text = "0" 'Se deshabilitan todos los PictureBox al inicializar la rotación. bulb1on.Enabled = False bulb1off.Enabled = False bulb2on.Enabled = False bulb2off.Enabled = False bulb3on.Enabled = False bulb3off.Enabled = False bulb4on.Enabled = False bulb4off.Enabled = False bulb5on.Enabled = False bulb5off.Enabled = False bulb6on.Enabled = False bulb6off.Enabled = False bulb7on.Enabled = False bulb7off.Enabled = False bulb8on.Enabled = False bulb8off.Enabled = False 'Se habilita el rotarTimer para inicializar la rotación. rotarTimer.Enabled = True End Sub Private Sub randomButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles randomButton.Click contadorbinarioTimer.Enabled = False rotarTimer.Enabled = False 'Reiniciar variable pública o global que coordina el random. contadorrandom = 0 'Para quitar sonidos cargados previamente (si es que los hay). If AxWindowsMediaPlayer.currentPlaylist.count > 0 Then 'Si existiera música cargada, con la siguiente línea se quita. AxWindowsMediaPlayer.currentPlaylist.removeItem(AxWindowsMediaPlayer.currentMedia) End If 'Para que no estén activados los botones stopmusicButton y playmusicButton a la vez, sino que solamente uno de los dos. playmusicButton.Enabled = True stopmusicButton.Enabled = False 'Se deshabilita el rotarTimer para detener la rotación (reiniciarla). rotarTimer.Enabled = False 'Se ponen visibles todos los PictureBox con foto de foco apagado y se ponen invisibles todos los PictureBox con foto de foco encendido (para reiniciar el sistema de luces o resetearlo). Se ponen todos los Label en "0". bulb1off.Visible = True bulb1on.Visible = False Label1.Text = "0" bulb2off.Visible = True bulb2on.Visible = False Label2.Text = "0" bulb3off.Visible = True bulb3on.Visible = False Label3.Text = "0" bulb4off.Visible = True bulb4on.Visible = False Label4.Text = "0" bulb5off.Visible = True bulb5on.Visible = False Label5.Text = "0" bulb6off.Visible = True bulb6on.Visible = False Label6.Text = "0" 76 bulb7off.Visible = True bulb7on.Visible = False Label7.Text = "0" bulb8off.Visible = True bulb8on.Visible = False Label8.Text = "0" 'Se deshabilitan todos los PictureBox al inicializar la rotación. bulb1on.Enabled = False bulb1off.Enabled = False bulb2on.Enabled = False bulb2off.Enabled = False bulb3on.Enabled = False bulb3off.Enabled = False bulb4on.Enabled = False bulb4off.Enabled = False bulb5on.Enabled = False bulb5off.Enabled = False bulb6on.Enabled = False bulb6off.Enabled = False bulb7on.Enabled = False bulb7off.Enabled = False bulb8on.Enabled = False bulb8off.Enabled = False 'Se habilita el randomTimer para inicializar el random. randomTimer.Enabled = True End Sub Private Sub randomTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles randomTimer.Tick 'Si está seleccionada velocidad lenta para el conteo binario. If lentoRadioButton.Checked = True Then randomTimer.Interval = 2000 End If 'Si está seleccionada velocidad normal para el conteo binario. If normalRadioButton.Checked = True Then randomTimer.Interval = 1000 End If 'Si está seleccionada velocidadd rápida para el conteo binario. If rapidoRadioButton.Checked = True Then randomTimer.Interval = 500 End If Randomize() 'Fijar la semilla aleatoria para usarla con la función Rnd(). 'La función Rnd() devuelve un número random menor que 1 pero mayor que 0. 'La siguiente línea de código devuelve un valor random entre el 1 y el 8. contadorrandom = CInt(Int((8 - 1 + 1) * Rnd() + 1)) Select Case contadorrandom Case 1 'If "contadorrandom = 1" 'Apagar todos los focos menos el foco 1 (contando los focos de izquierda a derecha). bulb1on.Visible = True bulb1off.Visible = False Label1.Text = "1" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False 77 bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se mandar valores al puerto paralelo. Case 2 'If "contadorrandom = 2" 'Apagar todos los focos menos el foco 2 a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = True bulb2off.Visible = False Label2.Text = "1" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se mandar valores al puerto paralelo. Case 3 'If "contadorrandom = 3" 'Apagar todos los focos menos el foco 3 a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = True bulb3off.Visible = False Label3.Text = "1" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label3.Text, Label4.Text, llama al procedimiento para (contando los focos de izquierda Label3.Text, Label4.Text, llama al procedimiento para (contando los focos de izquierda 78 Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se mandar valores al puerto paralelo. Case 4 'If "contadorrandom = 4" 'Apagar todos los focos menos el foco 4 a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = True bulb4off.Visible = False Label4.Text = "1" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se mandar valores al puerto paralelo. Case 5 'If "contadorrandom = 5" 'Apagar todos los focos menos el foco 5 a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = True bulb5off.Visible = False Label5.Text = "1" Label3.Text, Label4.Text, llama al procedimiento para (contando los focos de izquierda Label3.Text, Label4.Text, llama al procedimiento para (contando los focos de izquierda 79 bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se mandar valores al puerto paralelo. Case 6 'If "contadorrandom = 6" 'Apagar todos los focos menos el foco 6 a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = True bulb6off.Visible = False Label6.Text = "1" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se mandar valores al puerto paralelo. Case 7 'If "contadorrandom = 7" 'Apagar todos los focos menos el foco 7 a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False Label3.Text, Label4.Text, llama al procedimiento para (contando los focos de izquierda Label3.Text, Label4.Text, llama al procedimiento para (contando los focos de izquierda 80 bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = True bulb7off.Visible = False Label7.Text = "1" bulb8on.Visible = False bulb8off.Visible = True Label8.Text = "0" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. Case 8 'If "contadorrandom = " 'Apagar todos los focos menos el foco 8 (contando los focos de izquierda a derecha). bulb1on.Visible = False bulb1off.Visible = True Label1.Text = "0" bulb2on.Visible = False bulb2off.Visible = True Label2.Text = "0" bulb3on.Visible = False bulb3off.Visible = True Label3.Text = "0" bulb4on.Visible = False bulb4off.Visible = True Label4.Text = "0" bulb5on.Visible = False bulb5off.Visible = True Label5.Text = "0" bulb6on.Visible = False bulb6off.Visible = True Label6.Text = "0" bulb7on.Visible = False bulb7off.Visible = True Label7.Text = "0" bulb8on.Visible = True bulb8off.Visible = False Label8.Text = "1" enviarapuerto(Label1.Text, Label2.Text, Label3.Text, Label4.Text, Label5.Text, Label6.Text, Label7.Text, Label8.Text) 'Se llama al procedimiento para mandar valores al puerto paralelo. 'No se necesita un "Case Else", pues las 8 opciones que se pueden dar están bien definidas. End Select End Sub End Class CÓDIGO DEL FORMULARIO ayudaForm.vb Public Class ayudaForm Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() 'Cerrar formulario actual. End Sub End Class CÓDIGO DEL FORMULARIO acercadeForm.vb 81 Public Class acercadeForm Private Sub cerrarButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cerrarButton.Click Me.Close() 'Cerrar formulario actual. End Sub End Class DISEÑO Y ENSAMBLAJE DEL CIRCUITO ELÉCTRICO Hasta este momento se ha dado a conocer toda la parte de software y programación del Juego de Luces Controlado por Computadora Versión 1.0. Ahora viene lo que podría llamarse “la parte de hardware” de este sistema, pues consiste en armar el circuito y diseñarlo para que sea conectado al puerto paralelo de la computadora y que los focos respondan correctamente a las instrucciones que se les dé a través de la computadora. Pero antes de ello se presentará una breve introducción explicativa sobre el puerto paralelo de la PC. 82 PUERTO PARALELO DE LA COMPUTADORA La imagen de los conectores del puerto paralelo (DB 25) se muestra a continuación: El puerto paralelo contiene a su vez tres puertos, que son los siguientes: Puerto de datos (pines 2 al 9): es el PORT 888 (378 hexadecimal) y es de sólo escritura. Por este registro se envían los datos al exterior de la PC. CUIDADO: ¡no se deben enviar señales eléctricas al ordenador por estos pines! Puerto de estado (pines 15, 13, 12, 10 y 11): es el PORT 889 (379 hexadecimal) y es de sólo lectura. Por aquí se envían señales eléctricas al ordenador. De este puerto sólo se utilizan los cinco bits de más peso, que son el bit 7, 6, 5, 4 y 3 teniendo en cuenta que el bit 7 funciona en modo invertido. Puerto de control (pines 1, 14, 16 y 17): es el correspondiente al PORT 890, y es de lectura/escritura, es decir, se podrán enviar o recibir señales eléctricas, según las necesidades que se tengan. De los 8 bits de este registro sólo se utilizan los cuatro de menor peso, o sea el 0, 1, 2 y 3, con un pequeño detalle: los bits 0, 1, y 3 están invertidos. En esta imagen se pueden ver los tres puertos (conocidos como registros), sus bits y los pines asignados a cada uno de ellos. La imagen corresponde a un conector DB-25 (Hembra): 83 COMPONENTES NECESARIOS DESCRIPCIÓN Resistencia de 1,2 Kohm X ½ watt Resistencia de 470 Ohm X ½ watt Optoacopladores MOC3011, o su equivalente Switch colgante Placa para circuito impreso de 12x6 cm Triac BT137 o su equivalente 8 focos 60W 115V Receptáculos de porcelana para focus de 110V Toma macho 5 metros de cable eléctrico Conector 25 pines macho tipo DB25 2 yardas de estaño TOTAL CANTIDAD 8 unidades 8 unidades 8 unidades 1 unidad 1 unidad 8 unidades 8 unidades 8 unidades 1 unidad 1 unidad 1 unidad 1 unidad PRECIO $2.80 $2.80 $9.67 $1.75 $4.00 $15.20 $6.40 $4.00 $0.30 $1.25 $0.34 $0.70 $49.21 84 DIAGRAMA CIRCUITAL 85 CONCLUSIÓN Desarrollar este proyecto tiene grandes beneficios, pues además de la utilidad y las múltiples aplicaciones prácticas que tiene este sistema para uso residencial, sirve como base o fundamento para la creación de nuevos proyectos similares, donde el único límite es la imaginación y creatividad, pues existen muchas secuencias de luces que se pueden generar, así como también se puede utilizar el puerto paralelo para hacer muchos otros circuitos similares o diferentes, utilizando como base el programa presentado, el cual puede ser modificado o personalizado de acuerdo a las preferencias o necesidades de cada persona. Antes de la llegada de las conexiones USB, las impresoras se conectaban a la computadora utilizando el puerto paralelo, conocido también como DB25. Sin embargo, como se ha demostrado, el puerto paralelo puede ser utilizado para mucho más que únicamente impresoras. Es innumerable la cantidad de circuitos y aplicaciones útiles que se pueden desarrollar a través de los pines del puerto paralelo. Este esfuerzo, aunque requiere mucho tiempo y dedicación, es de gran importancia de manera especial para los estudiantes de ingeniería, pues además de requerir poner en práctica habilidades de programación, requiere también aplicar conocimientos de electrónica, por lo que constituye un proyecto de gran valor para el aprendizaje, y de gran beneficio por las muchas aplicaciones que se le puede dar. Una de las aplicaciones más obvias sería en el área de instalaciones eléctricas residenciales, que cada foco se encuentren en un lugar diferente de una casa, y que a través de la computadora se puedan controlar todas las luces, encendiéndolas y apagándolas según las necesidades y de forma creativa, innovadora y completamente original. 86 BIBLIOGRAFÍA Digitalperuana: Los Especialistas en Luces y Efectos Especiales para Discotecas. Juego de Luces Controlado por una Computadora. Extraído en enero, 2008, de http://www.digitalperuana.com.pe/proyectos_luces_controlcompu.html The Code Project – Your Development Resource. Resources from Parallel Port using Inpout32.dll. Extraído en marzo, 2008, de http://www.codeproject.com/KB/vb/Inpout32_read.aspx Ero-Pic – Una Gran Colección de Tutoriales de Electrónica. Puerto Paralelo. Extraído el 10 de abril, 2008, de http://perso.wanadoo.es/luis_ju/puerto/port01.html ASÍ FUNCIONA. Tensiones o Voltajes y Frecuencias de Corriente Alterna Utilizadas por Diferentes Países. Extraído el 10 de abril, 2008, de http://www.asifunciona.com/tablas/voltaje_paises/voltaje_paises_2.htm 87 ANEXOS Para ver el video del sistema funcionando, ir a la parte final de cualquiera de estas páginas: http://www.jaimemontoya.com/juegodelucescontroladoxpc.php http://www.jaimemontoya.com/juegodelucescontroladoxpc1.php A continuación se muestran algunas fotos del Juego de Luces, tanto del ensamblaje y del circuito como también del sistema terminado y funcionando: 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 Jaime Montoya webmaster@jaimemontoya.com www.jaimemontoya.com Santa Ana, 24 de junio de 2008 El Salvador 121

Shared by: Jaime Montoya
About
I am a computer science student and I like to share my papers with people around the world.
Other docs by Jaime Montoya
Data warehouse
Views: 22  |  Downloads: 1
Internet Tigo
Views: 13  |  Downloads: 0
Internet Tigo
Views: 0  |  Downloads: 0
curriculumjaimemontoya
Views: 142  |  Downloads: 0
analyticsquarter
Views: 41  |  Downloads: 0
analyticstotal
Views: 18  |  Downloads: 0
analyticsquarter
Views: 18  |  Downloads: 0
Microsoft Dynamics CRM y Microsoft ISA Server
Views: 565  |  Downloads: 11
Solución paso a paso de un ejercicio de subneteo
Views: 1663  |  Downloads: 50
Estándar Internacional ISO/IEC 27002
Views: 257  |  Downloads: 14
Related docs
Juego de Luces Controlado por Computadora
Views: 427  |  Downloads: 21
LA COMPUTADORA DE LA SELECCION
Views: 13  |  Downloads: 0
TIPS DE JUEGO
Views: 25  |  Downloads: 0
JUEGO DE MEZCLA DE LETRAS
Views: 75  |  Downloads: 0
Sea Usted Una Computadora Humana
Views: 178  |  Downloads: 2
La Versión en formata PDF
Views: 9  |  Downloads: 0
Luces lyrics Zapisz jako PDF
Views: 0  |  Downloads: 0
EL JUEGO Y LA RONDA
Views: 25  |  Downloads: 0