Descripción del circuito de control

Anuncio
Instituto de Tecnologías Educativas
SIMÓN
• Introducción
• Consideraciones
previas
de programación y de
implementación
• ¿Cómo se ejecuta un
programa?
• Construcción
• Descripción del juego
INTRODUCCIÓN
En la presente documentación se van a desarrollar una serie de ejemplos para instruirse en el manejo de
la controladora CNICE utilizando el lenguaje de programación Logo y empleando el compilador MSWLogo
que distribuye el Instituto de Tecnologías Educativas a través de su Observatorio y el lenguaje C
utilizando el compilador DevC++. Con ellos se tratará de que el “alumno” vaya aprendiendo de forma
gradual a programar esta controladora con estos lenguajes, por ello, y como se podrá comprobar, hay
ejemplos que se desarrollan en varias fases. No obstante, hay que destacar que se presuponen unos
conocimientos previos en estos lenguajes de programación y en las primitivas que se emplean para la
controladora.
En primer lugar se definirán los conceptos básicos de programación más importantes que se han
empleado para implementar la mayor parte de los ejemplos para facilitar la comprensión del código
desarrollado.
Luego se explicará qué pasos se deben seguir para ejecutar en el compilador de MSWLogo cualquiera de
los ejemplos proporcionados para poder ver cómo funciona con la controladora CNICE.
Seguidamente se procederá a explicar en detalle cómo se ha construido el dispositivo que va a permitir
probar los programas desarrollados.
Se explicará también en detalle en qué consiste el juego.
Por último se pasará a explicar el funcionamiento de cada uno de los ejemplos y las conexiones que se
deben realizar en la controladora junto con el código correspondiente. Para obtener más información
acerca de cómo se ha realizado la programación se debe consultar los amplios comentarios que se han
introducido en el código de cada ejemplo.
Consideraciones previas de programación y de implementación
Como ya se ha mencionado anteriormente, se considera que el usuario debe tener conocimientos previos
en el lenguaje de programación Logo y en las primitivas que se utilizan para manipular la controladora
CNICE. No obstante se van a dar unas definiciones básicas para facilitar la comprensión del código
desarrollado para implementar los programas proporcionados.
Vectores.
Un vector o array es una colección no ordenada de elementos a los que se puede acceder a través de un
índice.
En Logo para definir un vector se emplea la función predefinida:
matriz tamaño [origen]
Proyectos Simón
1
Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo
donde tamaño indica el número de elementos de los que consta el vector y origen es un parámetro
opcional que indica el valor a partir del cual se comenzará a indexar en el vector.
Para introducir elementos en el vector se utiliza el procedimiento predefinido:
ponelemento indice nomb_vector valor
donde indice indica la posición en el vector en la que se va a introducir el elemento, nomb_vector es el
nombre del vector en el que se quiere poner el elemento y valor es el objeto que se pondrá en la posición
indicada del vector.
Por ejemplo, supongamos que queremos crear un vector de dos elementos al que queremos llamar
mivector cuyo índice empiece en 0. Una vez creado queremos introducir los valores 5 y 7 en las
posiciones 0 y 1 del vector. Por último queremos que se muestre por pantalla el resultado obtenido:
haz "mivector (matriz 2 0)
ponelemento 0 :mivector 5
ponelemento 1 :mivector 7
muestra :mivector
{5 7}
Capturar eventos de teclado.
En casi todos los programas se ha empleado la captura de eventos realizados por el usuario a través del
teclado, es decir, el usuario puede interactuar con los programas, recogiendo así las decisiones que quiere
tomar éste, en cada momento, cuando se está ejecutando un programa determinado. En la mayor parte
de los casos se ha empleado este tipo de captura de eventos para que se pueda terminar la ejecución del
programa cuando el usuario pulse la tecla S.
En la captura de eventos de teclado para saber la tecla que está siendo pulsada por el usuario se utiliza la
función predefinida LEERCAR en el procedimiento en el que se pretende tratar la tecla pulsada. En el
compilador, el foco debe de estar en la pantalla y no en la ventana de trabajo, para que se puedan
capturar los eventos de las teclas. Esto se puede forzar con el procedimiento predefinido PONFOCO
[pantalla de MSWLogo].
A modo de ejemplo, supongamos que queremos activar la captura de eventos de teclado para finalizar la
ejecución del programa y dejar de capturar eventos de teclado al pulsar la tecla S mayúscula. Para ello
deberemos incluir las siguientes líneas de código:
(PONTECLADO [HAZ "tecla_p LEERCAR] [SI (:tecla_p = 83) [QUITATECLADO ALTO]])
PONFOCO [pantalla de MSWLogo]
donde el número 83 corresponde al código ASCII de la letra S.
El programa estará ejecutándose normalmente hasta que el usuario pulse la tecla S, momento en el cual
el programa dejará su ejecución normal esté en el punto que esté y se procederá a ejecutar las
instrucciones asociadas a dicha tecla. En este caso se desactivaría la captura de eventos (QUITATECLADO)
y se detendría la ejecución (ALTO).
Contadores
Este es uno de los conceptos mas complejos que se han utilizado para implementar los programas.
Un contador en Logo es una secuencia de comandos que se ejecutarán cada n milisegundos de forma
continua hasta que se desactive el contador. Para activar un contador se usará el procedimiento:
PONCONTADOR id retardo llamada
donde id es un número del 1 al 31 que identificará al contador, retardo es el tiempo de espera en
milisegundos entre cada llamada a la secuencia de comandos para que se vuelva a ejecutar y llamada es
una función con la secuencia de comandos a ejecutarse.
El ordenador como elemento de control
2
Instituto de Tecnologías Educativas
La secuencia de comandos debe ejecutarse más rápido que el retardo del contador porque si no se
pueden ir anidando llamadas que no se pueden ejecutar pudiendo provocar un desbordamiento de la pila.
Para parar un contador se usará el comando:
CONTADORACERO id
donde id es el identificador del contador.
Veamos un ejemplo para tratar de aclarar las dudas que hayan podido quedar con la explicación anterior:
PARA Saludo
ESCRIBE [HOLA]
FIN
PONCONTADOR 1 2000 [Saludo]
HAZ "aux 0
REPITE 4 [HAZ "aux (:aux + 1)
ESPERA 120
ESCRIBE :aux]
CONTADORACERO 1
En este ejemplo se lanza un contador cuyo identificador es 1. Cada 2 segundos ejecutará el procedimiento
Saludo que simplemente escribe por pantalla la palabra HOLA. Pasados 8 segundos (se ejecuta un bucle
4 veces que espera cada vez 2 segundos) se detiene el contador. Se ha empleado una variable aux que
en cada vuelta del bucle se incrementa en una unidad y se escribe su valor por pantalla. Esto se ha hecho
para ver que se pueden seguir ejecutando instrucciones aunque se esté a la espera de la siguiente
llamada del contador.
Programación estructurada
Aunque los programas son muy sencillos se ha preferido dividir el código en distintos procedimientos para
que el lector se habitúe a esta forma de programar mas estructurada, en lugar de incluir todas las líneas
de código en un solo programa principal.
CONSTRUCCIÓN
Este dispositivo simula el funcionamiento del juego del Simón, el cual consiste en que nos muestra una
secuencia de colores para que posteriormente nosotros los repitamos la misma secuencia de colores, las
secuencia se muestran al principio lentamente, para ir aumentando progresivamente la velocidad con que
se muestran los colores.
Descripción de elementos:
Los elementos que se van a utilizar para la construcción del Simón se listan a continuación:
Proyectos Simón
3
Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo






Soporte (1): Está formado por varios bloques de fischer sobre los cuales se montan las
bombillas, los sensores de contacto, y las láminas de plástico transparentes.
4 Bombillas (2): Son las que van a iluminar las láminas de plástico transparentes.
4 Sensores de contacto (3): Se van a utilizar para saber cuándo se pulsa un color de los
cuatro que pueden lucir.
4 Láminas de plástico transparentes (4): Se puede utilizar cualquier material que permita el
paso de la luz de las bombillas.
16 Cables eléctricos (5): Se utilizarán 2 cables para cada bombilla y para cada sensor, uno de
los cables de las bombillas irá a una de las salidas digitales y el otro a masa, en los sensores
de contacto uno de los cables irá a uno de las entradas digitales y el otro a masa.
16 Enganches de cables eléctricos (6): Estos sirven para enganchar los cables eléctricos a los
bloques que forman el simón.
Montaje del simón:
El proceso de montaje del simón se desglosa en varios pasos, para que resulte más fácil su
entendimiento. Para el montaje se han utilizado piezas de fischer.
1.
Se monta el soporte (1), el cual se divide en 4 ventanas huecas sobre las que se van a poner
en cada hueco una bombilla (2) y un sensor de contacto (3). A la hora de colocar la bombilla y
el sensor en el soporte hay que tener cuidado de dejar libres los agujeros donde se conectan
los conectores eléctricos.
El ordenador como elemento de control
4
Instituto de Tecnologías Educativas
2.
Se electrifica las bombillas y los sensores de contacto a través de los cables eléctricos (5) que
se conectan a estos a través de los conectores eléctricos (6).
3.
Se preparan las láminas cuadradas transparentes (4), para lo cual la hemos obtenido del
recubrimiento que se pone en la parte superior de las terrinas de CD.
Proyectos Simón
5
Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo
4. Después de obtener 4 piezas, a cada una de las piezas las pintamos de distintos colores.
5.
Por último se pegan las piezas transparentes sobre la punta de los sensores de contacto
y parte de los bloques de fischer.
El ordenador como elemento de control
6
Instituto de Tecnologías Educativas
Esquema eléctrico:
Para poder alimentar las bombillas son necesarios 1 par de cables eléctricos para cada bombilla, un cable
se
conecta
a
la
salida
digital
y
el
otro
cable
se
conecta
a
masa.
Los sensores de contacto se conectarán un cable eléctrico a las entradas digitales y el otro cable eléctrico
a
masa.
En
total
se
utilizarán
8
cables,
2
por
cada
sensor
de
contacto.
La forma en la que se conectan las bombillas y los sensores a la controladora se muestra en el siguiente
esquema:
DESCRIPCIÓN DEL JUEGO
Los conceptos de programación principales que se van a manejar con estos ejemplos son creación y
utilización de vectores, manipulación de ficheros, el uso de bucles y emisión de sonidos en Logo. Con
respecto a la controladora se aprenderá a manipular sus entradas y salidas digitales.
Se trata del juego Simón de 4 colores. A grandes rasgos este juego consiste en ir presentando al usuario
una secuencia de colores y él debe ir repitiéndola. En cada iteración se presentará un color más en la
secuencia y se incrementará la velocidad. Las consideraciones a tener en cuenta son las siguientes:






Los colores deben ser rojo, verde, negro y azul.
Influye el tiempo de respuesta del usuario. Si ha transcurrido un determinado intervalo de tiempo
y el usuario no responde ◊ error --> fin de la partida.
Si el jugador falla en la secuencia de colores --> error --> fin de la partida.
Cada partida constará de 10 jugadas, es decir, la secuencia final de colores tendrá 10 elementos.
Si el jugador consigue llegar al final del juego --> fin de la partida.
Se debe presentar la opción de volver a jugar tanto si se ha terminado una partida como si ha
habido error.
Proyectos Simón
7
Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

El juego tendrá dos niveles de dificultad:
A.
B.
NIVEL PRINCIPIANTE: las secuencias de colores estarán prefijadas de antemano
(mismas secuencias de colores para todas las partidas).
NIVEL EXPERTO: las secuencias de colores se generarán de forma aleatoria para cada
partida.
¿Cómo se van a ir almacenando las secuencias de colores que se deben mostrar?. En ambos casos se ha
optado por utilizar para guardar la secuencia de colores un vector de 10 elementos en el que cada color
estará representado por un número:
o
o
o
o
ROJO --> 1
VERDE --> 2
NEGRO --> 3
AZUL --> 4
La diferencia entre las opciones A. (nivel principiante) y B. (nivel experto) es que en B. generamos la
secuencia de colores de forma aleatoria y en A. ya de partida se sabe la secuencia de colores total. A
partir de ese momento el funcionamiento es similar para ambos casos.
Cada secuencia de colores debe tener un color más que la anterior. Así, la 1ª secuencia de colores tendrá
1 color, la 2ª 2 colores, y así sucesivamente. Además se debe ir “repitiendo” la secuencia de colores (la
parte inicial debe ser común para todas las secuencias de colores), por ello se ha optado por tomar
vectores como solución a la implementación. A medida que se avanza en la partida se va pasando de una
secuencia a otra y al pasar de una secuencia a otra se va aumentando la velocidad (cada sonido para
cada color debe tener menor duración y el tiempo entre secuencias de colores también disminuye).
Veamos un ejemplo: {2 1 4 1 3 3 1 1 2 4}
o
o
o
o
o
o
o
La 1ª secuencia es VERDE.
La 2ª secuencia es VERDE, ROJO.
La 3º secuencia es VERDE, ROJO, AZUL
.
.
.
La 10ª secuencia es VERDE, ROJO, AZUL, ROJO, NEGRO, NEGRO, ROJO,
ROJO, VERDE, AZUL.
Para comprobar el funcionamiento en la controladora se deberán emplear cuatro salidas digitales una para
cada color (bombilla) que se irá mostrando al jugador y cuatro entradas digitales para cada interruptor
que debe pulsar el usuario para encender un color e intentar seguir la secuencia de colores que se le vaya
mostrando. En concreto las salidas digitales serán:
o
o
o
o
S0
S1
S2
S3
para
para
para
para
el
el
el
el
color
color
color
color
ROJO.
VERDE.
NEGRO.
AZUL.
Y las entradas digitales serán:
o
o
o
o
E0
E1
E2
E3
para
para
para
para
el
el
el
el
pulsador
pulsador
pulsador
pulsador
correspondiente
correspondiente
correspondiente
correspondiente
El ordenador como elemento de control
al
al
al
al
color
color
color
color
ROJO.
VERDE.
NEGRO.
AZUL.
8
Instituto de Tecnologías Educativas
PROGRAMACIÓN
Diagrama de flujo
Proyectos Simón
9
Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo
Programación en MSWLogo
La programación de este caso se estructura en los siguientes pasos:
1.
Se crea un procedimiento para crear la ventana gráfica principal del programa. Para ello se
utiliza la función creaventana. Dentro de la ventana se crean los botones con la función
creaboton. Dentro de cada botón se establecerán entre los corchetes las funciones que se han
de ejecutar una vez presionado el botón. Uno de los botones creados será el que se utiliza para
salir de la aplicación, para lo cual se utiliza la orden adiós.
creaventana " "Principal [SIMON] 100 42 190 100 []
creaboton "Principal "NivelPrinciante "Nivel_Principiante 20 20 70 20 [proc_principiante]
creaboton "Principal "NivelExperto "Nivel_Experto 100 20 70 20 [proc_experto]
creaboton "Principal "Salir "Salir 60 50 70 20 [proc_salir adios]
En este procedimiento se crea y se inicializa a 0 una variable que llamaremos bucle que nos servirá para
poder leer las entradas digitales de manera continuada.
2.
Se crea un procedimiento para crear la ventana grafica para cada uno de los tipos de
funcionamiento del simón, Nivel Principiante o Nivel Experto. Estas dos ventanas van a ser de
igual aspecto, la única diferencia que existe es secuencia de colores que ejecutará el simón. Se
crean los botones para iniciar el juego, detenerlo o volver a la ventana inicial.
creaventana " "NivelPrincipiante [SIMON-Nivel_Principiante] 100 42 150 100 []
creaboton "NivelPrincipiante "Iniciar "Iniciar 18 20 50 20 [proc_iniciarPrin]
creaboton "NivelPrincipiante "Parar "Parar 80 20 50 20 [proc_parar]
creaboton "NivelPrincipiante "Volver "Volver 50 50 50 20 [proc_salir graficos]
3.
Para el nivel principiante, se leen los valores desde un fichero y en todas las partidas se
genera la misma secuencia. Se establece como número de jugadas 10 por defecto y se ejecuta
la secuencia obtenida con Crear_vector_predefinido, mientras no sea el final de la partida y
no haya habido ningún error.
para proc_iniciarPrin
HAZ "num_jugadas 10
HAZ "iteracion 1
HAZ "tiemp_timbre 2000
HAZ "b_error "FALSO
HAZ "FIN_PARTIDA "FALSO
HAZ "vector_col Crear_vector_predefinido :num_jugadas
MIENTRAS [(Y (NO :b_error) (NO :FIN_PARTIDA) (O (:iteracion < :num_jugadas) (:iteracion =
:num_jugadas)))] [
HAZ "tiemp_timbre (Establecer_tiempo_timbre :iteracion)
Escribir_Salidas_Digitales :vector_col :iteracion :tiemp_timbre
HAZ "b_error (Comprobar_secuencia :vector_col :iteracion)
SISINO (:b_error) [HAZ "tipo "fallo
Mostrar_Mensaje :tipo ]
[HAZ "FIN_PARTIDA (:iteracion = :num_jugadas)
SISINO (:FIN_PARTIDA) [HAZLOCAL "tipo "exito
Mostrar_Mensaje :tipo]
[;Pasamos a la jugada siguiente
HAZ "iteracion (:iteracion + 1) ]
]
] ;END_MIENTRAS
fin
Función Crear_vector_Predefinido
El ordenador como elemento de control
10
Instituto de Tecnologías Educativas
PARA Crear_vector_Predefinido :num_jugadas
HAZLOCAL "vector_col (matriz :num_jugadas 1)
SI ficherop "COLORES.txt [abrelectura "COLORES.txt
ponlectura "COLORES.txt
HAZLOCAL "i 1
MIENTRAS [NO finlec?] [ponelemento :i :vector_col (PRIMERO leelista)
HAZLOCAL "i (:i + 1)]
ponlectura []
cierra "COLORES.txt
]
DEVUELVE :vector_col
FIN
En cada iteración se comprueba si se ha realizado de manera correcta la secuencia con la función
Comprobar_secuencia.
PARA Comprobar_secuencia :v_color :iter
HAZLOCAL "seguir "VERDADERO
HAZLOCAL "i 1
MIENTRAS [(Y (O (:i < :iter) (:i = :iter)) (:seguir))] [
HAZLOCAL "ent Leer_Entradas_Digitales
SISINO (:ent = -1) [HAZ "seguir "FALSO]
[HAZ "sec_color (elemento :i :v_color)
SISINO (:ent = :sec_color) [HAZ "i (:i + 1)]
[HAZ "seguir "FALSO]
]
]
DEVUELVE (NO :seguir)
FIN
4.
Para el nivel experto, se genera la secuencia de colores aleatoriamente llamando a la función
Generar_vector_aleatorio haciendo que en cada partida la secuencia de colores sea
diferente. Este procedimiento realiza las mismas comprobaciones que el nivel principiante, con
la diferencia de que en el nivel principiante se llama a la función Crear_vector_Predefinido y
en el nivel experto se llama a Generar_vector_aleatorio.
PARA Generar_vector_aleatorio :num_jugadas
HAZLOCAL "vector_col (matriz :num_jugadas 1)
DESDE [i 1 :num_jugadas 1] [ponelemento :i :vector_col ((azar 4)+1)]
DEVUELVE :vector_col
FIN
5.
Se llama al procedimiento que crea la ventana gráfica fuera de cualquier procedimiento para
que se cargue la aplicación gráfica nada más cargar el fichero de logo.
Descargar el archivo programado en MSWLogo, descomprímalo y guárdelo en un directorio aparte.
Contiene el fichero de código en MSWLogo (simon.lgo y las imágenes del simón).
Ejecute el compilador MSWLogo versión 6.5a en castellano.
Proyectos Simón
11
Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo
Vaya al menú del programa, Archivo/Abrir y seleccione el fichero simon.lgo que se descargó
previamente.
Se visualizará la siguiente pantalla:
Independientemente del nivel que se haya elegido, se mostrará la siguiente pantalla:
Programación en C
La programación de este caso se estructura en los siguientes pasos:
1.-
Se crea un nuevo proyecto
2.Se añaden al proyecto los archivos io.h, io.cpp, Primitivas_CNICE.CPP y Primiticas_CNICE.HPP y
SDL.h (librería que permite añadir imágenes a la aplicación programada con C).
3.-
Se crea el archivo main.c donde se incluirán las funciones necesarias para crear las ventanas
4.- Dentro del archivo main.c creado anteriormente, se añade la declaración a las funciones de la
biblioteca io.dll de la siguiente manera:
#include “io.h”
También se añade la declaración a las funciones de la biblioteca SDL.dll de la siguiente manera:
#include <SDL.h>
5.- En nuestro archivo main.c se define la siguiente función que permite activar o desactivar las entradas
digitales de la controladora.
El ordenador como elemento de control
12
Instituto de Tecnologías Educativas
void Escribir_Salidas_Digitales(int Dato)
{
LoadIODLL();
PortOut(0x37A,0x7);
PortOut(0x378,Dato);
}
6.- Definimos también la función leedigital() que se encargara de leer el valor de las entradas digitales de
la controladora. La función es la siguiente:
int leedigital()
{
int bajo=0;
int alto=0;
int d=0;
LoadIODLL();
PortOut(0x37A, 0x3);
bajo = PortIn(0x379);
bajo = (bajo & 0x78) / 8;
bajo = ~bajo;
bajo = bajo & 15;
PortOut(0x37A, 0x1);
alto = PortIn(0x379);
alto = (alto & 0x78) / 8;
alto = ~alto;
alto = alto & 15;
d = (alto * 16) | bajo;
return d;
}
7.- Se crearán dos botones en nuestra ventana, uno para manejar el Simon en un nivel Principiante y
otro para manejarlo con un Nivel Experto. La diferencia entre estos dos niveles está en la secuencia de
colores. Si es el nivel principiante, la secuencia esta ya prefijada y no cambia, pero si es el nivel experto,
la secuencia es aleatoria y no se repite.
8.- En cada una de las dos opciones, se crea una ventana para manejar el Simon. Se crean 3 botones:
Iniciar, Parar y Volver.
9.Para el Nivel Principiante se define una matriz donde se almacenan una serie de valores
correspondientes a las salidas de la controladora. Una secuencia puede ser la siguiente:
matriz[0]=1;
matriz[1]=4;
matriz[2]=2;
matriz[3]=4;
matriz[4]=4;
matriz[5]=8;
matriz[6]=2;
matriz[7]=1;
matriz[8]=8;
matriz[9]=8;
10.- Para el Nivel Experto se rellena la matriz con valores aleatorios. Esto se consigue usando la función
rand(). La manera de hacerlo es la siguiente:
for(i=0;i<10;i++){
numero= rand()%(4-1+1)+1;
if(numero==1) matriz[i]=1;
else if(numero==2) matriz[i]=2;
else if(numero==3) matriz[i]=4;
else if(numero==4) matriz[i]=8;
}
Proyectos Simón
13
Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo
11.- Para comprobar que el jugador pulsa correctamente la secuencia de colores que se pide, se crea un
hilo que realiza esa comprobación. La función que ejecuta ese hilo es la siguiente:
DWORD WINAPI Comprobar_Sensor(LPVOID parametro)
{
int E, i=0, num2;
SDL_Surface *color;
SDL_Surface *screen;
SDL_Rect rect;
for(;;){
for(i=0;i<num;i++){
Sleep(1000);
if(matriz[i]==1)
color = SDL_LoadBMP("simonrojo.bmp");
else if(matriz[i]==2)
color = SDL_LoadBMP("simonverde.bmp");
else if(matriz[i]==4)
color = SDL_LoadBMP("simonazul.bmp");
else if(matriz[i]==8)
color = SDL_LoadBMP("simonnegro.bmp");
screen = SDL_SetVideoMode( 300, 300, 0, SDL_NOFRAME );
if( screen == NULL ) {
printf( "Error al entrar a modo grafico: %s\n", SDL_GetError() );
SDL_Quit();
}
rect = (SDL_Rect) {0, 0, 200, 200};
SDL_BlitSurface(color, NULL,screen,&rect);
SDL_Flip(screen);
encender(matriz[i]);
Sleep(1000);
encender(0);
}
num2=num;
i=0;
do{
do{
E=leedigital();
fflush(stdout);
if(E!=0){
if(E==matriz[i]){
i++;
Sleep(500);
} else if(E!=matriz[i]){
MessageBox(0,"Has fallado","FALLO",0);
return 0;
}
}
}while(E==0);
E=0;
}while(i<num2);
num++;
if(num==11){
MessageBox(0,"¡Enhorabuena! Has acertado toda la secuencia", "",0);
return 0;
}
}}
Explicación de las funciones de la librería SDL.
Cada vez que se quiera mostrar una imagen se indicara en nuestro proyecto lo siguiente:
foto = SDL_LoadBMP("imagen.bmp");
screen = SDL_SetVideoMode(200, 308, 0, SDL_NOFRAME );
if( screen == NULL ) {
printf( "Error al entrar a modo grafico: %s\n", SDL_GetError() );
SDL_Quit();
return -1;
}
rect.x=0;
rect.y=0;
El ordenador como elemento de control
14
Instituto de Tecnologías Educativas
rect.w=primera1->w;
rect.h=primera1->h;
destino.x=0;
destino.y=0;
SDL_BlitSurface(primera1, &rect, screen, &destino);
SDL_Flip(screen);
donde foto y screen son del tipo SDL_Surface y rect y destino es del tipo SDL_Rect.
-
SDL_LoadBMP: carga la imagen .bmp que queramos
SDL_SetVideoMode (int width, int height, int bpp, Uint32 flags): configure un modo de video con
una anchura (width), una altura (height) y unos bits-por-pixeles. El parámetro flags indica el tipo
de ventana que se quiere. En nuestro caso una ventana sin título no borde.
SDL_BlitSurface(imagen, &rect, screen, &destino): pega desde la imagen, la porción seleccionada
por rect sobre la superficie screen en el destino indicado por destino.
SDL_Flip(screen): muestra la imagen que se ha seleccionado.
12.- Una vez creados los botones con la función que les corresponden, se compila comprobando que no
hay ningún error.
13.- Una vez que se ha comprobado que no hay ningún error en nuestro código, se ejecuta y se
comprueba el funcionamiento del Simon. Al ejecutar el proyecto se creará el fichero Simon.exe
Descargue los diferentes archivos que forman todo el proyecto programado en C, descomprímalos y
guárdelos en un directorio aparte. Ejecute el fichero Simon.exe. Se visualizará la siguiente pantalla:
Pulsando los botones que se le presentan podrá elegir entre un funcionamiento a Nivel Principiante, a
Nivel Experto o salir de la aplicación. Pulsando cualquiera de las dos opciones aparece la siguiente
pantalla:
Proyectos Simón
15
Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo
Imagen que indica que la luz roja está encendida
Imagen que indica que la luz verde está encendida
Imagen que indica que la luz azul está encendida
Imagen que indica que la luz negra está encendida
Nota:
En la aplicación programada con C, la imagen puede no aparecer al lado de la ventana. En este caso basta
con mover nuestra ventana y se verá correctamente la imagen.
El ordenador como elemento de control
16
Descargar