Entrada Digital – Botón Push · Página 61
Capítulo 3: Entrada Digital – Botones Push LOS ENCUENTRAS EN CALCULADORAS, JUEGOS DE MANO Y APARATOS ¿En un día cuántos aparatos con Botones Push utilizas? Estos son algunos ejemplos que pueden estar en tu lista: computadoras, ratones, calculadoras, hornos de microondas, controles remotos, juegos de mano, y teléfonos celulares. En cada aparato hay un microcontrolador que escanea los botones push y esperando que el circuito haga cambios. Cuando cambia el circuito el microcontrolador detecta el cambio y toma alguna acción. Al finalizar este capítulo, tendrás la experiencia para diseñar circuitos con botones push y programarás el BASIC Stamp para monitorear y tomar acciones cuando ocurran los cambios.
RECIBIENDO VERSUS MANDANDO SEÑALES HIGH Y LOW En el capítulo #2, tú programaste el BASIC Stamp para mandar señales high y low y utilizaste los circuitos LED para mostrar estas señales. Mandar señales high y low significa que utilizaste un pin de BASIC Stamp como “salida”. En este capítulo usaras un pin de BASIC Stamp como “entrada”. Cuando un pin está como entrada, éste “escucha” señales high/low en lugar de mandarlas. Tú meterás estas señales al BASIC Stamp usando un circuito botón push y pogramarás el BASIC Stamp para reconocer si el botón push está presionado o libre. Otras palabras que significan mandar, high/low y recibir: Mandar señales high/low son descritas de diferentes formas. Tú puedes mandar señales cuando estás Transmitiendo, Controlando o Conmutando. En lugar de high/low decimos binario, o niveles de lógica TTL, o niveles de lógica CMOS o señales Booleanas. Otra palabra para “recibir” es “sensar.”
ACTIVIDAD #1: VERIFICANDO UN BOTÓN PUSH CON UN CIRCUITO LED ¿Puedo usar un botón push para manda un señal high o low al BASIC Stamp y controlar un LED con el botón push? La respuesta es sí, en esta actividad lo usará para verificar un botón push. Conociendo el botón push
La figura 3-1 muestra el símbolo y el dibujo de un botón push normalmente abierto. Dos de las terminales del botón push se conectan en cada terminal. Esto significa que al conectar un alambre al pin 1 del botón push también queda conectado al pin 4.
Página 62 · ¿Qué es un Microcontrolador?
La misma regla se aplica para las terminales 2 y 3. La razón por la cual el botón push no tiene solamente dos terminales es poque necesita estabilidad. Si el botón push sólo tuviera dos terminales es porque éstas podrian eventualmente doblarse y romperse por la presión que recibe cuando los usuarios lo presionan.
1, 4 2, 3
1
4
2
3
Figura 3-1 Botón Push Normalmente Abierto En la izquierda está el símbolo y a la derecha un dibujo.
El lado izquierdo de la figura 3-2 muestra como se ve un botón push normalmente abierto cuando no está presionado. Cuando el botón no se presiona hay un espacio entre las terminales 1,4 y 2,3. Este espacio hace que la terminal 1,4 no conduzca corriente a las terminales 2,3. A esto se le llama Circuito Abierto. El nombre “normalmente abierto” significa que el estado normal (sin presionar) forma un circuito abierto. Cuando se presiona el botón, el espacio entre las terminales 1,4 y 2,3 se cierra con un metal conductor. A esto se le llama Circuito Cerrado y la corriente fluye a través del botón push.
1, 4
1, 4
2, 3
2, 3
Figura 3-2 Botón Push Normalmente Abierto A la izquierda está sin presionar, a la derecha está presionado.
Parte de Prueba para el Botón Push.
Un Led – escoga un color. Un Resistor de 470 Ω (amarillo-violeta-café). Un alambre. Construcción del Circuito de Prueba del Botón push
La figura 3-3 muestra el circuito a construir para verificar manualmente el botón push.
Entrada Digital – Botón Push · Página 63
Siempre desconecte la alimentación de su Tablilla de Experimentos antes de hacer cambios en su circuito de prueba. De aquí en adelante las instrucciones ya no le dirán: Desconecte la Alimentación...entre cada modificación de circuito. A usted le corresponde recordar esta instrucción. Siempre conecte la alimentación en su Tablilla de Experimentos antes de descargar un programa a la BASIC Stamp.
9 Construya el circuito que muestra la Figura 3-3 Vdd Vdd
Vin
Vss
+
X3
1, 4 2, 3
470 Ω
LED
Vss
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figura 3-3 Circuito de prueba del botón push.
Verificando el botón push
Cuando no está presionado el botón push no se iluminará el LED. Si está bien construído, cuando el botón push esté presionado el LED se iluminará. Señales de Alarma. Si el LED de “Pwr” de su Tablilla de Experimentos parpadea, brilla poco o no brilla cuando reconecta la alimentación, esto significa que hay un corto circuito de Vdd a Vss o de Vin a Vss. Si esto sucede, desconecte inmediatamente la alimentación y encuentre y corriga el error de su circuito. El LED construido en la Tablilla de Experimentos es diferente. Si el LED solo brilla cuando está ejecutandose un programa esto puede estar asociado con la Fuente o con la Ejecución. Cuando termina un programa porque ejecuta una instrucción END o porque se ejecuta fuera de las instruciones el LED se apagará.
9 Verifique que está apagado el LED de su circuuito de prueba. 9 Mantenga presionado el Botón Push y verifique que se ilumina el LED mientras mantiene presionado el botón push.
Página 64 · ¿Qué es un Microcontrolador?
Funcionamiento del Circuito Botón Push
El lado izquierdo de la Figura 3-4 muestra que sucede cuando el botón push no está presionado. El circuito LED no está conectado a Vdd. Es un circuito abierto que no puede conducir corriente. Al presionar el botón push, como lo muestra el lado derecho de la figura, usted cierra la conexión entre la terminales con un metal conductor. Esto forma una trayectoria para que los electrones fluyan a través del circuito y como consecuencia el LED se ilumina. Vdd
Vdd
1, 4
1, 4
2, 3
2, 3
No Current
470 Ω
470 Ω
Current
LED
Vss
Figura 3-4 El botón push está No presionado y presionado.
LED
En la izquierda el botón push sin presionar es un circuito abierto y no hay luz. En la derecha el botón esta presionado y es un circuito cerrado y emite luz.
Vss
Su turno - Apague el LED con un botón push
La figura 3-5 muestra un circuito que hace que el LED se comporte diferente. Cuando el botón no está presionado, se ilumina el LED, cuando se presiona el botón el LED se apaga. Como este botón push conecta un conductor entre las terminales 1,,4 y 2,3 cuando se presiona, esto significa que la electricidad puede tomar la trayectoria de menor resistencia a través del botón push en lugar de a través del Led. A diferencia de los corto circuitos estudiados en el Recuadro de Señales de Alarma, el corto circuito del botón presionado y se refleja en las terminales del LED no dañan el circuito y realizan un propósito útil. 9 Construya el circuito que muestra la Figura 3-5. 9 Repita las pruebas que realizó en el primer circuito de botón push ahora en este nuevo circuito.
Entrada Digital – Botón Push · Página 65
Vdd
Vdd 1, 4 LED 2, 3 470 Ω
Vss
Vin
Vss
X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
+
Figura 3-5 El LED refleja el corto circuito del botón push.
¿Se puede conectar de esta forma el LED? Hasta ahora, el cátodo del LED se ha conectado siempre a Vss. Ahora el LED está en un lugar diferente en el circuito, y su ánodo conectado a Vdd. Las personas preguntas si esta conexión no rompe las leyes del circuito y la respuesta es no. La presión eléctrica que proporciona Vdd y Vss es 5 volts. El LED rojo solo necesita 1.7 volts y el resistor usará los 3.3 volts restantes sin importar el orden en que estén conectados.
ACTIVIDAD #2: LEYENDO UN BOTÓN PUSH CON EL BASIC STAMP En esta actividad usted conectará un circuito botón push a el BASIC Stamp y mostrará si el botón está o no está presionado. Usted hará esto escribiendo un programa PBSIC que verifique el estado del botón y lo muestre en la Terminal Debug. Partes del Circuito Botón Push
Un botón push – normalmente abierto. Un resistor de 220 Ω (rojo-rojo-café). Un resistor de 10 KΩ (café-negro-naranja). Dos alambres. Construyendo el Circuito Botón Push para el BASIC Stamp
La figura 3-6 muestra el circuito botón push que se conecta al pin P3, E/S, del BASIC Stamp. 9 Construya el circuito que muestra la Figura 3-6.
Página 66 · ¿Qué es un Microcontrolador?
Vdd X3
Vdd
P3 220 Ω
10 kΩ
Vss
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vin
Vss
Figura 3-6 Circuito Botón Push conectado al pin P3. En el diagrama de alambrado el resistor de 220 Ω del lado izquierdo conecta el botón push a P3 mientras que el resistor de 10 KΩ de la derecha conecta al botón push a Vss.
La figura 3-7 muestra como el BASIC Stamp ve cuando el botón push está presionado y cuando no está presionado. Cuando el botón push está presiondado, el BASIC Stamp sensa que Vdd se conecta a P3. Internamente el BASIC Stamp coloca un “1” lógico en un parte de su memoria que almacena la información de los pines de Entrada/Salida. Cuando el botón push no está presionado, no sensa Vdd, senda Vss a través del los resistores de 10 Ω y 220 Ω. Y ahora se almacena un “0” lógico en la misma localidad de memoria que almacenó el “1” cuando el botón push estaba presionado.
Entrada Digital – Botón Push · Página 67
Vdd
220 Ω
10 kΩ
SOUT
1
SIN
2
24
VIN
23
ATN
3
VSS
4
VSS
22
RES
21
P0
VDD (+5V)
5
20
P15
P1
6
19
P14
P2
7
18
P13
P3
8
17
P12
P4
9
16
P11
P5
10
15
P10
P6
11
14
P9
P7
12
13
P8
BS2
1 0
BS2-IC
Vss Vdd
220 Ω
10 kΩ
SOUT
1
SIN
2
BS2
24
VIN
23
VSS
22
RES
ATN
3
VSS
4
21
VDD (+5V)
P0
5
20
P15
P1
6
19
P14
P2
7
P3
8
P4
9
P5
1
18
P13
17
P12
16
P11
10
15
P10
P6
11
14
P9
P7
12
13
P8
0
Figura 3-7 BASIC Stamp leyendo un botón push. Arriba, cuando está presionado el botón el BASIC Stamp lee un “1” Abajo, cuando no está presionado el botón el BASIC Stamp lee un “0”
BS2-IC
Vss
Binario y Circuitos. Para formar números el sistema de base-2 números usa solamente dos digitos 1 y 0 y estos valores binarios pueden transmitirse de un dispositivo a otro. El BASIC Stamp interpreta Vdd como un 1 binario y el Vss como un 0 binario. En forma semejante, cuando el BASIC Stamp fija un pin de entrada/salida a Vdd usuando un HIGH manda un “1”. Cuando fija un pin de entrada/salida a Vss usando un LOW manda un “0”. Esta es un forma muy común de comunicación de números binarios usada por muchos chips de computadoras y otros dispositivos.
Programando el BASIC Stamp para Monitorear el Botón Push.
El BASIC Stamp almacena un 1 o un 0 sensando el pin P3 en una localidad de memoria llamada IN3. Este es un Programa Ejemplo que muestra como se realiza este trabajo: Programa Ejemplo: ReadPushbuttonState.bs2
El siguiente programa hace que el BASIC Stamp verifique al botón push cada ¼ de segundo y mande el valor de IN3 a la Terminal Debug.
Página 68 · ¿Qué es un Microcontrolador?
La Figura 3-8 muestra la Terminal Debug mientras se ejecuta el programa. Cuando se presiona el botón push, la Terminal Debug muestra el número 1, y cuando el botón push no se presiona, la Terminal Debug muestra el número 0.
Figura 3-8 La Terminal Debug muestra los Estados del botón push. La Terminal Debug muestra un 1 cuando el botón push está presionado y un 0 cuando con está presionado.
9 Meta el programa ReadPushbuttonState.bs2 en el Editor de BASIC Stamp. 9 Ejecute el programa. 9 Verifique que la Terminal Debug muestre el valor 0 cuando el botón push no está presionado. 9 Verifique que la Terminal Debug muestre el valor 1 cuando el botón push se mantiene presionado. '¿Qué es un Microcontrolador? - ReadPushbuttonState.bs2 ' Verifica y manda el estado de botón push a Terminal Debug cada 1/4 segundo. ' {$STAMP BS2} ' {$PBASIC 2.5} DO DEBUG ? IN3 PAUSE 250 LOOP
Funcionamiento de ReadPushbuttonState.bs2
El bucle DO...LOOP en el programa se repite cada ¼ de segundo por la instrucción PAUSE 250. Cada vez que se ejecuta DO...LOOP, la instrucción DEBUG ? IN3 manda el valor que hay en IN3 a la Terminal Debug. El valor de IN3 es el Estado que el pin P3 sensa en el instante que se ejecuta la instrucción DEBUG.
Entrada Digital – Botón Push · Página 69
Su turno – Un Botón Push con un Resistor en Pull-up
El circuito que acaba de trabajar tiene un resistor conectado a Vss. Este resistor se llama resistor de pull-down porque “jala” el voltaje de P3 hacia abajo: Vss (0 volts) cuando el botón no está presionado. La Figura 3-9 muestra un circuito botón push que usa un resistor pull-up. Este resistor “jala” el voltaja hacia arriba: Vdd (5 volts) cuando el botón no está presionado. Ahora se han invertido las reglas. Cuando el botón no esta presionado, IN3 almacena un 1, y cuando el botón esta presionado, IN3 almacena un 0. El resistor de 220Ω se usa en este ejemplo para proteger el pin E/S del BASIC Stamp. Esta es una buena técnica que se usa en los prototipos, en los productos este resistor se reemplaza con un alambre (ya que un alambre cuesta menos que un resistor)
9 Modifique su circuito como se muestra en la Figura 2-9. 9 Vuelva a ejecutar el programa: ReadPushbuttonState.bs2 9 Usando la Terminal Debug, verifique que IN3 está en 2 cuando no se presiona el botón y un 0 cuando el botón está presionado. Vdd
Vdd 10 kΩ P3 220 Ω
Vss
Vin
Vss
X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figura 3-9 Circuito Botón push modificado.
Low Activo vs High Activo. El circuito botón push de la Figura 3-9 se llama Low activo poque manda a el BASIC Stamp una señal baja (Vss) cuando el botón está presionado. El circuito botón push de la Figura 3-6 se llama High activo poque manda una señal alta (Vdd) cuando el botón está presionado.
Página 70 · ¿Qué es un Microcontrolador?
ACTIVIDAD #3: CONTROL CON BOTÓN PUSH DE UN CIRCUITO LED La figura 3-10 muestra una vista amplificada de un botón push y un LED que se usan para ajustar los parámetros de un monitor de computadora. Este es uno de muchos aparatos que tienen un botón push que usted puede presionar para ajustar el aparato y un LED que le muestra cual es el estado del aparato.
Figura 3-10 Botón y LED de un Monitor de Computadora
El BASIC Stamp se puede programar para que tome decisiones basadas en lo que sensa. Por ejemplo, se puede programar para que parpadee el LED 10 veces por segundo cuando se presiona el botón. Botón y partes del Circuito LED
Un botón push normalmente abierto. Un resistor de 20 KΩ (café-negro-naranja). Un LED de cualquier color. Un resistor de 220 Ω (rojo-rojo-café). Un resistor de 470 Ω (amarillo-violeta-café). Varios alambres. Construyendo los circuito del Botón Push y el LED
La Figura 3-11 muestra el circuito del botón push usado en la actividad que acaba de terminar junto con el circuito LED del Capítulo 2, Actividad #2. 9 Construya el circuito que muestra la Figura 3-11.
Entrada Digital – Botón Push · Página 71
P14 470 Ω LED
Vdd
Vin
X3
Vss Vdd
P3 220 Ω
10 kΩ
Vss
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vss
+
Figura 3-11 Botón push y circuito LED.
Programando el control del botón push
El BASIC Stamp se puede programar para que tome decisiones usando las instrucciones IF..THEN...ELSE. El Programa Ejemplo que usted ejecutará hará parpadear el LED cuando se presione el botón push. Cada vez que se ejecuta el bucle DO...LOOP, la instrucción IF...THE...ELSE verifica el estado del botón push y decide si parpadea o no parpadea el LED. Programa Ejemplo: PushbuttonControlledLed.bs2
9 Meta el programa PushbuttonControlledLed.bs2 en el Editor del BASIC Stamp y ejecútelo. 9 Verifique que el LED parpadea mientras mantiene presionado el botón push. 9 Verifique que el LED no parpadea cuando no presiona el botón push.
Página 72 · ¿Qué es un Microcontrolador?
' ¿Qué es un Microcontrolador - PushbuttonControlledLed.bs2 ' Verifique el estado del botón 10 veces por segundo y cuando se presiona parpadea el LED. ' {$STAMP BS2} ' {$PBASIC 2.5} DO DEBUG ? IN3 IF (IN3 = 1) THEN HIGH 14 PAUSE 50 LOW 14 PAUSE 50 ELSE PAUSE 100 ENDIF LOOP
Funcionamiento del programa: PushbuttonControlledLed.bs2
Este programa es una versión modificada de ReadPushbuttonState.bs2 estudiado en la actividad anterior. Las instrucciones DO...LOOP y DEBUG ? IN3 son las mismas. La instrucción PAUSE 250 se reemplazó con las instrucciones IF...THEN...ELSE. Cuando es verdadera la condición después de IF (IN3=1) se ejecutarán las istrucciónes que están después de THEN. Ellas se ejecutarán hasta llegar a ELSE, en este punto el programa brinca hasta ENDIF y avanza. Cuando la condición posterior de IF no es verdadera (IN3=1), las instrucciones después de la instrucción ELSE se ejecutarán hasta llegar a ENDIF. Ustede puede hacer una lista detallada de lo que debe hacer, para que le ayude a planear el programa o para describir lo que hace . Esta clase de lista se llama Pseudo Código [XE”Pseudo Código”} y el ejemplo de abajo utiliza el pseudo código para describir el funcionamiento de PushbuttonControlledLed.bs2. •
Haga varias veces las instrucciones que están entre Aquí y la instrucción Loop. o Muestre el valor de IN3 en la Terminal Debug o Si el valor de IN3 es 1, Entonces El LED se ilumina Espere un 1/20 de segundo El LED se apaga
Entrada Digital – Botón Push · Página 73
o •
Espere un 1/20 de segundo Else (si el valor de IN2 es 0) no haga nada solo espere la misma cantidad de tiempo que hubiera tomado el parpadeo del LED (1/10 de segundo
Loop
Su turno – Más rápido/Más lento
9 Guarde el programa ejemplo con un nombre diferente. 9 Modifique el programa de tal forma que el LED parpadee dos veces más rápido cuando mantiene usted presionado el botón push. 9 Modifique el prograga de tal forma que el LED parpadee la mitad de rápido cuando mantiene presionado el botón push.
ACTIVIDAD #4: DOS BOTONES PUSH CONTROLANDO DOS CIRCUITOS LEDS Vamos agregar al proyecto un segundo botón push y analizar como funciona. Para hacer esta actividad más interesante, agregaremos un segundo circuito LED para usar el segundo botón push para que lo controle. Partes del botón push y el circuito LED
Dos botones push – normalmente abiertos. Dos resistores de 10 KΩ (café-negro-naranja). Dos resistores de 470 Ω (amarillo-violeta-café). Dos resistores de 220 Ω (rojo-rojo-café). Dos Led de cualquier color. Alambres para puentes. Agregando un botón push y un circuito Led.
La Figura 3-12 muestra un segundo circuit LED y botón push que se agrega al circuito que usted verificó en la actividad anterior. 9 Construya el circuito que muestra la Figura 3-12. Si necesita ayuda para el circuito mostrado en el diagrama, use como guía el diagrama de alambrado que muestra la Figura 3-13. 9 Modifique el programa ReadPushbuttonState.bs2 para que ahora lea IN4 en lugar de IN3, y úselo para verificar su segundo circuito botón push.
Página 74 · ¿Qué es un Microcontrolador?
P15 470 Ω P14 470 Ω LED Vss
LED Vss Vdd
Vdd
Figura 3-12 Diagrama Esquemático de los Botones push y LEDs.
P4 220 Ω P3 220 Ω 10 kΩ
Vss
10 kΩ
Vss
Los Puntos indican conexiones. Hay 3 lugares donde se intersectan las líneas en la Figura 3-12, pero solamente dos de estas intersecciones tienen puntos. Cuando dos líneas se insersectan con un punto, esto significa que están conectadas electricamente. Por ejemplo, el resistor de 10 KΩ en la parte inferior derecha de la Figura 3-12 tiene una de sus terminales P3 conectadas al botón push y la otra a la terminal del resistorde 220Ω. Cuando dos lines se intersectan pero no hay punto, esto significa que estos dos alambres NO ESTÁN conectadas eléctricamente. Por ejemplo, la línea que conecta a P4 deñ botón push y el resistor de 10 KΩ no está conectado con P3 del botón push porque no hay punto en esa intersección.
Entrada Digital – Botón Push · Página 75
Vdd X3
Vin
Vss
++
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figura 3-13 Diagrama de alambrado de dos Botones push y dos LEDs.
Programación de Control del Botón push
En la actividad anterior usted experimentó tomar decisiones usando la intrucción: IF...THEN...ELSE. Existe la instrucción IF...ELSEIF...ELSE. Esto es grandioso para decidir cual LED va a parpadear. El siguiente Programa Ejemplo mostra como funciona. Programa Ejemplo: PushbuttonControlOfTwoLeds.bs2
9 Meta y ejecute PushbuttonControlOfTwoLeds.bs2 en el Editor BASIC Stamp. 9 Verifique que parpadea el LED conectado en P14 mientras mantiene presionado el botón push conecta en P3. 9 También verifique que parpadea el LED conectado en P15mientras mantiene presionado el botón push conecta en P4. ' ¿Qué es un Microcontrolador - PushbuttonControlOfTwoLeds.bs2 ' Si P3 está presionado parpadea el LED de P14, si P4 está presionado parpadea el LED de P15. ' P4 está presionado. ' {$STAMP BS2} ' {$PBASIC 2.5} PAUSE 1000 DO
Página 76 · ¿Qué es un Microcontrolador?
DEBUG HOME DEBUG ? IN4 DEBUG ? IN3 IF (IN3 = 1) THEN HIGH 14 PAUSE 50 ELSEIF (IN4 = 1) THEN HIGH 15 PAUSE 50 ELSE PAUSE 50 ENDIF LOW 14 LOW 15 PAUSE 50 LOOP
Funcionamiento del programa PushbuttonControlOfTwoLeds.bs2
Si la Terminal Debug muestra a IN3 y IN4 rotando es muy difícil leer lo que se está mostrando. Una forma de detener la rotación es mandando siempte el cursor a la posición izquierda superior de la Terminal Debug utilizando el Control de Caracteres HOME: DEBUG HOME
Al mandar el curso a la posición izquierda superior cada vez a través del bucle DO...LOOP, las instrucciones DEBUG ? IN4 DEBUG ? IN3
Se muestran otra vez los valores de IN3 y IN4 en la misma parte de la Terminal Debug La palabra clave DO inicia el bucle de este programa DO
Estas instrucciones de la frase IF son las mismas del Programa Ejemplo de la actividad anterior. IF (IN3 = 1) THEN HIGH 14 PAUSE 50
Entrada Digital – Botón Push · Página 77
Aquí es donde está la ayuda de ELSEIF. Si IN3 no es 1 pero IN4 es 1, hacemos que conecte el LED de P15 en lugar del LED conectado en P14. ELSEIF (IN4 = 1) THEN HIGH 15 PAUSE 50
Si no es verdadera ninguna frase , deseamos que se espere 50 ms sin cambiar el estado de cualquier circuito LED. ELSE PAUSE 50
Cuando hayas teminado con todas las necisiones, no olvides ENDIF. ENDIF
Es hora de apagar el LED y hacer pausa otra vez. Tu podrías tratar de decidir que LED quieres que parpadee. Las instrucciones de PBASIC lo ejecutan bonito y rápido, entonces ¿podemos apagarlos y olvidarnos de tomar decisiones? LOW 14 LOW 15 PAUSE 50
La instrucción LOOP regresa el programa a la instrucción DO al proceso de verificar los botones push y cambiar los estados de los LED y empezar una y otra y otra vez. LOOP
Su turno - ¿Podemos presionar los dos Botones Push?
El Programa Ejemplo tiene una falla. Trate de presionar ambos botones al mismo tiempo y observe la falla. Usted podría espererar que ambos LEDs parpadeen, pero no lo hacen porque solamente se está ejecutando un bloque de códigos IF...ELSEIF...ELSE antes de que brinque al siguiente ENDIF. De esta forma puede usted resolver este problema o falla. 9 Guarde en programa PushbuttonControlOfTwoLeds.bs2 con un nombre diferente. 9 Reemplace la instrucción IF y el siguiente bloque: IF ( IN3 = 1) THEN HIGH 14 PAUSE 50
Con el siguiente bloque
Página 78 · ¿Qué es un Microcontrolador?
IF ( IN3 = 1) AND (IN4 = 1) THEN HIGH 14 HIGH 15 PAUSE 50 Un Bloque de Códigos es un grupo de instrucciones. Si la frase IF de arriba tiene un bloque de códigos con tres instrucciones (HIGH, HIGH y PAUSE). Entonces la frase de ELSEIF tiene un bloque de códigoscon dos instrucciones (HIGH, pause)
Ejecute su programa modificado y vea si maneja los dos botones push y los circuitos LED como usted esperaría. La palabra clave AND se puede usar en una instrucción IF...THEN para verificar si es verdadera más de una condición. Todas las condiciones con AND deben ser verdaderas para que la frase IF sea verdadera. La palabra clave OR se puede usar para verificar si por lo menos una de la condiciones es verdadera.
También puede usted modificar el programa para que el LED que parpadea lo haga con diferentes cantidades de tiempo. Por ejemplo, usted puede reducir Duration de la Instrucción PAUSE a 10 en ambos botones push, e incrementar PAUSE para el LED en P14 hasta 100, e incrementar PASE para el LED P15 hasta 200. 9 Modifique las instrucciones PAUSE en el IF y en las dos frases de ELSEIF como se comentó. 9 Ejecute el programa modificado. 9 Observe la diferencia en el comportamiento de cada LED.
ACTIVIDAD #5: PRUEBA DEL TIEMPO DE REACCIÓN DE UN TEMPORIZADOR Usted es el Ingeniero de Sistemas Incrustados en una compañía de Videojuegos. El Departamento de Mercadotecnia recomienda que se debe agregar un circuito para verificar el tiempo de reacción para el siguiente Controlador de Juego Portátil. Su siguiente tarea es desarrollar una prueba para verifica el tiempo de reacción. La solución que usted construirá y verificará en esta actividad es un ejemplo de cómo resolver este problema, pero ésta no la única solución. Antes de continuar, detengase un momento para pensar como diseñaría esta prueba de reacción.
Entrada Digital – Botón Push · Página 79
Partes del Juego Tiempo de Reacción de un Temporizador
Un LED Bicolor. Un Resistor de 470 Ω (amarillo-violeta-café). Un Botón push – normalmente abierto. Un Resistor de 10 KΩ (café-negro-naranja). Un Resistor de 220 Ω (rojo-rojo-café). Alambres para puentes. Construcción del Circuito Tiempo de Reacción de un Temporizador
La Figura 3-14 muestra los diagramas esquemático y alambrado de un circuito que puede usarse con el BASIC Stampo para hace un juego de Tiempo de Reacción. 9 Construya el circuito que muestra la Figura 3-14. 9 Ejecute el programa TestBiColorLED.bs2 del capítulo 2, actividad #5 para verificar el circuito LED Bicolor y asegurese que está bien alambrado. 9 Si usted reconstruye el circuito botón push para esta actividad, ejecute el programa ReadPushbuttonState.bs2 de la Acitivad #2 de este capítulo para asegurarse que el botón push está trabajando correctamente. P15
1 1
2 Vdd
P14 470 Ω
Vdd
P3 220 Ω
10 kΩ
Vss
Vin
Vss
X3
2
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figura 3-14 Circuito del Juego Tiempo de Reacción
Página 80 · ¿Qué es un Microcontrolador?
Programación del Tiempo de Reacción
El siguiente Programa Ejemplo apagará el LED Bicolor hasta que el Jugador mantenga presionado el botón push. Cuando el botón push se mantiene presionado, el LED se iluminará rojo por un corto período de tiempo. Cuando se ilumina verde, el jugador tiene que soltar el botón push tan pronto como él o ella puedan. Así el programa mide el tiempo de reacción que emplea el jugador en soltar el botón push para iluminarse verde. El programa ejemplo también muestra como funcionan los conceptos “polling” y conteo. Polling es el proceso de verificar algo una vez y otra vez muy rápidamente para ver si este proceso ha cambiado. Conteo es el proceso de agregar un número a una variable cada vez que se hace (o no se hace) algo. En este programa, el BASIC Stamp verificará el cambio “Polling” cuando el LED Bicolor cambia a verde hasta que se libera el botón push. Este esperará 1/1000 de segundo usando la instrucción PAUSE 1. Cada vez que verifica y el botón no se ha liberado, agregará un 1 a la variable de Conteo llamada timeCounter. Cuando el botón push se ha liberado, el programa deja de verificar “Polling” y manda un mensaje a la Terminal DEBUG y ésta muestra el valor de la variable timeCounter. Programa Ejemplo. ReactionTimer.bs2
9 Meta y ejecute el programa ReactionTimer.bs2 9 Siga las indicaciones de la Terminal Debug (vea la Figura 3-15)
Figura 3-15 Instrucciones de Tiempo de Reacción en la Terminal Debug.
Entrada Digital – Botón Push · Página 81
' ¿Qué es un Microcontrolador? - ReactionTimer.bs2 ' Prueba del tiempo de reacción del botón y un LED bicolor. ' {$STAMP BS2} ' {$PBASIC 2.5} PAUSE 1000 timeCounter
' Espera 1 s antes 1er mensaje. VAR
Word
' Declara variable para almacenar tiempo.
DEBUG "Press and hold pushbutton", CR, ' Muestra instrucciones tiempo reac. "to make light turn red.", CR, CR, "When light turns green, let", CR, "go as fast as you can.", CR, CR DO
' Comienza bucle principal. DO LOOP UNTIL IN3 = 1
' Se repite el bucle anidado... ' hasta que se presiona botón.
HIGH 14 LOW 15
' LED Bicolor en rojo.
PAUSE 1000
' Retardo 1 segundo.
LOW 14 HIGH 15
' LED Bicolor en verde.
timeCounter = 0 DO
' Carga Counter con cero. ' Bucle anidado, cuenta tiempo.
PAUSE 1 timeCounter = timeCounter + 1 LOOP UNTIL IN3 = 0
'hasta liberar el botón.
LOW 15
' LED Bicolor Apagado.
DEBUG "Your time was ", DEC timeCounter, ' Muestra medición de tiempo. " ms.", CR, CR, "To play again, hold the ", CR, ' Instrucciones para jugar otra vez. "button down again.", CR, CR LOOP
' Regresa para comenzar bucle principal".
Página 82 · ¿Qué es un Microcontrolador?
Funcionamiento del Programa ReactionTimer.bs2
Como el programa tendrá que mantener identificado el número de veces que se verificó (Polling) el botón de push, declararemos una variable que se llama “timeCounter”. Variables Inicializando en Cero: Cuando declaramos una variable en PBASIC, automáticamente su valor es CERO hasta que una instrucción la ajusta a su nuevo valor.
La instrucción DEBUG contiene instrucciones para el jugador del juego. DEBUG “ Mantenga presionado el botón push”, CR “para iliminar el LED rojo.” , CR, CR, “cuando el LED se haga verde” , CR, “hágalo tan rápido como pueda.” . CR, CR
Las instrucciones DO...LOOP se pueden anidar. En otras palabras, usted puede color un bucle DO...LOOP dentro de otro bucle DO...LOOP. DO
‘Comienza el bucle principal. DO ‘Se repite el bucle anidado... LOOP UNTIL IN3 = 1 ‘hasta presiona el botón push. ‘Aquí esta esl resto del programa. LOOP
Merece nuestra atención el bucle interno DO...LOOP. Un bucle DO...LOOP puede usar una condición para decidir si se sale o no se sale del bucle y se mueve a las siguientes instrucciones. El bucle DO...LOOP se repite así mismo todo el tiempo que el botón push no está presionado (IN3 = 0). El bucle DO...LOOP se ejecutará una vez y otra vez hasta que IN3 = 1. Entonces, el progama se moverá a la siguiente instrucción después de la frase LOOP UNTIL. Este es un ejemplo de “Polling.” El bucle DO...LOOP UNTIL verifica hasta que se presiona el botón push. DO LOOP
UNTIL IN3 = 1
‘Se repite el bucle anidado... ‘hasta que se presiona el botón push
Las instrucciones que siguen inmediatamente despues de la frase LOOP UNTIL cambian el LED Bicolor rojo, se mantiene así un segundo y luego se ilumina verde. HIGH LOW PAUSE LOW
14 15 100 14
‘LED Bicolor en rojo ‘Retardo de 1 segundo ‘LED Bicolor en verde
Entrada Digital – Botón Push · Página 83
HIGH 15
Tan pronto como el LED Bicolor se ilumina verde, es momento de empezar a contar para saber cuanto tiempo utiliza el jugador en liberar el botón push. La variable timeCount se ajusta en cero, y entonces otro bucle DO...LOOP con la condición UNTIL empieza a repetirse a si mismo. Y se repite así mismo hasta que el jugador liber el botón push (IN3=0). Cada vez que pasa por el bucle, el BASIC stamp lo retarda 1 milisegundo usando PAUSE 1, y también agrega un 1 al valor de la variable timeCounter. TimeCounter = 0 ‘Fija el timeCounter en cero DO ‘Bucle anidado, cuenta el tiempo PAUSE = 1 timeCounter = timeCounter + 1 LOOP UNTIL IN3 = 0 ‘hasta que se libera el botón push
Después de liberar el botón push, el LED Bicolor se apaga. LOW 15
Los resultados se muestran en la Terminal Debug. DEBUG "Su tiempo fue ", DEC timeCounter, " ms.", CR, CR, "Para volver a jugar, mantenga presionado ", CR, "nuevamente el botón.", CR, CR
La última frase del programa es LOOP, que regresa al programa al primer DO. Su turno – Revisión del Diseño (Topicos Avanzados)
El departamento de Mercadotecnia dió su prototipo a algunos jugadores. Cuando los jugadores lo analizaron, el departamento de Mercadotecnia regresó a usted una lista de tres problemas que tiene que corregir antes de construir su nuevo prototipo con su controlador. 9 Guarde el programa Reaction Timer-bs2 con un nuevo nombre (por ejemplo: ReactionTimerYourTurn.bs2) En seguida se analiza la lista de los problemas y sus soluciones. Problema 1: Cuando el jugador mantiene presionado el botón push durante 30 segundos, su scores es realmente alrededor de 14,000 ms o 14 segundos. ¡Esto se tiene que corregir!
Página 84 · ¿Qué es un Microcontrolador?
Se requiere 1 ms para la ejecución del mismo bucle y agregar un 1 a la variable timeCounter sin incluir la instrucción PAUSE 1. A esto se le llama Código sobrepasado, y es la cantidad de tiempo que le toma a BASIC Stamp para ejecutar las instrucciones. Una solución rápida que mejorará la exactitud es volver comentario la instrucción PAUSE 1, agregandole un apóstrofe a su izquierda. ‘PAUSE 1
9 Haga que PAUSE 1 sea un comentario y verifique para ver la exactitud del programa. En lugar de cambiar “delay” a comentario, otra forma para solucionar el programa es multiplicar su resultado por dos. Por ejemplo, justamente antes de la instrucción DEBUG que muestra el número de milisegundo, usted puede insertar una unstrucción que multiplique el resultado por dos: timeCounter = timeCounter * 2 ‘<- Agregue este DEBUG “Su tiempo fue”, DEC timeCounter, “ms.”, CR, CR
9 Quite el comentario de la instrucción PAUSE borrando el apóstrofe e intente la solución de la multiplicación por dos. Para mayor Precisión usted puede usar el operador “*/” para multiplicar un valor con una fracción. No es dificil usar el operador */ así se hace: 1.
Coloque el valor o variable que desea multiplica por un valor fraccional antes del operador */.
2.
Tome el valor fraccional que usted desea usar y multiplíquelo por 256.
3.
Redondee el valor a la derecha del punto decimal.
4.
Coloque el valor redondeado después del operador */.
Ejemplo: Deseamos multiplicar la variable timeCounter por 3. 1.
Coloque timeCounte a la izquierda del operador */ timeCounter = timeCounter */
2.
Multiplique el valor fraccional por 256: 3.69x256 = 944.64
3.
Redondee 944.64 a 945
4.
Coloque el valor a la derecha del operador */ timeCounter = timeCounter */ 945
‘multiplique por 3.69
Entrada Digital – Botón Push · Página 85
La multiplicación de 14,000 por 2 da, un escalamiento a 28,000 este valor no es 30,000 30,000 entre 14,000 = 2.14. Multiplique por 2.14 con el operador */ para aumentar la precisión necesitamos saber cuántos 256 hay en 2.14. Entonces 2.14x256 = 547.84 = 548. Usted puede usar este valor y el operador */. timeCounter = timeCounter * 2
9 Reemplace timeCounter = timeCounter * 2 con timeCounter */ 548 y vuelva a verificar su programa. Su prueba de 30-segundos con el original, el programa sin modificar genera un valor que es ligeramente diferente de 14,000. Entonces, usted puede usar el mismo procedimiento con sus resultados de prueba para calcular el valor para que el operador */ haga más precisos sus resultados. 9 Inténtelo. Problema 2. Los jugadores rapidamente calcularon que el retardo de rojo a verde es de 1 segundo. Después de jugar varias veces, estaban preparados para predecir cuando ir y su score no reflejó su tiempo verdadero de reacción. El BASIC Stamp tiene la instrucción RANDOM. Así se modifica su código para un número al azar. 9 En el principio de su código agregue una declaración para una nueva variable llamada “value”, y póngala en 23. El valor 23 se llama “semilla” porque comienza la secuencia de un pseudo número al azar. timeCounter VAR Word value VAR Byte value = 23
' <- Agregue esto ' <- Agregue esto
9 Justo antes de la instrucción PAUSE 1000 dentro del bucle DO...LOOP, use la instrucción RANDOM para darle a “value” un nuevo valor “random” de la secuencia de un pseudo random que empieza con 23. RANDOM value DEBUG "Delay time ", ? 1000 + value, CR
' <- Agregue esto ' <- Agregue esto
9 Modifique la instrucción PAUSE 1000 para que se agregue el “value” random al argumento de Duration.
Página 86 · ¿Qué es un Microcontrolador?
PAUSE 1000 + value
' <- Modifique esto
LOW 14 HIGH 15
9 Como el valor más grande que puede almacenar un Byte es 255, la instrucción PAUSE solamente varía ¼ de segundo. Usted puede multiplicar la variable value por 4 para hacer que el retardo de luz roja varíe desde 1 hasta justamente 2 segundos. DEBUG "Delay time ", ? 1000 + (value*4), CR ' <- Modifique PAUSE 1000 + (value * 4) ' <- Modifique esto nuevamente ¿Qué es un Algoritmo? Un Algoritmo es una secuencia de operaciones matemáticas. ¿Qué es Pseudo random? Pseudo random significa aquello que parece random pero que realmente no lo es. Cada vez que usted empieza el programa una vez y otra vez, usted obtendrá la misma secuencia de valores. ¿Qué es una semilla? Una semilla es un valor que se usa para iniciar la secuencia pseudo random. Si usted usa un valor diferente para la semilla (cambie el valor 23 por otro número), se obtendrá una diferente secuencia pseudo random.
Problema 3. Un jugador que presiona el botón antes que cambie a luz verde obtiene un muy buen irrasonable score (1 ms) Su microcontrolador necesita calcular si el jugador está haciendo trampa. El pseudo código se introdujo cerca del final de la Actividad #3 en este capítulo. Aquí están algunos pseudo códigos que le ayudan a aplicar la frase IF...THEN...ELSE para resolver el problema. Considere que ha hecho los cambios de los problemas 1 y3, si el jugador libera el botón antes que la luz sea verde el timeCounter será ahora 2 en lugar de 1. Los cambios abajo mostrados harán que funcione el timeCounter ya sea valga 1 o 2. • • • •
Si el valor de timeCounter es menor o igual a 2 (timeCounter<=2) o Muestre un mensaje que le diga al jugador que él o ella tiene que esperar hasta que la luz sea verde para que pueda presionar el botón. Else, (si el valor de timeCounter es mayor que 1) o Muestre el valor de timeCounter (como lo hace el programa ReactionTimer.bs2) en milisegundos. End If Muestre el mensaje “Jugar nuevamente”
Entrada Digital – Botón Push · Página 87
9 Modifique su programas para crear este pseudo código en PBASIC para así resolver el problema de hacer trampa.
RESUMEN Este capítulo introdujo el botón push y algunos circuitos comunes con botón push. También introdujo como construir y verificar un circuito botón push y como usar el BASIC Stamp para leer el estado de uno o más botones push. Se programó el BASIC Stamp para tomar decisiones basado en el estado (s) de los botones push y ésta información se utilizó para controlar LEDs. Se construyó un juego de reacción de tiempo usando estos conceptos. Además se programó a el BASIC Stamp para controlar los LEDs y verificar un botón push y tomar mediciones de tiempo. Se introdujeron varios conceptos de programación, que incluyen conteo, pseudo códigos para planeación de flujo de programas, exceso de código en aplicaciones sensibles al tiempo y valores de semillas para eventos pseudo random. Se construyeron circuitos de lectura individuales de botón push usando variables especiales de e/s (IN3, IN4, etc) usando el BASIC Stamp, y se hicieron decisiones basados en estos valores usando las instrucciones IF...THEN...ELSE, y se introdujeron las instrucciones de bloque IF...ELSEIF...ELSE. Para evaluar más de una condición, se introdujeron los operadores AND y OR. Se agregó una condicición a un bucle DO...LOOP usando la palabra clave UNTIL, además se introdujo el anidado de bucles DO...LOOP. Para agregar un elemento no predecible se introdujo la instrucción RANDOM a una aplicación del Tiempo de Reacción. Preguntas
1. ¿Cuál es la diferencia entre mandar y recibir señales HIGH y LOW usando el BASIC Stamp? 2. ¿Respecto a un botón push, que significa “normalmente abierto”? 3. ¿Qué sucede entre las terminales de un botón normalmente abierto cuando se presiona? 4. ¿Cuál es el valor de IN3 cuando se conecta un botón push a Vdd? ¿Cuál es el valor de IN3 cuando se conecta un botón push a Vss? 5. ¿Qué hace la instrucción DEBUG ? IN3?
Página 88 · ¿Qué es un Microcontrolador?
6. Qué clase de bloques de código se pueden usar para tomar decisiones basadas en el valor de uno o más botones push? 7. ¿Qué hace el control de caracteres HOME en la frase DEBUG HOME? Ejercicios
1. Explique como se modifica en programa ReadPushbuttonState.bs2 para que lea el botón push cada segundo en lugar de cada ¼ de segundo. 2. Explique como se modifica el programa ReadPushbuttonState.bs2 para que lea un circuito de un botón push normalmente abierto con un resistor de pull-up conectado al pin E/S P6. Proyecto
1. Mofique el programa ReactionTimer.bs2 para que jueguen dos jugadores. Agregue un segundo botón conectado al pin P4 para el segundo jugador. Soluciones
Q1. Al “mandar” el BASIC Stamp usa un pin E/S como salida, en tanto que al “recibir” usa el pin E/S como entrada. Q2. Normalmente abierto significa que el estado normal del botón push (sin presionar) forma un circuito abierto. Q3. Cuando se presiona, la distancia entre la terminales se unen con un metal conductor. La corriente puede circular a través del botón push. Q4. IN3 = 1cuando el botón se conecta a Vdd. IN3 = 0 cuando el botón push se conecta a Vss. Q5. DEBUG ? IN3 muestra el texto “IN3 =” seguido por el valor almacenado en IN3 (el valor puede ser un 1 o un 0 dependiendo del pin P3), y le sigue un regreso. Q6. Los bucles IF…THEN…ELSE y IF…ELSEIF…ELSE. Q7. El control de caracteres HOME manda al cursor a la posición izquierda superior de la Terminal Debub. E1. En el programa el bucle DO...LOOP se repite cada ¼ segundo por la instrucción PAUSE 250. Para repetirlo cada segundo cambie PAUSE 250 (250 ms = 0.25s =1/4 s) por PAUSE 1000 (1000 mse = 1s) DO DEBUG ? IN3 PAUSE 1000 LOOP
Entrada Digital – Botón Push · Página 89
E2. Para leer el pin P6 reemplace IN3 con IN6. El programa sólo muestra el estado del botón push, y no usa el valor para tomar decisiones, por eso no importa si el resistor es pull-up o pull-down. La instrucción DEBUG mostrará cualquier estado del botón. DO DEBUG ? IN6 PAUSE 250 LOOP
P1. Primero se agregó un botón push para el segundo jugador y se conectó al BASIC Stamp en el pin P4. El esquemático es el de la Figura 3-13. Vdd
P15
Vdd
1 P4
P3 220 Ω
220 Ω 10 kΩ
2
P14 470 Ω
Vss
10 kΩ
Vss
Abajo se incluyen secciones del programa solución, pero recuerde que las soluciones pueden codificarse de diferentes maneras. Sin embargo, la mayoría de las soluciones inclurán las siguentes modificaciones: Use dos variables para controlar los tiempos de dos jugadores. timeCounterA VAR timeCounterB VAR
Word Word
' Tiempo del jugador A ' Tiempo del jugador B
Cambie las instrucciones para mostrar los dos botones push DEBUG “Mantenga presionados los botones push”, CR, DEBUG “Otra vez abajo los botones push”, CR, CR
Espere que los dos botones estén presionados antes que el LED sea rojo, usando el operado AND. LOOP UNTIL {IN3 = 1} AND {IN4 = 1}
Página 90 · ¿Qué es un Microcontrolador?
Espere que los dos botenes se liberen para el tiempo final, y use nuevamente el operador AND. LOOP UNTIL {IN3 = 0} AND {IN4 = 0}
Sume lógicamente para decidir que tiempo del jugadors se incrementa: IF (IN3 = 1) THEN timeCounterA = timeCounterA + 1 ENDIF IF (IN4 = 1) THEN timeCounterB = timeCounterB + 1 ENDIF
Cambie el tiempo de la pantalla para mostrar los tiempos de ambos jugadores. DEBUG "Tiempo del Jugador A : DEBUG "Tiempo del Jugador B :
", DEC timeCounterA, " ms. ", CR ", DEC timeCounterA, " ms. ", CR
Sume lógicamente para mostrar que jugador tiene el tiempo de reacción más rápido. IF (Tiempo del ContadorA < Tiempo del ContadorB) THEN DEBUG "El jugador A es el ganador!", CR ELSEIF (Tiempo del ContadorB < Tiempo del ContadorA) THEN DEBUG "El jugador B es el ganador!", CR ELSE DEBUG "Es un empate!", CR ENDIF
Abajo se muestra la solución completa. ' Que es un Microcontrolador - Ch03Prj01_TwoPlayerReactionTimer.bs2 ' Verifique el tiempo de reacción con un boton y un LED bicolor. ' Agregue un segundo jugador y un segundo botón. Ambos jugadores ' juegan al mismo tiempo usando el mismo LED.Gana quien libera más rapido el boton. ' Pin P3: Jugador A Pushbutton, Active High ' Pin P4: Jugador B Pushbutton, Active High ' {$STAMP BS2} ' {$PBASIC 2.5} timeCounterA VAR timeCounterB VAR
Word Word
' Tiempo del jugador A ' Tiempo del jugador B
Entrada Digital – Botón Push · Página 91
PAUSE 1000 mensaje
' 1 s antes del primer
DEBUG "Mantenga presionados los botones", CR, ' Muestra el t de reacción "para que se ilumine el LED rojo.", CR, CR, ' instrucciones. "Cuando cambie a verde, let", CR, "juege tan rapido como pueda.", CR, CR DO ' Comienza el bucle principal. DO ' El bucle hasta que ambos presionan ' Nada LOOP UNTIL (IN3 = 1) AND (IN4 = 1) HIGH 14 LOW 15
' LED Bicolor rojo.
PAUSE 1000
' Retardo de 1 segundo.
LOW 14 HIGH 15
' LED Bicolor verde
timeCounterA = 0 timeCounterB = 0
' Fija el timeCounters a cero
DO PAUSE 1 IF (IN3 = 1) THEN ' Si el botón todavía está presionado, timeCounterA = timeCounterA + 1 ' incremente el contador ENDIF IF (IN4 = 1) THEN timeCounterB = timeCounterB + 1 ENDIF LOOP UNTIL (IN3 = 0) AND (IN4 = 0) LOW 15
' Esta en bucle hasta que ambos ' botones se liberen. ' LED Bicolor apagado.
DEBUG "Tiempo del jugador A: ", DEC timeCounterA, " ms. ", CR DEBUG "Tiempo del jugador B: ", DEC timeCounterB, " ms. ", CR, CR IF (timeCounterA < timeCounterB) THEN DEBUG "El jugador A es el ganador!", CR ELSEIF (Tiempo del jugador B < timeCounterA) THEN DEBUG "El jugador B es el ganador!", CR ELSE ' Son iguales los tiempos A & B DEBUG "Es un empate!", CR ENDIF DEBUG CR DEBUG "Para jugar otra vez ", CR ' Instrucciones para jugar otra vez. DEBUG "presionen los botones.", CR, CR LOOP
' Regresa a iniciar el bucle principal.
Página 92 · ¿Qué es un Microcontrolador?