viernes, 11 de noviembre de 2011

Cómo programar un semáforo con Gambas 2.22 en Ubuntu

Hoy enseñaré a programar un semáforo con Gambas 2.22 de una manera fácil y relativamente rápida.

Lo primero y primordial es tener instalado el Gambas (pequeño detalle, jeje).

Luego podremos empezar:

1) Ante todo, abrimos Gambas y hacemos clic en Nuevo proyecto.

2) En la siguiente página le damos clic en Siguiente sin modificar nada, y seleccionamos una carpeta en donde querramos guardar todos los datos del proyecto. Yo recomiendo hacer una ruta más o menos así: /home/USUARIO/Proyectos/Gambas2/Semaforo para facilitar el acceso y la comprensión en las carpetas.

3) Colocamos el nombre del proyecto y el título que deseemos. Por ejemplo:
Nombre: SemaforoDePedrito (no se pueden poner acentos ni espacios acá)
Título: Semáforo

4) Una vez en el proyecto, hacemos doble clic en FMain y vamos a la pestaña Ver y activamos la Caja de herramientas.

5) Al activar las herramientas, veremos que se despliega una ventana con distintas pestañas (Form, Dialog, Container, Special). Nos vamos a la pestaña Container y usamos la herramienta DrawingArea para armar tres cuadrados, que son los que vamos a usar como luces del semáforo. Desde Propiedades podemos editar los valores Height y Width para ajustar a nuestro gusto el tamaño de los cuadrados, y el valor Background para ajustar los colores de los cuadrados.

6) Ordenamos los tres cuadrados de tal forma de que nos quede arriba la primera figura que hicimos, en el medio la segunda y abajo la tercera:


7) Opcionalmente podemos usar la herramienta Label de la pestaña Form para hacer que el semáforo se parezca más a un semáforo (jeje), y colocarla debajo de los cuadrados a través de la pestaña Jerarquía. Una vez más podemos usar Background para definir un color:


8) En la caja de herramientas, hacemos clic en la pestaña Special y colocamos un Timer en cualquier parte del área de trabajo. El Timer nos permitirá configurar los tiempos de cada una de las luces del semáforo. Una vez colocado el Timer, hacemos clic una sola vez sobre él y desde Propiedades ajustamos el Delay a 500 (1000 equivale a un segundo, pero en este caso no nos sirve el segundo entero ya que las luces tardarían demasiado en cambiar), y lo ponemos como Enabled.

9) Desde la pestaña Form colocamos un TextBox en una zona que no hayamos usado del área de trabajo, y cambiamos la propiedad Text a 0 (cero) y la propiedad Visible a False. Éste elemento actuará como motor del semáforo al permitirnos especificar cuándo va a pasar lo que querramos que pase.

10) Para programar el Timer hacemos doble clic sobre él. A continuación colocaré el código que utilicé personalmente para hacer el semáforo:

PUBLIC SUB Timer1_Timer()
C.TEXT = C.TEXT + 1
IF C.TEXT = 1 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 20 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 21 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 22 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 23 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 24 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 25 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 26 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 27 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 28 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 29 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 50 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 51 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 52 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 53 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 54 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 55 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 56 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 57 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 58 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 59 THEN
C.TEXT = 0
ENDIF
END

ACLARACIONES:
  • C.TEXT es el nombre de mi TextBox, y lo que hice al colocar C.TEXT=C.TEXT+1 fue indicarle al Timer que vaya sumando de a 1 en el TextBox. Recordemos que al Timer le colocamos un Delay de 500, es decir, que sumará de a 1 dos veces por segundo. EJEMPLO: En dos segundos, el TextBox habrá sumado 1+1+1+1=4.
  • En el caso de IF C.TEXT = 1 THEN, lo que especificamos es que cuando en el TextBox diga 1, va a suceder lo que detallemos en las próximas líneas de código. EJEMPLO: En el caso de DrawingArea1.Visible = FALSE, decimos que cuando pase medio segundo (cuando diga 1 en el TextBox), el cuadrado nro. 1 -la luz roja- NO va a ser visible.

A partir de esto espero que puedan reflexionar por sí mismos sobre la función de cada una de las líneas de código (muy importante en todos los lenguajes de programación). Pero si hay algo que no se entiende, no duden en preguntar.

1 comentario:

  1. Excelente ejemplo Alexis. Al toparme con tu post me volvieron las ganas de programar en Basic. Programé en Visual Basic 5 y 6 y traté de actualizarme a Visual Basic.net pero en su momento me dio tedio y no lo pude hacer. Ahora, gracias a tu sencilla explicación, vi que entendía perfectamente el lenguaje Basic de Gambas, y era justo lo que necesitaba para programar bajo Linux. Mi distribución es OpenSuSE 11.4 al momento, y necesitaba volver a programar sin violar derechos de autor. Gambas es la solución. Abrazo grande!

    P.D.: por cierto tu programa funciona perfectamente en Gambas 3 en mi OpenSuSE :)

    ResponderEliminar