-- Capítulo 1: PRIMITIVAS Y PROCEDIMIENTOS 3.1. EL LENGUAJE WIN-LOGO WIN-LOGO PRIMITIVAS PROCEDIMIENTOS APLICACIONES -El lenguaje de programación Logo fue creado por Seymout Papert (matemático del MIT) en los años 60 como consecuencia del fracaso escolar del alumnado. En colaboración con Piaget, pedagogo suizo realizó este lenguaje con un planteamiento pedagógico, de manera que hoy es un material didáctico de primera magnitud. Cuenta con órdenes muy sencillas (primitivas) que pueden crear pequeños programas (procedimientos), que se pueden usar con posterioridad como nuevas órdenes. Esta peculiaridad hace que se pueda realizar un aprendizaje progresivo sin conocimientos previos de informática . Como se indicaba en la sección anterior, para trabajar con la controladora cargamos el fichero CONTROLA.LOG. Este fichero contiene los comandos y órdenes del micromundo de control. En el momento en que el fichero CONTROLA. LOG se ha cargado en la memoria del ordenador, se enciende el led situado debajo de ACT, en el frontal de la controladora, como señal de buen funcionamiento. Como se indicaba en la sección anterior, para trabajar con la controladora cargamos el fichero CONTROLA.LOG. Este fichero contiene los comandos y órdenes del micromundo de control. En el momento en que el fichero CONTROLA. LOG se ha cargado en la memoria del ordenador, se enciende el led situado debajo de ACT, en el frontal de la controladora, como señal de buen funcionamiento. Las primitivas son las órdenes escritas en la pantalla de trabajo, que es el sector inferior izquierdo de la presentación del programa Winlogo. Las primitivas se deben escribir en mayúsculas. . En la mayoría de los casos, se requiere la composición de varias primitivas para que se ejecute la orden deseada y además puede que queramos conservarlas para su uso posterior, para ello se elaboran pequeños subprogramas que son composiciones de varias primitivas y los llamamos procedimientos. Para la creación de estos procedimientos se comienza en la primera línea con la primitiva «PARA», seguida de un espacio y a continuación el nombre que se otorgue al procedimiento (que debe ser distinto del de las primitivas). A continuación se escribirán las sucesivas primitivas con los valores correspondientes, y una vez terminadas, en la última línea se pone la primitiva «FIN» exclusivamente. El procedimiento así creado será válido en tanto el ordenador esté con el programa Logo cargado y se perderá al apagarlo. Para guardarlas para su uso posterior, debes acudir a la barra de menú «Edición», seleccionar «Seleccionar todo», a continuación «copiar». Luego seleccionamos la pantalla de Edición, y a continuación «pegar» y finalmente se selecciona en la barra de menús «Archivos» y «Grabar». Una característica muy útil de los lenguajes de alto nivel, (y Logo es uno de ellos) es la recursividad, que es la posibilidad que ofrece un programa de llamarse a sí mismo en un bucle sin fin. Esto se logra escribiendo el nombre del procedimiento en la última línea del mismo, esta línea se denomina línea de recursividad. Las estructuras recursivas se utilizan muy a menudo en los programas de robótica. En gran cantidad de ocasiones las máquinas, además de ejecutar acciones habituales, están alertas ante cualquier cambio que pueda producirse gracias a su programación. Dentro de su programa de funcionamiento, se incluyen programas recursivos que se activan debido a los cambios en las condiciones de la máquina. Un primer problema por resolver en un procedimiento recursivo, es encontrar la forma de abandonar su ejecución infinita del procedimiento sin pulsar la tecla [ESC]. se puede abandonar dicha ejecución mediante el uso de la sentencia: SI TECLA? [ALTO] Capítulo 2: PRIMITIVA PRIMITIVAS Y PROCEDIMIENTOS ACCION M1_"D M1_"I • El motor nº 1 gira a la derecha • El motor nº 1 gira a la izquierda M1_"P • El motor nº 1 se para M? M_:L CONECTA_1 DESCONECTA_1 CONECTADOS? ESPERA_100 SD? SD:NU OBSERVACIONES • Estas primitivas son las que se emplean para el funcionamiento de bombillas y motores • Da información del estado (D-I-P) del giro de los cinco motores • Permite controlar los 5 motores con una sola primitiva • Es una primitiva equivalente a M1_D • Es una primitiva equivalente a M1_P • Devuelve una lista con el estado 0/1 de las parejas de salidas de • Nos da cuenta del sentido motores( S1-S2, S3-S4, S5-S6, S7- de giro S8,S9-S10) • Si escribimos: M1_»D • Indica que la acción se ejecute ESPERA_200_M1_»P durante un periodo de 100 (cada • El motor girará hacia la acción se corresponde derecha 2 segundos y se aproximadamente con 1 segundo) para. • Lee las 10 entradas digitales y • Esta misma acción se devuelve (en la Ventana de textos) puede realizar también con la una lista de 10 elementos, que primitiva ESTADO indican el estado 0/1 de cada una de ellas. • Lee el valor de una entrada digital, indicando su número (:num ES "HOLA del 1 al 10) • Escribe la palabra que viene detrás de las comillas • Escribe el valor de la variable :N ES :N ES_SD1 • Nos describe en la pantalla de texto si un sensor digital está activado o desactivado SI_SD1_=_1 [M1 "P] • Si el sensor digital nº 1 está activado SAW SAX SAY SAZ SA? ES_SAX SI_SAX_>_2.42[M1_D] SI_SAX_<_2.4[M1_"I] • Da el valor de la entrada analógica conectada a IN0 • Da el valor de la entrada analógica conectada a IN1 • Da el valor de la entrada analógica conectada a IN2 • Da el valor de la entrada analógica conectada a IN3 • Devuelve el valor de las 4 entradas analógicas • Nos describe en la pantalla de texto el valor que tiene un sensor analógico en un momento determinado • Si el sensor analógico X > 2.42 el motor nº 1 gira a la derecha Si el sensor analógico X<2.4 el motor nº 1 gira a la izquierda • Cuando está activado aparece en la ventana de textos el valor (1). Si está desactivado, aparece el valor (0) • Esta primitiva nunca puede ir así, hay que decirle lo que se pretende. Por ejemplo: SI_SD1_=_1[M1_P] • Si el sensor digital nº 1 está activado, entonces el motor nº 1 se para. • SAX, SAY, SAW, SAZ, son las variables que contienen las respectivas entradas analógicas introducidas • Varía el valor según mayor o menor luminosidad o temperatura • Al activarse el procedimiento EMPEZAR éste valor es 0 (2 V) • Da un valor a la salida analógica • Puede tomar valores entre ACELERA:NUM aplicada al motor 0 y 15 (:NUM ) • Acelera el funcionamiento del • El motor nº 5 acelera M5_D_ACELERA_10_ESPERA200 motor nº 5 durante 2 segundos • Nos indica el inicio de un • Ha de ir precedido de una PARA procedimiento palabra • A continuación se deben • Nos indica el principio del PARA_MOTOR escribir las primitivas del procedimiento MOTOR procedimiento • Nos indica el final de un FIN procedimiento • Pone todas las salidas a 0 y • Detiene todo el APAGA desactiva la controladora. funcionamiento del sistema • Repite lo escrito a continuación • X puede tomar valores REPITE_X entre corchetes X veces 1,2,3,... • Sirve para detener la ejecución • Solo actúa inserta en un ALTO del procedimiento en curso procedimiento • El procedimiento recursivo se SI TECLA? [ALTO] detiene cuando pulsamos cualquier tecla del teclado HAZ "N34 • Da a la variable N el valor 34 VALOR? • Devuelve el valor (0-15) de la salida analógica. HAZ "N:N+1 • Aumenta en 1 el valor de la variable N 2.1. PROCEDIMIENTOS 1. Movimiento de un motor o funcionamiento de una bombilla de forma indefinida. PROCEDIMIENTO PARA MOTOR M1 "D FIN ACCIONES 1.- Inicio del procedimiento. 2.- El motor nº 1 se pone a girar hacia la derecha. 3.-Como no se le ha indicado cuanto tiempo queremos que funcione, el motor está funcionando indefinidamente. 2. Cómo parar el motor o apagar la bombilla que está funcionando de forma indefinida PARA_MOTOR M1_"D FIN MOTOR APAGA 1.- Inicio del procedimiento. 2.- El motor nº 1 se pone a girar hacia la derecha. 3.- Al escribir APAGA y pulsar INTRO el motor se para. Esta acción también se puede realizar pulsando la tecla ESCAPE 3. Cómo hacer que un motor o una bombilla esté funcionado durante un tiempo determinado. PARA_MOTOR1 M1_"D_ESPERA_500 M1_"P 1.- Inicio del procedimiento. 2.- El motor nº 1 está funcionando durante 5 segundos y se para. FIN 4. Cómo hacer que un motor o una bombilla funcionen de forma intermitente PARA_MOTOR1 M1_"D_ESPERA_500 M1_"P_ESPERA_100 MOTOR1 FIN 1.- Inicio del procedimiento. 2.- El motor nº 1 está funcionando durante 5 segundos y se para durante un segundo. 3.- El proceso comienza de nuevo (para detener el proceso hemos de hacer como se indica en el procedimiento 2). 5. Cómo hacer que un motor varíe el sentido de giro PARA CAMBIA_GIRO 1.-El motor gira hacia la derecha 5 segundos M1_"D_ESPERA_500 M1_"P M1_"I_ESPERA 500 M1_"P se para y gira hacia la izquierda otros 5 segundos FIN 6. Cómo poner en marcha un motor mediante un pulsador conectado a una entrada digital PARA_INICIARGIRO SI_SD1=1 [M1_"D ESPERA_500_M1_"P] FIN 1º Si se acciona el pulsador conectado a la entrada digital 1 el motor comienza a girar a la derecha y a los 5 segundos se para 7. Cómo parar un motor usando una tecla cualquiera del ordenador PARA_PARAR M1_"D SI_TECLA? [ALTO ] FIN 1º El motor comienza a girar a la derecha 2º Pulsando cualquier tecla del ordenador el motor se para 8. Cómo variar la velocidad de un motor usando las salidas analógicas PARA VELOC_MOTOR M5_D ACELERA_ 0 ESPERA_500 ACELERA_3 ESPERA_500 ACELERA_1 M5_"P FIN 1.-El motor gira hacia la derecha durante 5 segundos a la velocidad mínima, aumenta su velocidad permaneciendo en ella durante otros 5 segundos. Disminuyendo el número de la primitiva acelera la velocidad se reduce y posteriormente se para. APLICACIONES 1. Ascensor entre 2 pisos 1º. Procedimiento de subida PARA SUBE M1 "D ESPERA 500 M1 "P FIN 2º. Procedimiento de bajada: PARA BAJA M1 "I ESPERA 500 M1 "P FIN 3º. Unión de los dos procedimientos utilizando 2 pulsadores de llamada, uno para cada piso (conectados a las entradas digitales y a + 5Vcc) 2. Móvil con dos motores Si los motores situados en ambas ruedas giran a la vez en el mismo sentido, el móvil irá adelante o atrás según el sentido de giro. • Si solo gira un motor, el móvil se desplazará hacia el lado contrario del motor que gira. • Vamos a controlar el movimiento del móvil utilizando cuatro pulsadores cada uno conectado a una entrada digital El procedimiento global que controla el móvil sería Los cuatro procedimientos que controlan el movimiento del móvil son los siguientes: PARA ADELANTE M1 "D M2 "D ESPERA 200 M1 "P M2 "P FIN PARA IZQUIERDA M1 "D ESPERA 200 M1 "P FIN PARA ATRAS M1 "I M2 "I ESPERA 200 M1 "P M2 "P FIN PARA DERECHA M2 "D ESPERA 100 M2 "P FIN 5. Control de un semáforo La secuencia será verde, ámbar, rojo y vuelta al verde El procedimiento semáforo queda como sigue . PARA VERDE M1 "I ESPERA 100 M1 "P FIN PARA ROJO M2 "I ESPERA 100 M2 "P FIN PARA AMBAR M1 "D ESPERA 20 M1 "P FIN Estos son los procedimientos que sirven para encender cada una de las bombillas EJERCICIOS 1. Control de 2 semáforos en cruce Habrá que modificar los procedimientos VERDE, AMBAR y rojo para añadir el segundo semáforo . • El funcionamiento es el siguiente: si el primero está en verde, el segundo está en rojo, después el primero pasa a ámbar, permaneciendo el segundo en rojo. • Al terminar el periodo de ámbar del primer semáforo el segundo termina de estar en rojo, pasando posteriormente el primer semáforo a rojo y el segundo a verde y así sucesivamente