Home
Guía del programador de NQC
Contents
1. modo puro SetSensorMode SENSOR_1 SENSOR_MODE_RAW 10 umbral 10 ClearSensor sensor Funci n Todas Borra el valor de un sensor s lo afecta a los sensores que se configuran para medir una cantidad acumulativa tal como la rotaci n o un recuento de pulso ClearSensor SENSOR_1 3 1 2 Informaci n del sensor Hay un n mero de valores que se pueden inspeccionar para cada sensor Para todos esos valores se debe especificar el sensor por su n mero de sensor 0 1 2 y no con la constante correspondiente ej SENSOR_1 Sensor Value n Valor Todos Devuelve la lectura procesada del sensor para el sensor n donde n es 0 1 2 Este es el mismo valor que devuelven los nombres de sensor ej SENSOR_1 x SensorValue 0 lee el sensor 1 SensorType n Valor RCX CM Scout Devuelve el tipo configurado del sensor n que debe ser 0 1 2 S lo tiene tipos configurables de sensor RCX otros soportes devuelven el tipo el tipo pre configurado de sensor x SensorType 0 SensorMode n Valor RCX CyberMaster Spy Devuelve el modo de sensor en uso para el sensor n que debe ser 0 1 2 x SensorMode 0 Sensor ValueBool n Valor RCX P gina 20 Gu a del programador de NQC Devuelve el valor booleano del sensor n que debe ser O 1 2 La conversi n booleana se hace bas ndose o bien en l mites preestablecidos o en un argumento slope especificado por medio de SetSensorMode x
2. NQC se refiere a los diferentes ladrillos inteligentes como el destino Actualmente NQC soporta cuatro diferentes destinos RCX RCX2 un RCX que ejecuta el firmware versi n 2 0 CyberMaster Scout y Spybotics Todos los destinos tienen un interprete de c digo de bytes proporcionado por LEGO que puede ser utilizado para ejecutar programas El compilador NQC convierte un programa fuente en LEGO bytecode el cu l puede ser ejecutado en el propio destino Aunque las estructuras de preprocesamiento y de control son muy similares a C NQC no es un lenguaje de prop sito general hay muchas restricciones que son producto de las limitaciones del interprete de c digo de bytes LEGO L gicamente el NQC se define en dos partes diferenciadas El lenguaje NQC describe la sintaxis que a utilizar al escribir programas El NQC API describe las funciones del sistema constantes y macros que se pueden usar en los programas Este API se define en un archivo especial incluido en el compilador Por defecto este archivo siempre se procesa antes de compilar el programa Este documento describe ambos el lenguaje NQC y el NQC API En resumen proporciona la informaci n necesaria para escribir programas en NQC Dado que hay varios interfaces para NQC este documento no describe c mo usar ninguna implementaci n de NQC espec fica Consulte la documentaci n proporcionada con la herramienta NQC as como el Manual de Usuario de NOC para informaci n espec fica
3. SensorValueBool 0 SensorValueRaw n Valor RCX Scout Spy Devuelve el valor puro del sensor n que debe ser O 1 2 Los valores puros var an entre O y 1023 x SensorValueRaw 0 3 1 3 Sensor de luz del Scout Scout En el Scout SENSOR_3 se refiere al sensor de luz que viene incorporado La lectura del valor del sensor de luz con SENSOR_3 devuelve uno de los tres niveles O oscuro 1 normal o 2 brillante Se puede leer el valor puro del sensor con SensorValueRaw SENSOR_3 pero hay que tener en cuenta que una luz m s brillante ocasiona un valor puro m s bajo La conversi n del valor puro del sensor entre O y 1023 a uno de los tres niveles depende de tres argumentos l mite superior l mite inferior e hist resis El l mite inferior es el valor puro m s peque o m s brillante que a n se considera normal Los valores por debajo del l mite m s bajo se consideran brillantes El l mite superior es el mayor valor puro m s oscuro que se considera normal Los valores cerca de este l mite se consideran oscuros Se puede usar la hist resis para impedir que cambie el nivel cuando el valor puro se acerca a uno de los l mites Esto se consigue haciendo que sea un poco m s dif cil abandonar los estados oscuros y brillantes que entrar en ellos Espec ficamente el l mite para moverse de normal a brillante es un poco m s bajo que el l mite para volver de brillante a normal La diferencia entre estos dos l m
4. n while se usa para construir un bucle condicional La condici n se eval a y si es verdadera se ejecuta el cuerpo del bucle a continuaci n se comprueba de nuevo la condici n El proceso contin a hasta que la condici n se vuelve falsa o se ejecuta la instrucci n break A continuaci n aparece la sintaxis para el bucle while while condici n cuerpo Es normal utilizar una instrucci n compuesta como cuerpo del bucle while x lt 10 x Il x 1 y y 2 Una variante del bucle while es el bucle do while Su sintaxis es do cuerpo while condici n La diferencia entre el bucle while y el do while es que el do while siempre ejecuta el cuerpo al menos una vez mientras que el bucle while puede no ejecutarlo nunca Otro tipo de bucle es el bucle for for instrl1 condici n instr2 cuerpo Un bucle for siempre ejecuta instrl luego chequea repetidamente la condici n y mientras es verdadera gecuta el cuerpo seguido de instr2 El bucle for es equivalente a instrl while condici n cuerpo instr2 La instrucci n repeat ejecuta un bucle un n mero determinado de veces repeat expresi n cuerpo La expresi n determina cuantas veces se ejecutar el cuerpo Obs rvese la expresi n s lo se eval a una vez y el cuerpo se repite ese n mero de veces Esto es diferente en las estructuras while Y do while que eval an la condici n en cada bucle Una instrucci n switch se puede utilizar para ejecuta
5. para esa implementaci n Si desea informaci n y documentaci n actualizada de NQC visite el Sitio Web de NQC en la siguiente direcci n http www baumfamily ore ngc P gina 1 Gu a del programador de NQC 2 Lenguaje NQC Esta secci n describe el propio lenguaje NQC Incluye las reglas l xicas usadas por el compilador la estructura de los programas sentencias y expresiones y el funcionamiento del preprocesador 2 1 Reglas l xicas Las reglas l xicas describen c mo NQC divide un archivo fuente en tokens individuales Incluye c mo est n escritos los comentarios el manejo de los espacios en blanco y los caracteres v lidos para identificadores 2 1 1 Comentarios NQC soporta dos tipos de comentarios El primer tipo comentarios C tradicionales empieza con y termina con Pueden abarcar varias l neas pero no pueden anidarse esto es un comentario esto es un comentario de dos l neas otro comentario intentando anidar finalizando el comentario interior este texto ya no es un comentario La segunda clase de comentarios empieza con y termina con una nueva l nea conocidos a veces como comentarios estilo C un comentario de una l nea sencilla El compilador ignora los comentarios Su nico prop sito es permitir al programador documentar el c digo fuente 2 1 2 Espacio en blanco El espacio en blanco espacios tabuladores y saltos de l nea se usa para
6. sicas Todas las funciones que utilizan salidas establecen como primer argumento un conjunto de salidas Este valor tiene que ser una constante Los nombres OUT_A OUT_B y OUT_C se usan para identificar las tres salidas Varias salidas pueden ser combinadas encadenando salidas individuales Por ejemplo se usa OUT_A OUT_B para especificar las salidas A y B en una sola instrucci n El valor de las salidas tiene que ser siempre una constante no puede ser una variable Cada salida tiene tres atributos modo direcci n y potencia Modo puede ser configurado por medio de SetOutput salida modo El argumento modo debe ser una de las siguientes constantes Significado OUT_OFF La salida est apagada el motor no puede girar OUT_ON La salida est encendida el motor puede funcionar OUT_FLOAT El motor seguir girando hasta detenerse por si solo Los otros dos atributos direcci n y potencia pueden ser configurados en cualquier momento pero s lo tiene efecto si la salida est encendida La direcci n es configurada mediante el comando SetDirection salida direcci n El argumento direcci n debe ser una de las siguientes constantes Significado OUT_FWD El motor gira hacia adelante OUT_REV El motor gira hacia atr s OUT_TOGGLE El motor invierte el sentido de giro La potencia se puede configurar entre O m nima y 7 m xima Los valores OUT_LOW OUT_HALF y OUT_FULL est n definidos para ser utilizados en la confi
7. comando VLL que puede ser usado para comunicarse con el MicroScout o el CodePilot Los comandos espec ficos VLL est n descritos en el SDK del Scout SendVLL 4 Env a el comando VLL 4 3 6 Temporizadores Los diferentes destinos ofrecen temporizadores independientes con una resoluci n de 100 ms 10 tics por segundo El Scout dispone de 3 temporizadores mientras el RCX el Cybermaster y el Spybotics de 4 Los temporizadores van desde el tic O hasta el tic 32767 alrededor de 55 minutos El valor del temporizador puede ser le do iwando Timer n donde n es una constante que determina qu temporizador usar 0 2 para el Scout 0 3 para el resto El RCX2 y el Spybotics poseen la caracter stica de leer el mismo temporizador con mayor resoluci n usando FastTimer n que devuelve el valor del temporizador con una resoluci n de 10 ms 100 tics por segundo ClearTimer n Funci n Todos Pone a cero el temporizador especificado ClearTimer 0 Timer n Funci n Todos Devuelve el valor actual del temporizador especificado con una resoluci n de 100 ms x Timer 0 SetTimer n value Funci n RCX2 Spy Configura el temporizador con un valor especificado que puede ser una expresi n SetTimer 0 X FastTimer n Funci n RCX2 Spy Devuelve el valor actual del temporizador especificado con una resoluci n de 10 ms x FastTimer 0 3 7 Contadores RCX2 Scout Spy Los contadores son como va
8. es un valor booleano de 1 Un valor alto mayor de 562 es un valor booleano de O Esta conversi n se puede modificar al llamar SetSensorMode se puede a adir un valor de umbral entre O y 31 Si el valor del sensor cambia m s que el valor de umbral durante cierto tiempo 3 milisegundos entonces cambia el estado booleano del sensor Esto permite que el estado booleano refleje cambios r pidos en el valor puro Un aumento r pido ocasiona un valor booleano de 0 un descenso r pido es un valor booleano de 1 Incluso cuando un sensor se configura para otro modo por ejemplo SENSOR_MODE_ PERCENT se lleva a cabo la conversi n booleana P gina 19 Gu a del programador de NQC SetSensor sensor configuraci n Funci n RCX Establece el tipo y modo de un sensor dado en una configuraci n especificada que debe ser una constante especial conteniendo el tipo y el modo de la informaci n SetSensor SENSOR_1 SENSOR_TOUCH SetSensorType sensor tipo Funci n RCX Establece un tipo de sensor que debe ser una de las de las constantes de tipo de sensor predefinidos SetSensorType SENSOR_1 SENSOR_TYPE_TOUCH SetSensorMode sensor modo Funci n RCX CM Spy Establece un modo de sensor que debe ser una de las de las constantes de modo de sensor predefinidos Se puede a adir si se desea s lo al modo RCX un argumento de umbral para conversi n booleana SetSensorMode SENSOR_1 SENSOR_MODE_RAW
9. n return return Cualquier expresi n es tambi n una instrucci n legal cuando termina en punto y coma Es poco frecuente usar ese tipo de instrucci n ya que entonces se descartar a el valor de la expresi n La nica excepci n mencionable se refiere a las expresiones que implican los operadores de incremento o decremento X H 5 La instrucci n vac a s lo el punto y coma es tambi n una instrucci n legal 2 4 Expresiones Las primeras versiones de NQC hac an una distinci n entre expresiones y condiciones Esta diferencia se elimin a partir de la versi n 2 3 todo es una expresi n y hay ahora operadores condicionales para las expresiones Esto es parecido a c mo trata C C las operaciones condicionales Los valores son el tipo m s primitivo de expresiones Se forman expresiones m s complicadas a partir de valores usando varios operadores El lenguaje NQC s lo tiene incorporado dos clases de valores constantes num ricas y variables El RCX API define otros valores que corresponden a varias caracter sticas del RCX tales como sensores y temporizadores timers Las constantes num ricas en el RCX se representan como enteros con signo de 16 bits Internamente NQC usa matem ticas con signo de 32 bits para la evaluaci n de expresiones constantes luego lo reduce a 16 bits cuando genera el c digo RCX Las constantes num ricas se pueden escribir como decimales 123 o hexadecimales OxABC Actualmente hay
10. que el programa ha de saltar Por ejemplo veamos c m o implementar un bucle que incrementa el valor de una variable utilizando goto mi_bucle x goto mi_bucle La instrucci n goto debe usarse con moderaci n y precauci n En la mayor a de los casos las estructuras de control tales como if while y switch hacen los programas m s f ciles de leer y modificar Ten la precauci n de no utilizar nunca una instrucci n goto para saltar a una instrucci n monitor O acquire O para salir de ella Esto es as porque monitor y acquire tienen un c digo especial que normalmente es ejecutado en la entrada y salida y un goto evitar a este c digo probablemente provocando un comportamiento no deseado NQC tambi n define el macro until que supone una alternativa pr ctica al bucle while La definici n real de until es Hdefine until c while c En otras palabras unti1 continuar haciendo bucles hasta que la condici n sea verdadera Con mucha frecuencia se utiliza con una instrucci n de cuerpo vac o until SENSOR_1 1 espera a que se presion l sensor P gina 11 Gu a del programador de NQC 2 3 4 Control de acceso y eventos El Scout RCX2 y Spybotics soportan la monitorizaci n de eventos y el control de acceso El control de acceso permite que una tarea solicite la posesi n de uno o m s recursos En NQC el control de acceso lo proporciona la instrucci n acquire que puede presentar dos formas a
11. regla 1 SetScoutMode modo Funci n RCX Pone el Scout en modo stand alone 0 o power 1 Dentro de un programa s lo tiene sentido utilizarla para ponerlo en modo stand alone ya que para que pueda ejecutarse un programa NQC debe estar en modo power SetEventFeedback eventos Funci n Scout Establece qu eventos deben ser acompa ados por un sonido SetEventFeedback EVENT_1_PRESSED EventFeedback Valor Scout Devuelve los eventos que est n acompa ados de un sonido x eventFeedback SetLight modo Funci n Scout Controla el LED del Scout Modo debe ser LIGHT_ON O LIGHT_OFF SetLight LIGHT_ON Encender el LED 3 14 Caracter sticas espec ficas del CyberMaster CyberMaster ofrece nombres alternativos para los sensores SENSOR_L SENSOR_M y SENSOR_R Tambi n ofrece nombres alternativos para las salidas OUT_L OUT_R OUT_X Adem s los dos motores internos tienen tac metros que miden clics y velocidad conforme el motor gira Hay unos 50 clics por revoluci n Los tac metros pueden ser usados por ejemplo para crear un robot que pueda detectar si ha chocado con un objeto sin usar un sensor externo Los tac metros tienen un valor m ximo de 32767 y no diferencian entre ambos sentidos Tambi n contar si se gira el motor con la mano incluso si no hay ning n programa funcionando Drive motor0 motorl Funci n CyberMaster Enciende ambos motores en e
12. siguiente ejemplo espera 10 segundos mientras monitoriza los eventos 2 3 y 4 para RCX2 monitor EVENT_MASK 2 EVENT_MASK 3 EVENT_MASK 4 Wait 1000 catch EVENT_MASK 4 PlaySound SOUND_DOWN sucedi el evento 4 catch PlaySound SOUND_UP sucedi el evento 2 3 Observe que las instrucciones acquire y monitor S lo son soportadas por destinos que implementen el control de acceso y la monitorizaci n de eventos es decir el Scout y el RCX2 2 3 5 Otras instrucciones Una llamada a funci n o subrutina es una instrucci n como la siguiente Nombre argumentos La lista de argumentos es una lista de expresiones separadas por comas El n mero y el tipo de argumentos que se proporcionan debe coincidir con la definici n de la funci n misma Las tareas deben iniciarse y terminarse con las siguientes instrucciones start nombre_de tarea stop nombre_de_ tarea Dentro de los bucles por ejemplo en un bucle while la instrucci n break puede utilizarse para salir del bucle y la instrucci n continue se puede utilizar para saltar a la parte superior de la siguiente iteraci n del bucle La instrucci n break tambi n puede utilizarse para salir de la instrucci n switch break continue P gina 13 Gu a del programador de NQC Es posible hacer que una funci n finalice antes de llegar al final de su c digo usando la instrucci
13. A OUT_OFF desactiva la salida A SetGlobalO0utput OUT_A OUT_ON activa la salida A SetGlobalDirection salidas direcci n Funci n RCX2 Scout Spy Invierte o reestablece la direcci n de las salidas El argumento direcci n debe ser OUT_FWD OUT_REV O OUT_TOGGLE Si SetGlobalDirection es OUT_FWD el comportamiento de la salida es el normal Si SetGlobalDirection es OUT_REV el valor de salida de direcci n ser el opuesto del que se asigne por las funciones b sicas Si SetGlobalDirection es OUT_TOGGLE este cambiar entre el comportamiento normal y el comportamiento opuesto SetGlobalDirection OUT_A OUT_REV direcci n opuesta SetGlobalDirection OUT_A OUT_FWD direcci n normal SetMaxPower salidas potencia Funci n RCX2 Scout Spy Establece el valor m ximo de potencia permitido para las salidas Potencia puede ser una variable pero debe tener un valor entre OUT_LOW y OUT_FULL SetMaxPower OUT_A OUT_HALF GlobalOutputStatus n Funci n RCX2 Scout Spy Devuelve la configuraci n global de la salida del motor n Se debe tener en cuenta que n tiene que ser 0 1 0 2 no OUT_A OUT_B O OUT_C X GlobalOutputStatus 0 Estado global de OUT_A 3 2 4 Salidas de Spybotics Spybotics tiene dos motores internos OUT_A se refiere al motor derecho y OUT_B al izquierdo OUT_C enviar rdenes VLL por medio del LED trasero el que se utiliza para las comunicaciones con el ordenado
14. E Eaa 22 3 2 2 Otras FUNCIONES e a A Ea a E O A TS 23 3 2 3 Control Global RCX2 Scout oocccccncnonnnunocccncnnonononanicicicnnonononanininos 24 3 2 4 Salidas de PUDO MOS titan 25 O AA o a a a a E E a N a S 25 34 Display LED ROX serene didas 26 A ES 2T SN Mensajes RCX SCout aro n e a a O E E 27 3 3 2 SOMO REAL SEQUE ii ea A A A E 28 3 5 3 VLL Enlace de luz visible Scout cooconnoooonocnnocnononannannnononnon 30 3 0 Temporizador ui ii ansiada 30 3 7 Contadores RCX2 Scout DVisiiisinii ini italian telas 30 3 8 Control de Acceso RCX2 Scout Spy cooococcoocccooccccooncccnnaccnonnncconnccnonnos 31 3d Eventos RCX2 SCOUT ni A 32 3 9 1 Eventos del RCX2 RCX2 Pravia ansiada resis 32 3 9 2 Eventos del Scout SOU Erotico aiaia 36 LOS Re sistro d datos RCA a n a 37 Jl Caracter sticas generales ii doit 38 3 12 Caracter sticas espec ficas del RCX oooonccccnoccccconcccoonccononnccnnncnccnnaconnnos 39 3 13 Caracter sticas especificas del Scout siria 39 3 14 Caracter sticas espec ficas del CyberMaster ooooconnnccccnoncccnoncccnoncninnnos 40 Detalles T CHICOS 2 A AA E AT a 43 4l E e A ON 43 4 2 Puentes de datos isis ae sE E E EE 44 P gina i Gu a del programador de NQC 1 Introducci n NQC significa Not Quite C No Completamente C y es un lenguaje sencillo para programar varios productos LEGO MINDSTORMS Algunas de las caracter sticas de NQC dependen del producto MINDSTORMS que se utilice
15. Gu a del programador de NQC Versi n 2 5 a4 por Dave Baum ndice T is AAA i a A n i o E 1 2e O a meen e a e a a a a a i 1 A RA E EEN 1 2 LL COmMent a ec SS 1 22 Esp cio en DIO is ii iio 1 Za Gonstantes OMC aa a E E R 2 2 1 4 Identificadores y palabras reservadaS ooooonoocccnoncccnoncnononcconancnnnnnannnno 2 2 2 Estt ctuta del programa susto 2 22l Tarea a A a E A E E A A A RRRS 2 2 2 2a PUNON S A A A E A a 3 2 2 3 SUbr NAS ul ESEA ia 6 224 Eat a E E EE E EA 6 D2 MAS otra e E Snai 7 PA A a ae a R R E a 8 23st Declaraci n de vana ade 8 RO ASTENACI a E a ii diia 8 230 Estructuras de Controla n a eiin a ii 9 2 3 4 Control de acceso Y eventos coincide atea id aseos 12 2 3 3 Otras IMStrue ciones serias 13 24 EXPTESIONES unida tii Ra 14 ZA T A TE T SaS 15 2 37 El preprocesador ese na eaa a a E A E 16 2 Anden a ra E E iE E E E R E R 16 A A e A a a E OTS 16 2 5 3 Compilaci n condicional ooooonnncccnnncccnoncccnoncnonnnanononcnonnncconnnnnonnnanos 16 2 5 4 Inicializaci n del Progr 16 2 5 5 Almacenamiento de reserva AA 17 3 DIA ts la do 18 3A OOOO ii A Ad E a 18 3 1 1 Tipos y modos RCX CyberMasteT oooonoconocccoocncooncooncnoncnnnncnnnncnnncnns 18 3 1 2 Informaci n del Sens a da io 20 3 1 3 Sensor de luz del Scout Scout tandil risas 21 3 1 4 Sensores del Spybotics Spy sessssssssessessseseseeessseesseesseesseesseeesseee 22 SA AAA II e a e a i a e 22 Llao Funciones Das e e a A A
16. acter sticas descritas a continuaci n son utilizadas principalmente en la creaci n del archivo API de NQC 4 1 La instrucci n asm La instrucci n asm es utilizada para definir la mayor a de las llamadas a la API de NQC La sintaxis de esta instrucci n es asm teml tem2 temN donde tem es uno de los siguientes expresi n_constante sexpresi n sexpresi n restricci n La instrucci n emite simplemente el valor de cada uno de los tem como bytecodes raw los 8 bits menores del valor constante Por ejemplo el archivo API define la siguiente funci n Void ClearMessage fasm 0x90 Cuando ClearMessage es llamado por un programa el valor 0x90 se emite como un bytecode Muchas funciones API toman argumentos y estos argumentos deben ser codificados en una direcci n apropiada para el int rprete de bytecode En el caso m s general una direcci n contiene el c digo fuente seguido de un valor de dos bytes de menor importancia el primer byte Los c digos fuentes est n explicados en la documentaci n del SDK disponible de LEGO Sin embargo es deseable codificar el valor de otro modo por ejemplo utilizar s lo un valor de un solo byte despu s del c digo fuente omitir el c digo fuente o permitir usar s lo ciertas fuentes Una restricci n puede ser usada para controlar c mo est formada la direcci n Una restricci n es un valor constante de 32 bit Los 24 bits menores forman una m scara ind
17. aleatorios tambi n pueden ser almacenados pero en este caso NQC primero asignar el valor a una variable y luego la almacenar Los valores podr n ser fielmente almacenados en el datalog pero el origen del dato quedar desvirtuado AddToDatalog Timer 0 A adir temporizador 0 al registro de datos AddToDatalog x A adir variable x AddToDatalog 7 A adir 7 se ver como una variable El RCX no puede leer por s solo los valores del registro de datos El registro de datos debe ser transferido a un ordenador Las especificidades de la transferencia del registro de datos depende del medio en el cual se est utilizando NQC Por ejemplo en la l nea de comandos de NQC los siguientes comandos transferir n y imprimir n el registro de datos nqc datalog nqc datalog_full CreateDatalog tama o Funci n RCX Crea un registro de datos del tama o especificado que debe ser constante Un tama o de 0 elimina el anterior sin crear uno nuevo CreateDatalog 100 registro de datos de 100 puntos P gina 37 Gu a del programador de NQC AddToDatalog valor Funci n RCX A ade el valor que puede ser una expresi n al registro de datos Si el registro de datos est lleno la llamada no tiene efecto AddToDatalog x UploadDatalog comienzo contador Funci n RCX Inicia y transmite un n mero de datos igual a contador comenzando por el valor de comienzo Este comando no es muy til ya qu
18. ble no necesita ser global hacer que sea lo m s local posible Esto da al compilador la m xima flexibilidad al asignar una posici n de almacenamiento concreta El n mero de variables locales y globales var a seg n el destino Demo Joma C CON C EA CON CTO ECOS CO 2 2 5 Matrices Los destinos RCX2 y Spybotics soportan matrices los otros destinos no tienen soporte apropiado para matrices en el firmware Las matrices se declaran de la misma forma que las variables normales pero con el tama o de la matriz encerrado entre corchetes El tama o debe ser una constante int mi_zmatriz 3 declara una matriz de tres elementos P gina 7 Gu a del programador de NQC Los elementos de una matriz se identifican por su posici n dentro de la matriz llamada ndice El primer elemento tiene un ndice O el segundo 1 etc Por ejemplo mi1_matriz 0 123 establece el primer elemento en 123 mi_matriz 1 mi_matriz 2 copia el tercero en el segundo Actualmente hay una serie de limitaciones en el uso de matrices Es probable que dichas limitaciones se supriman en las futuras versiones de NQC e Una matriz no puede ser el argumento de una funci n Sin embargo se puede pasar a una funci n un elemento individual de la matriz e Ni las matrices si sus elementos pueden utilizarse con los operadores de aumento o disminuci n e S lo se permite la asignaci n normal para los elementos de la matr
19. bles locales se considera un bloque una instrucci n compuesta un grupo de instrucciones incluidas entre dos llaves RON y gt int x x es global task main int y y es local de la tarea main x y ok P gina 6 Gu a del programador de NQC comienza la instrucci n compuesta Int Zy z local declarada y Z ok y zZ error aqu no est definida z task foo x 1 ok y 2 error y no es global En muchos casos NQC debe asignar una o m s variables temporales para su propio uso En algunos casos se utiliza una variable temporal para alojar un valor intermedio durante un c lculo En otros casos se utiliza para guardar un valor al ser pasado a funci n Estas variables temporales reducen la reserva de variables disponibles para el resto del programa NQC intenta ser lo m s eficiente posible con las variables temporales incluso reutiliz ndolas siempre que sea posible El RCX y otros destinos proporcionan varias posiciones de almacenamiento que se pueden usar para alojar variables en un programa NQC Hay dos tipos de posiciones de almacenamiento globales y locales Cuando compila un programa NQC asigna cada variable a un lugar espec fico de almacenamiento Los programadores generalmente pueden ignorar los detalles de esta asignaci n siguiendo dos reglas b sicas e Si una variable necesita estar en posici n global se declara como variable global e Si una varia
20. cquire recursos cuerpo acquire recursos cuerpo catch handler donde recursos es una constante que especifica los recursos que hay que obtener y cuerpo y handler son instrucciones El NQC API define las constantes para los recursos individuales que se pueden sumar para solicitar m ltiples recursos a la vez El comportamiento de la instrucci n acquire es el siguiente solicitar la posesi n de los recursos especificados Si otra tarea de prioridad superior ya posee los recursos entonces la solicitud no ser aceptada y la ejecuci n saltar al handler si existe En caso contrario la petici n ser aceptada y el cuerpo empezar a ejecutarse Mientras se ejecuta el cuerpo si una tarea de prioridad igual o superior solicita alguno de los recursos la tarea original perder su posesi n Cuando se pierde la posesi n la ejecuci n salta al handler si existe Una vez que el cuerpo se ha completado se devuelven los recursos al sistema para que puedan adquirirlos tareas de prioridad m s baja Si no se especifica un handler tanto si la petici n no es aceptada como d lo es con su consecuente p rdida una vez ejecutado el cuerpo el control pasa a la instrucci n que sigue a la instrucci n acquire Por ejemplo el siguiente c digo adquiere un recurso 10 segundos haciendo sonar un sonido si no se completa con xito acquire ACQUIRE_OUT_A Wait 1000 catch PlaySound SOUND_UP La monitorizaci n de eventos se implementa c
21. debe ir encerrado entre comillas No hay noci n en el sistema de una ruta de inclusi n de modo que encerrar un archivo en par ntesis angular est prohibido tinclude foo nqh ok tinclude lt foo ngh gt error 2 5 2 define El comando tdefine se usa para una sustituci n de macro sencilla La redefinici n de macro es un error al rev s que en C donde es un aviso Las macros se terminan normalmente por el final de l nea pero puede escribirse la nueva l nea con EN para permitir macros multil nea define foo x do bar x baz x while false La directiva funde f se puede usar para retirar una definici n de macro 2 5 3 Compilaci n condicional La compilaci n condicional funciona de forma parecida al preprocesador C Se pueden usar las siguientes directivas de preprocesador if condici n ifdef symbol ifndef symbol else elif condici n endif La condiciones en las directivas if usan los mismos operadores y prioridad que en C Se soporta el operador defined 2 5 4 Inicializaci n del programa Al principio del programa el preprocesador inserta una llamada a una funci n de inicializaci n especial _init Esta funci n por defecto es parte del RCX API y pone las tres salidas a plena potencia en direcci n hacia delante todav a desconectadas la funci n de inicializaci n se puede desactivar usando la directiva tpragma noinit pragma noinit no hacer ninguna inicial
22. dentro del programa se dispone de otras funciones que hacen que trabajar con salidas sea m s f cil Debe tenerse en cuenta que estos comandos no a aden ninguna nueva funcionalidad a la de los comandos SetOutput y SetDirection S lo son interesantes para hacer el programa m s conciso On salidas Funci n Todos Establece las salidas especificadas como encendidas Salida es uno o m s de los valores OUT_A OUT_B y OUT_C On OUT_A OUT_C Enciende las salidas A y C Off salidas Funci n Todos Establece las salidas especificadas como apagadas Salida es uno o m s de los valores OUT_A OUT_B y OUT_C Off OUT_A Apaga la salida A P gina 23 Gu a del programador de NQC Float salidas Funci n Todos Establece las salidas especificadas como float Salida es uno o m s de los valores OUT_A OUT_B y OUT_C Float OUT_A Detiene la salida A sin frenarla Fwd salidas Funci n Todos Establece el sentido de giro de las salidas especificadas como avance Salida es uno o m s de los valores OUT_A OUT_B y OUT_C Fwd OUT_A Rev salidas Funci n Todos Establece el sentido de giro de las salidas especificadas como retroceso Salida es uno o m s de los valores OUT_A OUT_B y OUT_C Rev OUT_A Toggle salidas Funci n Todos Invierte el sentido de giro de las salidas especificadas Salida es uno o m s de los valores OUT_A OUT_B y OUT_C Toggle OUT_A OnFwd sal
23. do para generar eventos del sensor de luz El valor debe ser especificado en incrementos de 10 ms y puede ser una expresi n SetSensorClickTime x P gina 36 Gu a del programador de NQC SetCounterLimit n valor Funci n Scout Establece el limite para el contador n n debe ser O 1 y valor puede ser una expresi n SetCounterLimit 0 100 Establece el limite del contador 0 en 100 SetTimerLimit n valor Funci n Scout Establece el limite para el temporizador n N debe ser O 1 o 2 y valor puede ser una expresi n SetTimerLimit 1 100 Establece el temporizador 0 en 100 3 10 Registro de datos RCX El RCX contiene un registro de datos que puede ser usado para almacenar valores de los sensores temporizadores variables y del reloj del sistema Antes de a adir datos el registro de datos necesita ser creado por medio del comando CreateDatalog tama o El argumento tama o debe ser una constante y determina cuantos datos pueden ser almacenados CreateDatalog 100 registro de datos de 100 valores Pueden a adirse valores al registro de datos usando AddToDatalog valor Cuando el registro de datos se transmite al ordenador este mostrar ambos el valor y la fuente del valor temporizador variable etc El registro de datos soporta directamente las siguientes fuentes de datos temporizadores valores de sensores variables y el reloj de sistema Otros tipos de datos como constantes o n meros
24. e el ordenador es el que normalmente comienza la transmisi n UploadDatalog 0 100 transmite el registro de los primeros 100 puntos 3 11 Caracter sticas generales Wait tiempo Funci n Todos Hace parar una tarea durante un tiempo especificado en cent simas de segundo El argumento tiempo puede ser una expresi n o una constante Wait 100 Espera durante un segundo Wait Random 100 Espera durante un tiempo aleatorio de hasta 1 segundo StopAllTasks Funci n Todos Detiene todas las tareas que est n ejecut ndose Esto har parar el programa completamente por lo tanto cualquier comando que siga a ste ser ignorado StopAllTasks detiene el programa Random n Valor Todos Devuelve un n mero aleatorio entre O y n n debe ser una constante x Random 10 SetRandomsSeed n Funci n RCX2 Spy Preselecciona el generador de n meros aleatorios con n n puede ser una expresi n SetRandomSeed x preselecciona con el valor de x SetSleepTime minutos Funci n Todos Establece el numero de minutos que debe ser constante que estar activo hasta que se duerma Especificando O minutos deshabilita esta opci n SetSleepTime 5 Dormirse al cabo de 5 minutos SetSleepTime 0 Deshabilita el tiempo para que se duerma P gina 38 Gu a del programador de NQC SleepNow n Funci n Todos Fuerza a que se duerma S lo funciona si el tiempo para que se duer
25. e reserva un n mero potencial de identificadores para uso del propio lenguaje NQC Estas palabras se denominan palabras reservadas y no se pueden usar como identificadores A continuaci n se ofrece la lista completa de palabras reservadas _ event_src res taskid abs nolist _ sensor _ type acquire asm do int sub break else monitor switch Case false repeat task catch for return true const goto sign void continue if start while default inline stop 2 2 Estructura del programa Un programa NQC se compone de bloques de c digo y variables globales Hay tres tipos de bloques de c digo tareas funciones en l nea y subrutinas Cada tipo de bloque de c digo tiene sus propias caracter sticas y restricciones particulares pero todos comparten una estructura com n 2 2 1 Tareas RCX soporta impl citamente multitarea de modo que una tarea en NQC corresponde a una tarea RCX Las tareas se definen por medio de la palabra reservada task utilizando la siguiente sintaxis task nombre el c digo de la tarea s scribe aqu El nombre de la tarea puede ser cualquier identificador legal Un programa debe tener al menos una tarea llamada main que se inicia cada vez que se ejecuta el programa El n mero m ximo de tareas depende del destino RCX soporta 10 tareas CyberMaster 4 y Scout 6 P gina 2 Gu a del programador de NQC El cuerpo de una tarea consiste en una lista de instrucciones Las tareas pueden inicia
26. el espacio O y crea una macro para llamarla x tpragma reserve 0 define x 0 P gina 44
27. el evento donde evento es un n mero de evento constante y l mite puede ser cualquier expresi n SetLowerLimit 2 x establece el l mite inferior para 2 en x LowerLimit Valor RCX2 Spy Devuelve el valor del l mite inferior del n mero de evento especificado x LowerLimit 2 Obtener el l mite inferior del evento 42 SetHysteresis evento valor Valor RCX2 Spy Establece la hist resis del evento donde evento es un n mero de evento constante y valor puede ser cualquier expresi n SetHysteresis 2 x Hysteresis evento Valor RCX2 Spy Devuelve el valor de la hist resis del n mero de evento especificado x Hysteresis 2 SetClickTime evento valor Funci n RCX2 Spy Establece el tiempo de clic para el evento donde evento es un n mero de evento constante y valor puede ser cualquier expresi n El tiempo se especifica en incrementos de 10 ms entonces un segundo tendr el valor de 100 SetClickTime 2 x ClickTime evento Valor RCX2 Spy Devuelve el valor del tiempo de clic para el n mero de evento especificado x ClickTime 2 SetClickCounter evento valor Funci n RCX2 Spy Establece el contador de clic para el evento donde evento es una n mero de evento constante y valor puede ser cualquier expresi n SetClickCounter 2 x P gina 35 Gu a del programador de NQC ClickCounter evento Valor RCX2 Spy Devuelve el valor del contador de clic para el n mero de event
28. ensores salidas temporizadores y comunicaciones Algunas caracter sticas s lo se encuentran en ciertos destinos Siempre que sea necesario el t tulo de la secci n indica a qu destino se aplica El RCX2 re ne todas las caracter sticas del RCX de modo que si se hace referencia al RCX entonces esa caracter stica funciona con el firmware original y con el firmware 2 0 Si se hace referencia al RCX2 la caracter stica s lo se aplica al firmware 2 0 CyberMaster Scout y Spybotics se indican como CM Scout y Spy respectivamente El API consiste en funciones valores y constantes Una funci n es algo que puede ser tambi n denominado instrucci n T picamente emprende alguna acci n o configura alg n argumento Los valores representan alg n argumento o cantidad y se pueden usar en expresiones Las constantes son nombres simb licos para valores que tienen significado especial para el destino A menudo se usa un grupo de constantes junto con una funci n Por ejemplo la funci n PlaySound utiliza un sencillo argumento que determina qu sonido se tocar Las constantes tales como SOUND_UP se definen para cada sonido 3 1 Sensores Hay tres sensores que se numeran internamente 0 1 y 2 Esto podr a prestarse a confusi n ya que en el RCX est n etiquetados externamente como 1 2 y 3 Para mitigar esta confusi n se han definido los nombres de sensor SENSOR_1 SENSOR_2 y SENSOR_3 Estos nombres de sensor se pueden usar en cualquier func
29. evento Valor RCX2 Spy Devuelve el estado del evento dado Los estados son 0 Low bajo 1 Normal 2 High alto 3 Undefined indefinido 4 Start calibrating inicio de calibraci n 5 Calibrating process en proceso de calibraci n X EventState 2 ClearAllEvents CalibrateEvent evento inferior superior hist resis Funci n RCX2 Spy Calibra el evento tomando la lectura actual del sensor y aplic ndole los ratios especificados de inferior superior e hist resis para determinar los l mites y el valor de la hist resis Las f rmulas para la calibraci n dependen del tipo de sensor y est n explicadas en el LEGO SDK La calibraci n no es instant nea EventState puede ser comprobado para determinar cu ndo se ha completado la calibraci n normalmente 50ms CalibrateEvent 2 50 50 20 Until EventState 2 5 esperar a la calibraci n P gina 34 Gu a del programador de NQC SetUpperLimit evento limite Valor RCX2 Spy Establece el l mite superior para el evento donde evento es un n mero de evento constante y l mite puede ser cualquier expresi n SetUpperLimit 2 x establece el l mite superior para 2 en x UpperLimit Valor RCX2 Spy Devuelve el valor del l mite superior del n mero de evento especificado x UpperLimit 2 Obtener el l mite superior del evento 2 SetLowerLimit evento l mite Valor RCX2 Spy Establece el l mite inferior para
30. ferior la fuente ser considerada baja Cuando el valor fuente sea mayor que el l mite superior la fuente ser considerada alta La fuente ser normal cuando est entre los dos l mites El siguiente evento configura el evento 3 para que se dispare cuando el valor del sensor en el puerto 2 est en la gama alta El l mite superior est establecido en 80 y el l mite inferior en 50 Est configuraci n es un ejemplo de como un evento puede dispararse cuando el sensor de luz detecta luz clara SetEvent 3 SENSOR_2 EVENT_TYPE_HIGH SetLowerLimit 3 50 SetUpperLimit 3 80 El argumento hysteresis puede ser usado para hacer que las transiciones sean m s estables en los casos en que la el valor varia Hist resis funciona haciendo que la transici n de baja a normal sea un poco m s amplia que la transici n de normal a baja As hace que sea m s f cil entrar en la gama baja que salir de ella Lo mismo se aplica a la transici n de normal a alta Una transici n de baja a alta y otra vez a baja har disparar el evento EVENT_TYPE_CLICK siempre que la secuencia completa sea m s r pida que el tiempo de clic del evento Si se producen dos clics seguidos y el tiempo entre ellos es inferior al P gina 33 Gu a del programador de NQC tiempo de clic se disparar un evento EVENT_TYPE_DOUBLECLICK El sistema tambi n se mantiene a
31. grupo Funci n Scout Selecciona qu grupo de sonidos del sistema deben ser usados Grupo debe ser una constante SelectSound 3 4 Display LCD RCX El RCX tiene 7 modos diferentes de display como se muestra abajo El predeterminado del RCX es DYSPLAY_WATCH M DISPLAY_WATCH DISPLAY_SENSOR_1 DISPLAY_SENSOR_2 DISPLAY_SENSOR_3 DISPLAY_OUT_A DISPLAY_OUT_B DISPLAY_OUT_C Contenido del LCD Muestra el reloj del sistema Muestra el valor del sensor 1 Muestra la configuraci n de la salida C El RCX2 a ade un octavo modo DISPLAY_USER Este modo lee continuamente un valor fuente y lo muestra en pantalla Puede mostrar un punto decimal en cualquier posici n entre las cifras Esto permite emular el trabajo con fracciones anque todos los valores est n almacenados como enteros Por ejemplo la siguiente funci n har mostrar el valor 1234 mostrando dos cifras despu s del punto decimal haciendo que aparezca 12 34 en el LCD SetUserDisplay 1234 2 El siguiente programa ilustra la actualizaci n del display P gina 26 Gu a del programador de NQC task main ClearTimer 0 SetUserDisplay Timer 0 0 Until false Dado que el modo SetUserDysplay actualiza constantemente el LCD hay algunas restricciones en el c digo fuente Si se usa una variable debe ser asignada a una variable global La mejor manera para asegurarse de que es as es declararla como variable global Tambi n pueden producir
32. guraci n del argumento potencia La potencia puede ser establecida mediante la P gina 22 Gu a del programador de NQC funci n SetPower salida potencia Por defecto los tres motores est n configurados a m xima potencia y giro hacia adelante cuando el programa arranca pero parados SetOutput salidas modo Funci n Todos Establece la salida en el modo especificado Salida es uno o m s de los valores OUT_A OUT_B y OUT_C Modo tiene que ser OUT_ON OUT_OFF o OUT_FLOAT SetOutput OUT_A OUT_B OUT_ON Establece A y B encendidos SetDirection salidas direcci n Funci n Todos Establece la salida en la direcci n especificada Salida es uno o m s de los valores OUT_A OUT_B y OUT_C Direcci n tiene que ser OUT_FWD OUT_REV o OUT_TOGGLE SetDirection OUT_A OUT_REV Hace girar A hacia atr s SetPower salidas potencia Funci n Todos Establece la potencia del motor especificado Potencia puede ser una expresi n cuyo resultado debe ser un valor entre O y 7 Las constantes OUT_LOW OUT_HALF o OUT_FULL tambi n pueden ser usadas SetPower OUT_A OUT_FULL A a m xima potencia SetPower OUT_B x OutputStatus n Valor Todos Devuelve el estado del motor n Tener en cuenta que n debe ser 0 1 o 2 no OUT_A OUT_B o OUT_C x OutputStatus 0 Estado de OUT_A 3 2 2 Otras funciones Dado que el control de las salidas es un caracter stica de uso frecuente
33. i n que requiera un sensor como argumento Adem s se pueden usar los nombres siempre que un programa desee leer el valor actual de un sensor x SENSOR_1 leer el sensor y almacenar el valor en x 3 1 1 Tipos y modos RCX CyberMaster Los puertos de sensor en el RCX tienen capacidad de soportar una gran variedad de sensores otros destinos no soportan tipos de sensor configurables Es funci n del programa decirle al RCX qu clase de sensor est conectado en cada puerto Se puede configurar el tipo de sensor por medio de SetSensorType Hay cuatro tipos de sensores y cada cual corresponde a un sensor espec fico de LEGO Se puede usar un quinto tipo SENSOR_TYPE_NONE para leer los valores puros de los sensores gen ricos pasivos En general un programa deber a configurar el tipo para que encaje con el sensor real Si un puerto de sensor se configura con el tipo incorrecto el RCX puede no ser capaz de leerlo correctamente Significado SENSOR TYPE NONE SENSOR TYPE TEMPERATURE P gina 18 Gu a del programador de NQC El RCX CyberMaster y Spybotics permiten que se configure un sensor en modos diferentes El modo de sensor determina c mo se procesa el valor puro de un sensor Algunos modos s lo tienen sentido para cierto tipo de sensores por ejemplo SENSOR_MODE_ROTATION s lo es til con sensores de rotaci n El modo de sensor se puede establecer por medio de SetSensorMode A continuaci n se muestran los posibles modo
34. icando qu fuentes son v lidas el bit O debe ser establecido para permitir la fuente 0 etc Los 8 bits superiores incluyen el formato de los flags para la direcci n Debe tenerse en cuenta que cuando no se especifica una restricci n es lo mismo que usar el restrictor 0 ninguna restricci n en la fuente y el formato de la fuente seguido de un valor de dos bytes El archivo API define las siguientes constantes que pueden ser usadas para usar restrictores define ASM_SMALL_ VALUE 0x01000000 tdefine __ASM _NO_TYPE 0x02000000 tdefine __ASM _NO_LOCAL 0x04000000 Hif _ RCX 2 no restriction P gina 43 Gu a del programador de NQC define ASM_SRC_BASIC 0 define __ASM_SRC_EXT 0 define __ASM_SRC_BASIC 0x000005 define __ASM_SRC_EXT 0x000015 endif El flag __ASM_SMALL_ VALUE indica que el valor de un byte debe ser usado en vez de un valor de dos bytes El flag __ASM_NO_TYPE indica que el c digo fuente debe ser omitido El flag _ ASM_NO_LOCAL especifica que las variables locales no son una fuente legal para la expresi n Debe tenerse en cuenta que el firmware de RCX2 es menos restrictivo que los otros int rpretes por lo que la definici n de __ ASM_SRC_BASIC y __ASM_SRC_EXT son menos estrictas en el caso del RCX2 El archivo de definici n de API para NQC contiene numerosos ejemplos del uso de restrictores dentro de una instrucci n ASM Si est usando una versi n de l nea de coma
35. idas Funci n Todos Establece el sentido de giro de las salidas especificadas como avance y las pone en marcha Salida es uno o m s de los valores OUT_A OUT_B y OUT_C OnFwd OUT_A OnRev salidas Funci n Todos Establece el sentido de giro de las salidas especificadas como retroceso y las pone en marcha Salida es uno o m s de los valores OUT_A OUT_B y OUT_C OnRev OUT_A OnFor salidas tiempo Funci n Todos Pone en marcha las salidas especificadas por un determinado tiempo y a continuaci n las detiene Salida es uno o m s de los valores OUT_A OUT_B y OUT_C Tiempo se mide en incrementos de 10ms one second 100 y puede ser una expresi n OnFor OUT_A x 3 2 3 Control Global RCX2 Scout SetGlobalOutput salidas modo Funci n RCX2 Scout Spy Desactiva o vuelve a activar las salidas dependiendo del argumento modo Si modo es OUT_OFF entonces las salidas se apagar n y se desactivar n Mientras est n desactivadas cualquier llamada a SetOutput incluyendo funciones tales como On ser n ignoradas Si se utiliza el modo OUT_FLOAT las salidas estar n establecidas en el modo float antes de desactivarlas Las salidas pueden volver a ser activadas llamando P gina 24 Gu a del programador de NQC SetGlobal0utput y modo OUT_ON Debe tenerse en cuenta que activar una salida no la enciende inmediatamente s lo permite posteriores llamadas a SetOutput SetGlobalO0utput OUT_
36. ignar a y el valor 20 2 4 1 Condiciones Las condiciones se forman generalmente comparando dos expresiones Hay tambi n dos expresiones constantes true y false que siempre dan como valor de evaluaci n verdadero o falso respectivamente Se puede negar una condici n con el operador de negaci n o combinar dos condiciones con los operadores AND u OR la tabla siguiente resume los diferentes tipos de condiciones Condici n exprl lt expr2 Verdad si exprl es menor o igual a expr2 exprl gt expr2 Verdad si exprl es mayor que expr2 exprl gt expr2 Verdad si exprl es mayor o igual a expr2 condici n Negaci n l gica de una condici n verdadero si la condici n es falsa cond amp amp cond2 AND l gico de dos condiciones verdadero si y s lo si ambas condiciones son verdad cond1 I cond2 OR l gico de dos condiciones verdad si y s lo si al menos una es verdad P gina 15 Gu a del programador de NQC 2 5 El preprocesador El preprocesador implementa las siguientes directrices tinclude define tifdef ifndef if telif else tendif undef Su implementaci n est muy pr xima a un preprocesador C est ndar de modo que h mayor parte de las cosas que funcionan en un preprocesador C gen rico deber an tener el efecto esperado en NQC Abajo aparece una lista de desviaciones significativas 2 5 1 Finclude El comando tinclude funciona como era de esperar con la salvedad de que el nombre del archivo
37. ites es el margen de hist resis Lo mismo sucede para la transici n entre normal y oscuro SetSensorLowerLimit valor Funci n Scout Establece el valor inferior de la luz del sensor El valor puede ser una expresi n SetSensorLowerLimit 100 SetSensorUpperLimit valor Funci n Scout Establece el valor superior de la luz del sensor El valor puede ser una expresi n SetSensorUpperLimit 900 SetSensorHysteresis valor Funci n Scout Establece la hist resis del sensor de luz El valor puede ser una expresi n SetSensorHysteresis 20 P gina 21 Gu a del programador de NQC CalibrateSensor Funci n Scout Lee el valor del sensor de luz despu s establece los l mites superior e inferior en un 12 5 por encima o por debajo de la lectura actual y establece una hist resis de un 3 12 del valor de la lectura CalibrateSensor 3 1 4 Sensores del Spybotics Spy Spybotics utiliza sensores empotrados en lugar de sensors conectados externamente El sensor de contacto que se encuentra en la parte frontal del ladrillo Spybotics es el SENSOR_1 Est normalmente configurado en modo porcentual su valor es O cuando no est presionado y 100 cuando s lo est SENSOR_2 es el sensor de luz el conector en la parte trasera del ladrillo que se usa para comunicarse con el ordenador Est normalmente configurado en modo porcentual valores altos indicar n luz brillante 3 2 Salidas 3 2 1 Funciones b
38. iz No se permiten las asignaciones matem ticas e Los valores iniciales de los elementos de una matriz no se pueden especificar Se requiere que una asignaci n expl cita dentro del mismo programa que establezca el valor de un elemento 2 3 Instrucciones El cuerpo de un bloque de c digo tarea funci n o subrutina se compone de instrucciones Las instrucciones se terminan con un punto y coma 2 3 1 Declaraci n de variables La declaraci n de variables como se ha descrito en la secci n anterior es un tipo de instrucci n Una variable se declara como local con inicializaci n opcional cuando ha de ser utilizada dentro de un bloque de c digo La sintaxis para una declaraci n de variable es int variables donde variables es una lista de nombres separados por comas con valores iniciales opcionales nombre expresi n Las matrices de variables tambi n se pueden declarar s lo para RCX2 int matriz tama ol 2 3 2 Asignaci n Una vez declaradas las variables se les puede asignar el valor de una expresi n Variable operador_de asignaci n expresi n 66 99 Hay nueve operadores de asignaci n El operador m s b sico E simplemente asigna el valor de la expresi n a la variable Los otros operadores modifican de alguna forma el valor de la variable en los modos en que se muestra en la tabla siguiente P gina 8 Gu a del programador de NQC Desplaza a al izquierda la variable en u
39. izaci n de programa P gina 16 Gu a del programador de NQC La funci n de inicializaci n por defecto se puede reemplazar por una funci n diferente usando la directiva tpragma init pragma init funci n usar inicializaci n de usuario 2 5 5 Almacenamiento de reserva El compilador NQC asigna autom ticamente variables a posiciones de almacenamiento Sin embargo a veces es necesario impedir que el compilador use ciertas posiciones de almacenamiento Esto se puede hacer por medio de la directiva tpragma reserve tpragma reserve inicio tpragma reserve inicio fin Esta directiva hace que el compilador ignore una o m s posiciones de almacenamiento durante la asignaci n de variables Inicio y fin deben ser n meros que se refieran a posiciones de almacenamiento v lidas Si s lo se proporciona un inicio entonces se reserva una nica posici n Si se especifican ambos inicio y fin entonces se reserva la gama de posiciones de principio a fin inclusive El uso m s com n de esta directiva es para reservar las posiciones O 1 y 2 al usar contadores para RCX2 Esto es por que los contadores del RCX2 se solapan con las posiciones de almacenamiento 0 1 y 2 Por ejemplo si se fuesen a utilizar los tres contadores pragma reserve 0 1 2 P gina 17 Gu a del programador de NQC 3 NQC API El NQC API define un grupo de constantes funciones valores y macros que proporcionan acceso a varias Capacidades del destino como s
40. jes Esto facilita la detecci n de un mensaje recibido ya que entonces el programa puede esperar a que Message no sea cero ClearMessage Borra los mensajes recibidos until Message gt 0 Esperar al siguiente mensaje SendMessage mensaje Funci n RCX Scout Env a un mensaje por infrarrojos Mensaje puede ser una expresi n pero el RCX s lo puede enviar mensajes con un valor entre O y 255 por lo tanto s lo los 8 bits menores del argumento ser n usados SendMessage 3 enviar mensaje 3 SendMessage 259 otra manera de enviar el mensaje3 SetTxPower potencia Funci n RCX Scout Establece la potencia para la transmisi n por infrarrojos Potencia tiene que ser una de estas constantes TX_POWER_LO O TX_POWER_H 3 5 2 Serie RCX2 Scout El RCX2 puede transmitir datos serie por el puerto de infrarrojos Antes de enviar datos la configuraci n de la comunicaci n y de los paquetes tiene que ser especificada Entonces para cada transmisi n los datos deben ser colocados en el buffer de transmisi n y entonces usar la funci n SendSerial para enviarlos La configuraci n de comunicaci n es establecida mediante SetSerialComm y determina c mo son enviados los bits mediante el puerto de infrarrojos Los valores posibles se muestran a continuaci n SERIAL_COMM_DEFAULT Configuraci n predeterminada SERIAL_COMM_4800 4800 baudios SERIAL_COMM_DUTY25 25 duty cycle SERIAL COMM_16 MZ P
41. l nivel de potencia especificado Si la potencia es negativa el motor girar en sentido inverso Equivale al siguiente c digo SetPower OUT_L abs power0 SetPower OUT_R abs powerl if power0 lt 0 SetDirection OUT_L OUT_REV else SetDirection OUT_L OUT_FWD f power1 lt 0 H SetDirection OUT_R OUT_REV else P gina 40 Gu a del programador de NQC SetDirection OUT_R OUT_FWD SetOutput OUT_L O0UT_R OUT_ON OnWait motor n tiempo Funci n CyberMaster Enciende los motores especificados todos a la misma potencia y entonces espera durante el tiempo dado El tiempo se da en d cimas de segundo con un m ximo de 255 25 5 segundos Equivale al siguiente c digo SetPower motores abs power if power lt 0 SetDirection motores OUT_REV else SetDirection motores OUT_FEWD SetOutput motores OUT_ON Wait tiempo 10 OnWaitDifferent motores n0 n1 n2 tiempo Funci n CyberMaster Como OnWait excepto que se pueden dar diferentes potencias para cada motor ClearTachoCounter motores Funci n CyberMaster Pone a cero el tac metro del motor especificado TachoCount n Valor CyberMaster Devuelve el valor del tac metro del motor especificado TachoSpeed n Valor CyberMaster Devuelve el valor de la velocidad del tac metro del motor especificado La velocidad es casi constante para un
42. l tanto del n mero total de clics para cada evento Message es usado como la fuente de un evento Este evento se disparar cuando un nuevo mensaje llegue incluso si su valor es el mismo que el del mensaje anterior El ultimo tipo de evento EVENT_TYPE_MESSAGE s lo es valido cuando Monitorizar instrucciones y algunas funciones API como ActiveEvents O Event requiere manipular m ltiples eventos Esto se hace convirtiendo cada n mero de evento en una m scara de evento y entonces combinando las m scaras con una OR bit a bit La macro EVENT_MASK evento Convierte un n mero de evento en una m scara Por ejemplo para mostrar los eventos 2 y 3 puede utilizarse la siguiente instrucci n monitor EVENT_MASK 2 EVENT_MASK 3 SetEvent evento fuente tipo Funci n RCX2 Spy Configura un evento un n mero entre O y 15 para usar la fuente y el tipo especificado Ambos eventos y tipos tienen que ser constantes y fuente debe ser la expresi n de una fuente que se quiere utilizar SetEvent 2 Timer 0 EVENT_TYPE_HIGH ClearEvent evento Valor RCX2 Spy Borra la configuraci n del evento especificado Esto permite que no se dispare hasta que sea otra vez configurado ClearEvent 2 borrar evento 2 ClearAllEvents Valor RCX2 Spy Borra la configuraci n de todos los eventos ClearAllEvents EventState
43. ma no es cero SleepNow lr a dormir 3 12 Caracter sticas espec ficas del RCX Program Valor RCX N mero del programa que est seleccionado x Program SelectProgram n Funci n RCX2 Selecciona el programa especificado para que comience a ejecutarse Hay que tener en cuenta que los programas est n numerados del O al 4 no de 1 a 5 como se muestra en el LCD SelectProgram 3 BatteryLevel Valor RCX2 Devuelve el nivel de bater a en milivolts x BatterylLevel l FirmwareVersion Valor RCX2 Devuelve la versi n del firmware como un entero Por ejemplo la versi n 3 2 6 es 326 x FirmwareVersion Watch Valor RCX Devuelve el valor del reloj del sistema en minutos x Watch SetWatch horas minutos Funci n RCX Establece en el reloj de sistema un n mero espec fico de horas y minutos Horas debe ser un n mero constante entre O y 23 ambos incluidos Minutos debe ser una constante entre O y 59 ambos incluidos SetWatch 3 15 Establec l reloj en 3 15 3 13 Caracter sticas espec ficas del Scout SetScoutRules movimiento tacto luz tiempo fx Funci n Scout Establece las reglas usadas por el Scout en el modo stand alone P gina 39 Gu a del programador de NQC ScoutRules n Valor Scout Devuelve el valor de la configuraci n de una de las reglas n debe ser un n mero constante entre O y 4 x ScoutRules 1 Obtener la
44. motor en vac o a cualquier velocidad con un valor m ximo de 90 este ser menor conforme las bater as pierden potencia El valor disminuye conforme la carga en el motor aumenta Un valor de O indica que el motor est bloqueado ExternalMotorRuming Valor CyberMaster Esto es en realidad la medida del estado actual del motor Los valores devueltos tienden a fluctuar un poco pero en general son los siguientes para un motor sin carga 0 el motor est en floating 1 el motor est apagado lt 7 el motor gira alrededor de ese nivel de potencia Aqu es donde el valor fluct a m s En cualquier caso debe saber qu nivel de potencia ha establecido en el motor El valor incrementa conforme la carga en el motor aumenta y un valor entre 260 y 300 indica que el motor est bloqueado P gina 41 Gu a del programador de NQC AGCO Valor CyberMaster Devuelve el valor del AGC control autom tico de ganancia en el receptor de radiofrecuencia Esto puede ser usado para dar una medida de la distancia un poco inexacta entre el CyberMaster y el transmisor de radiofrecuencia x AGC P gina 42 Gu a del programador de NQC 4 Detalles t cnicos Esta secci n explica algunas de las caracter sticas de bajo nivel de NQC En general estos mecanismos deben ser usados solamente como ltimo recurso ya que pueden cambiar en las futuras versiones La mayor a de los programadores nunca necesitar n utilizar estas car
45. muy poco control del rango de valor de las constantes de modo que usar un valor m s grande de lo esperado puede tener efectos inusuales Se predefinen dos valores especiales true y false El valor de false es cero mientras que s lo se garantiza que el valor de true es no cero Son v lidos los mismos valores para operadores relacionales lt cuando la relaci n es falsa d valor es cero en cualquier otro caso el valor es no cero Se pueden combinar los valores utilizando operadores Varios de los operadores s lo se pueden usar al evaluar expresiones constantes lo que significa que sus operandos deben ser bien constantes bien expresiones que no impliquen nada excepto constantes Se presenta una lista de operadores en orden de prioridad m s alta a m s baja P gina 14 Gu a del programador de NQC Asociatividad Ejemplo abs Valor absoluto n a abs x sign Signo de operando sign x Izquierda So variables Menos unario Derecha Negaci n bitwise unario Derecha S lo constantes Negaci n l gica Derecha 1 Multiplicaci n Izquierda divisi n modulo lt lt gt gt Desplazamiento a derecha e Izquierda La medida del izquierda desplazamiento ha de ser constante lt gt 1 lt gt Operadores relacionales DIS COTTON TEN Forges reienda Se pueden usar par ntesis donde sea necesario para cambiar el orden de evaluaci n x Il 2 3 4 asignar a x el valor 14 K Il 243754 as
46. na cantidad constante A AND bit a bit de la expresi n y la variable Algunos ejemplos x 2 asigna a x el valor 2 y 7 asigna a y el valor 7 X y x es 9 y es todav a 7 2 3 3 Estructuras de control La estructura de control m s sencilla es una instrucci n compuesta Esto es una lista de instrucciones encerradas entre llaves y x 1 y 2 Aunque puede no parecer muy significativo juega un papel crucial al construir estructuras de control m s complicadas Muchas estructuras de control requieren una instrucci n sencilla como cuerpo Usando una instrucci n compuesta la misma estructura de control se puede usar para controlar m ltiples instrucciones La instrucci n if eval a una condici n Si la condici n es verdadera ejecuta una instrucci n la consecuencia Una segunda instrucci n opcional la alternativa se ejecuta si la condici n es falsa A continuaci n se muestran las dos sintaxis posibles para una instrucci n if if condici n consecuencia if condici n consecuencia else alternativa Obs rvese que la condici n va encerrada entre par ntesis V anse los ejemplos a continuaci n En el ltimo ejemplo se utiliza una instrucci n compuesta para permitir que se ejecuten dos instrucciones como consecuencia de la condici n if x 1 y 2 if x 1 y 3 lse y 4 if x 1 y 1 z 2 P gina 9 Gu a del programador de NQC La instrucci
47. ndos de NQC puede editar el archivo API tecleando el siguiente comando ngc api 4 2 Fuentes de datos Los int rpretes del bytecode usan diferentes fuentes de datos para representar diferentes tipos de datos constantes variables n meros aleatorios valores de sensores etc Las fuentes espec ficas dependen de que tipo de dispositivo se est usando y est n descritas en la documentaci n del SDK de LEGO NQC ofrece un operador especial para representar una fuente de datos constant El valor de esta expresi n es la fuente de datos descrita por la constante Los 16 bits de la constante representan el valor de los datos y los siguientes 8 bits son el c digo fuente Por ejemplo el c digo fuente para un n mero aleatorio es 4 por lo tanto la expresi n para un n mero aleatorio entre O y 9 ser a 0x40009 El archivo API de NQC define un n mero de macros que usan el operador transparente para el programador Por ejemplo en el caso de n meros aleatorios defineRandom n 0x40000 n Advi rtase que desde que la fuente O es un espacio de variable global las posiciones de memoria global pueden ser referenciadas de modo num rico 20 se refiere a la posici n O Si por alguna raz n necesita tener un control sobre d nde se almacenan las variables entonces debe usar pragma reserve para ordenar a NQC que no use stas y entonces acceder manualmente con el operador 2 Por ejemplo el siguiente c digo reserva
48. o especificado x ClickCounter 2 3 9 2 Eventos del Scout Scout El Scout ofrece 15 eventos cada uno de los cuales tiene un significado predefinido como se muestra en la tabla inferior EVENT RELEASED EVENT LIGHT HIGH EVENT LIGHT LOW EVENT LIGHT DOUBLECIICK EVENT TIMER I EVENT TIMER 2 EVENT MESSAGE Los primeros cuatro eventos se disparan mediante sensores de contacto conectados a los dos puertos de sensores EVENT_LIGHT_HIGH EVENT_LIGHT_NORMAL y EVENT_LIGHT_LOW se disparan cuando el valor del sensor de luz cambia de una gama a otra Las gamas son definidas mediante SetSensorUpperLimit SetSensorLowerLimit yY SetSensorHysteresis que han sido descritos anteriormente EVENT_LIGHT_CLICK Y EVENT_LIGHT_DOUBLECLICK tambi n se disparan mediante el sensor de luz Un clic es la transici n de bajo a alto y de vuelta a bajo dentro de un determinado periodo de tiempo llamado tiempo de clic Cada contador tiene un l mite de contador Cuando el contador supera este l mite EVENT_COUNTER_0 O HEVENT_COUNTER_1 se disparan Los temporizadores tambi n tiene un l mite y generan EVENT_TIMER_0 EVENT_TIMER_1 Y EVENT_TIMER_2 EVENT_MESSAGE se dispara cuando un nuevo mensaje es recibido por el infrarrojos SetSensorClickTime valor Funci n Scout Establece el tiempo de clic utiliza
49. on la instrucci n monitor que tiene una sintaxis muy similar a la instrucci n acquire monitor eventos cuerpo monitor eventos cuerpo handler_list donde handler_list es uno o m s handlers del tipo catch catch_events handler El ltimo handler en una lista de handlers puede omitir la especificaci n del evento catch handler Evento es una constante que determina que eventos deben monitorizarse Para el Scout los eventos est n predefinidos de modo que hay constantes como EVENT_1_PRESSED que pueden ser utilizar como especificaci n de evento Con RCX2 el significado de cada evento es configurado por el programador Hay 16 eventos P gina 12 Gu a del programador de NQC n meros del O al 15 Para especificar un evento en una instrucci n de monitor el n mero de evento debe convertirse en una m scara de evento utilizando la macro EVENT_MASK Las constantes de evento del Scout o m scaras de evento pueden sumarse para especificar m ltiples eventos Pueden combinarse m ltiples m scaras por medio del OR bit a bit La instrucci n monitor ejecuta el cuerpo mientras monitoriza los eventos especificados Si sucede cualquiera de los eventos la ejecuci n salta al primer handler para ese evento un handler sin ninguna especificaci n maneja cualquier evento Si no existe ning n handler de evento para ese evento entonces el control contin a en la instrucci n que sigue a la instrucci n monitor El
50. or defecto est configurado a enviar datos a 2400 baudios usando un duty cycle del 50 en un carrier de 38 kHz Para especificar opciones m ltiples como a 4800 baudios con un duty cycle del 25 se combinan las opciones individuales utilizando OR bit a bit SERIAL_COMM_4800 SERIAL COMM_DUTY25 La configuraci n de los paquetes se establece con SetSerialPacket y controla la manera como se ensamblan los bytes en paquetes Los valores posible se muestran abajo SERIAL PACKET_ DEFAULT Sin formato de paquete s lo los bits de datos SERIAL PACKET PREAMBLE Env a un pre mbulo del paquete SERIAL _PACKET_NEGATED Env a cada byte con su complementario SERIAL_PACKET_CHECKSUM Incluye un checksum para cada paquete SERIAL_PACKET_RCX Formato est ndar del RCX pre mbulo datos negados y checksum P gina 28 Gu a del programador de NQC Se debe tener en cuenta que los paquetes negados siempre incluyen un checksum por lo tanto la opci n SERIAL _PACKET_CHECKSUM s lo tiene significado cuando SERIAL _PACKET_NEGATED no ha sido especificada Igualmente el pre mbulo negados y checksum est n impl citos en SERIAL PACKET_RCX El buffer de transmisi n puede guardar hasta 16 bytes de datos Por ejemplo el siguiente c digo env a dos bytes 0x12 y 0x34 al puerto serie SetSerialComm SERIAL COMM_DEFAULT SetSerialPacket SERIAL PACKET_DEFAULT SetSe
51. r Esto permite a un dispositivo VLL como el Micro_Scout ser utilizado como tercer motor del Spubotics El mismo LED puede ser controlado utilizando las funciones SendVLL Y SetLight 3 3 Sonido PlaySound sonido Funci n Todos Ejecuta uno de los 6 sonidos predeterminados del RCX El argumento sonido tiene que ser una constante excepto en Spybotics que permite utilizar una variable Las siguientes constantes est n predefinidas para ser usadas con la funci n PlaySound SOUND_CLICK SOUND_DOUBLE_BEEP SOUND_DOWN SOUND_UP SOUND_LOW_BEEP SOUND_FAST_UP PlaySound SOUND_CLICK P gina 25 Gu a del programador de NQC Funci n Todos Ejecuta un solo tono de la frecuencia y duraci n especificada El valor de frecuencia es en hercios y puede ser una variable para RCX2 Scout y Spybotics pero tiene que ser una constante para RCX y CyberMaster El valor duraci n es en cent simas de segundo y tiene que ser constante PlayTone frecuencia duraci n PlayTone 440 50 Ejecuta un La de medio segundo MuteSound Funci n RCX2 Scout Spy Hace que se dejen ejecutar todos los sonidos y tonos MuteSound UnmuteSound Funci n RCX2 Scout Spy Devuelve al comportamiento normal de sonidos y tonos UnmuteSound ClearSound Funci n RCX2 Spy Elimina todos los sonidos pendientes de ser ejecutados en el buffer ClearSound SelectSounds
52. r desde la funci n que llama a la funci n llamada Esto quiere decir que el compilador debe asignar una variable temporal que almacene el argumento No hay restricciones en el tipo de valor que puede usarse Sin embargo ya que la funci n trabaja con una copia del argumento en s cualquier cambio que sufra el valor no lo ve la funci n que la llama En el ejemplo de abajo la funci n foo intenta establecer el valor de su argumento en 2 Esto es perfectamente legal pero dado que foo funciona en una copia del argumento original la variable y de la tarea principal no sufrir cambios void foo int x x 2 task main P gina 3 Gu a del programador de NQC int y 1 y es ahora igual a 1 foo y y es todav a igual a 1 El segundo tipo de argumento const int tambi n se pasa por valor pero con la restricci n de que s lo se pueden usar valores constantes es decir n meros Esto es muy importante ya que hay varias funciones RCX que s lo funcionan con argumentos constantes void foo const int x PlaySound x ok x 1 error no puede modificar un argumento task main foo 2 ok foo 4 5 ok expresi n todav a constante foo x error x no es una constante El tercer tipo int s pasa argumentos por referencia en vez de por valor Esto permite que la funci n llamada modifique el valor y haga visibles los cambios en la funci n que llama Sin embargo s lo se pueden u
53. r uno de varios bloques de c digo dependiendo del valor de una expresi n Cada bloque de c digo va precedido por una o m s etiquetas case Cada case debe ser una constante nica dentro de la instrucci n switch La instrucci n switch eval a la expresi n y a continuaci n busca una etiqueta case que cumpla la condici n Entonces ejecutar cualquier instrucci n que siga a dicho case hasta que se encuentre una instrucci n break O hasta que llegue al final del switch Tambi n se puede usar una nica etiqueta default que se asociar a cualquier valor que no aparezca en la etiqueta case T cnicamente una instrucci n switch tiene la siguiente sintaxis P gina 10 Gu a del programador de NQC switch expresion cuerpo Las etiquetas case y default no son instrucciones en s mismas sino que son etiquetas que preceden a las instrucciones M ltiples etiquetas pueden preceder a la misma instrucci n Estas etiquetas tienen la siguiente sintaxis case expresi n constante default Una t pica instrucci n switch tendr a este aspecto switch x case 1 haz algo cuando x es 1 break case 2 case 3 haz otra cosa cuando x es 2 3 break default haz esto cuando x no es 1 2 ni 3 break La instruci n goto fuerza al programa a saltar a una posici n determinada Las instrucciones de un programa pueden ser marcadas precediendolas de un identificador y dos puntos Una instrucci n goto especifica la etiqueta a la
54. recursos en una declaraci n acquire Debe tenerse en cuenta que la definici n de los recursos s lo est disponible en el RCX2 Constan ACQUIRE_OUT_A ACQUIRE_OUT_B ACQUIRE_OUT_C ACQUIRE SOUND ACQUIRE_LED LEDs s lo Spybotics ACQUIRE_USER_1 ACQUIRE_USER_2 ACQUIRE_USER_3 ACQUIRE_USER_4 SetPriority p Funci n RCX2 Scout Spy Establece la prioridad de una funci n a p que debe ser constante RCX2 soporta prioridades 0 255 mientras el Scout soporta prioridades 0 7 Debe tenerse en cuenta que a n meros menores prioridad mayor Definidas por el usuario s lo en RCX2 SetPriority 1 P gina 31 Gu a del programador de NQC 3 9 Eventos RCX2 Scout Aunque RCX2 Scout y Spybotics comparten un mecanismo com n de eventos el RCX2 y Spybotics disponen de 16 eventos completamente configurables mientras que el Scout dispone de 15 eventos predefinidos Las nicas funciones comunes estos destinos son los comandos para inspeccionar y forzar eventos ActiveEvents tarea Valor RCX2 Scout Spy Devuelve los eventos que se han producido en una tarea dada x ActiveEvents 0 CurrentEvents Valor RCX2 Scout Spy Devuelve los eventos que se han producido en la tarea actual x CurrentEvents Event eventos Valor RCX2 Scout Spy Activa manualmente un evento Esto puede ser til para probar el tratamiento de eventos de un programa o en otros casos para simular un evento basado en ot
55. riables sencillas que pueden ser incrementadas decrementadas y borradas El Scout dispone de dos contadores O y 1 mientras que el RCX2 y Spybotics disponen de tres 0 1 2 En el caso del RCX2 estos contadores se solapan con direcciones de almacenaje globa 0 2 por lo tanto si van a ser usadas como contadores habr n de ser reservadas con pragma para evitar que NQC las utilice como una variable com n Por ejemplo si se desea utilizar el contador 1 tpragma reserve 1 P gina 30 Gu a del programador de NQC ClearCounter n Funci n RCX2 Scout Spy Pone a cero el contador n n tiene que ser 0 1 para el Scout 0 2 para el RCX2 y Spybotics Clear Counter 1 IncCounter n Funci n RCX2 Scout Spy Incrementa el contador n en 1 n tiene que ser O 1 para el Scout 0 2 para el RCX2 y Spybotics IncCounter 1 DecCounter n Funci n RCX2 Scout Spy Decrementa el contador n en 1 n tiene que ser O 1 para el Scout 0 2 para el RCX2 y Spybotics DecCounter 1 Counter n Funci n RCX2 Scout Spy Devuelve el valor del contador n n tiene que ser O 1 para el Scout 0 2 para el RCX2 y Spybotics x Counter 1 3 8 Control de Acceso RCX2 Scout Spy El control de acceso es implementado principalmente por medio de las declaraciones acquire La funci n SetPriority puede ser usada para establecer la prioridad de una funci n y las siguientes constantes pueden ser usadas para especificar los
56. rialData 0 0x12 SetSerialData 1 0x34 5 SendSerial 0 2 SetSerialComm configuraci n Funci n RCX2 Establece la configuraci n de la comunicaci n que determina de que modo son enviados los bits por el infrarrojos SetSerialComm SERIAL COMM_DEFAULT SetSerialPacket configuraci n Funci n RCX2 Establece la configuraci n de los paquetes que determina de que modo los bytes son ensamblados en paquetes SetSerialPacket SERIAL _PACKET_DEFAULT SetSerialData n valor Funci n RCX2 Coloca un byte de datos en el buffer de transmisi n n es el ndice del byte a establecer 0 15 y valor puede ser una expresi n SetSerialData 3 x establec l byte 3 en x SerialData n Funci n RCX2 Devuelve el valor del byte del buffer de transmisi n no los datos recibidos n tiene que ser una constante entre O y 15 X SerialData 7 lee el byte 7 SendSerial comienzo contador Funci n RCX2 Utiliza el contenido del buffer de transmisi n para construir un paquete y enviarlo por infrarrojos de acuerdo con la configuraci n actual de paquetes y comunicaci n Comienzo y contador son constantes que especifican el primer byte y el n mero de bytes dentro del buffer que se deben enviar SendSerial 0 2 enviar los dos primeros bytes del buffer P gina 29 Gu a del programador de NQC 3 5 3 VLL Enlace de luz visible Scout Send VLL valor Funci n Scout Spy Env a un
57. ros argumentos Debe tenerse en cuenta que la especificaci n de eventos difiere un poco entre el RCX2 y el Scout RCX2 usa la macro EVENT_MASK para computar una m scara de evento mientras que el Scout las tiene predefinidas Event EVENT_MASK 3 Activa un evento en el RCX2 Event EVENT_1_PRESSED Activa un evento en el Scout 3 9 1 Eventos del RCX2 RCX2 Spy Nota Spybotics events appear to be very similar to RCX2 events although very little testing has been done for the NOC API y Spybotics La informaci n siguiente ha sido escrita desde la perspectiva del RCX2 y no ha sido todav a actualizada para Spybotics El RCX2 y Spybotics ofrecen un sistema de eventos extremadamente flexible Hay 16 eventos cada uno de ellos se relaciona con una de las diferentes fuentes de eventos el est mulo que puede hacer disparar el evento y el tipo de evento el criterio para que se dispare Otros argumentos pueden ser especificados dependiendo del tipo de evento Para todas las llamadas desde una funci n un evento se identifica por su n mero de evento una constante entre O y 15 Fuentes de eventos son los sensores temporizadores contadores o el buffer de mensajes Un evento es configurado llamando a SetEvent evento fuente tipo donde evento es un n mero constante 0 15 fuente es la fuente del evento y tipo es uno de los tipos que se muestran a continuaci n algunas combinaciones de fuentes y tipo
58. rse y detenerse utilizando las instrucciones start y stop descritas en la secci n titulada Instrucciones Hay tambi n un comando RCX API stopAllTasks que detiene todas las tareas en funcionamiento en ese momento 2 2 2 Funciones A menudo es til agrupar un conjunto de instrucciones en una sola funci n que puede ser llamada cuando sea necesario NQC soporta funciones con argumentos pero no valores de retorno Las funciones se definen con la siguiente sintaxis void nombre lista_de_ argumentos cuerpo de la funci n La palabra reservada void es consecuencia de la herencia de NQC en C las funciones se especifican con el tipo de datos que devuelven Las funciones que no devuelven datos devuelven voia La devoluci n de datos no est soportada por NQC de modo que todas las funciones se declaran usando la palabra reservada void La lista de argumentos puede estar vac a o puede contener una o m s definiciones de argumento Un argumento se define por su tipo seguido de su nombre Los argumentos m ltiples se separan por comas Todos los valores en RCX se representan como enteros de 16 bits con signo Sin embargo NQC soporta cuatro tipos diferentes de argumentos que corresponden a diferentes restricciones y modos de paso del argumento po Significado Paso por referencia s lo se pueden usar variables const int Paso por referencia la funci n no puede modificar el argumento Los argumentos del tipo int se pasan por valo
59. s Advi rtase que ya que CyberMaster no soporta sensores de rotaci n o de temperatura los ltimos tres modos se restringen s lo al RCX Spybotics es todav a m s restrictivo y solo permite los modos raw booleano y porcentual Significado SENSOR_MODE_RAW Valor puro de O a 1023 SENSOR_MODE_BOOL Valor booleano 0 1 S ENSOR_M EN A i N S EN W E N A ENSOR SENSOR_MODE_FAHRENHEIT Grados F s lo RCX SENSOR_MODE_CELSIUS Grados C s lo RCX SENSOR_MODE_ROTATION Rotaci n 16 tics por revoluci n s lo RCX SENSOR_MODE_PERCENT Valor de O a 100 Al usar el RCX es normal poner el tipo y el modo al mismo tiempo La funci n SetSensor hace este proceso un poco m s f cil al proporcionar una nica funci n que llamar y establecer un conjunto de combinaciones tipo modo est ndar SENSOR_TOUCH SENSOR_TYPE_TOUCH SENSOR_MODE_BOOL SENSOR_LIGHT SENSOR_TYPE_LIGHT SENSOR_MODE_ PERCENT SENSOR_ROTATION SENSOR_TYPE_ROTATION SENSOR_MODE_ROTATION SENSOR_CELSIUS SENSOR_TYPE_ TEMPERATURE SENSOR_MODE CELSIUS SENSOR_FAHRENHEIT SENSOR_TYPE_ TEMPERATURE SENSOR_MODE_FAHRENHEIT SENSOR_PULSE SENSOR_TYPE_ TOUCH SENSOR_MODE_PULSE SENSOR_EDGE SENSOR_TYPE_TOUCH SENSOR_MODE_EDGE El RCX proporciona una conversi n booleana para todos los sensores no s lo para los sensores de contacto Esta conversi n booleana se basa normalmente en umbrales preestablecidos para el valor puro Un valor bajo menos de 460
60. s legales e ilegales a la funci n foo void foo int bar const int baz haz algo aqu task main int x declarar variable x foo 1 2 ok foo x 2 ok foo 2 x error segundo argumento no constante foo 2 error numero equivocado de argumentos Las funciones NQC siempre se expanden como funciones en l nea Esto significa que cada llamada a una funci n hace que se incluya en el programa otra copia del c digo de la funci n Si no se usan con sensatez las funciones en l nea hacen que el tama o del c digo sea excesivo P gina 5 Gu a del programador de NQC 2 2 3 Subrutinas A diferencia de las funciones en l nea las subrutinas permiten que se comparta una nica copia de un fragmento c digo entre diferentes funciones llamadoras Esto hace que sean mucho m s eficaces en el uso del espacio que las funciones en l nea pero debido a algunas limitaciones en el interprete de c digo de bytes LEGO las subrutinas tiene algunas restricciones significativas En primer lugar las subrutinas no pueden utilizar ning n argumento Segundo una subrutina no puede llamar a otra subrutina Por ltimo el m ximo n mero de subrutinas se limita a 8 para el RCX 4 para CyberMaster 3 para Scout y 32 para el Spybotics Adem s cuando se utiliza el RCX 1 0 o el CyberMaster si una subrutina es llamada desde m ltiples tareas no puede tener variables locales o realizar c lculos que requieran variable
61. s no son posibles P gina 32 Gu a del programador de NQC EVENT TYPE PRESSED EVENT TYPE PULSE EVENT TYPE EDGE EVENT TYPE LOW EVENT TYPE NORMAL EVENT TYPE HIGH EVENT TYPE CLICK EVENT TYPE DOUBLECIICK EVENT TYPE MESSAGE Los primeros cuatro eventos se basan en el valor booleano de un sensor as que son los m s tiles con sensores de contacto Por ejemplo para configurar el evento 2 que se dispare cuando el sensor de contacto del puerto 1 es presionado puede ser as SetEvent 2 SENSOR_1 EVENT_TYPE_PRESSED Cuando se quiera usar EVENT_TYPE_PULSE O EVENT_TYPE_EDGE el sensor tiene que estar configurado como SENSOR_MODE_PULSE O SENSOR_MODE_EDGE respectivamente EVENT_TYPE_FASTCHANGE debe ser usado con sensores que hayan sido configurados con un argumento slope Cuando el valor raw cambie m s r pido que el argumento slope un evento EVENT_TYPE_FASTCHANGE se disparar Los siguientes tres tipos EVENT_TYPE_LOW EVENT_TYPE_NORMAL y EVENT_TYPE_HIGH convierten el valor fuente del evento en una de las tres gamas low baja normal o high alta y el evento se disparar cuando el valor pase de una gama a la otra Las gamas son definidas por lower limit l mite inferior y upper limit l mite superior para el evento Cuando el valor fuente es menor que el l mite in
62. s temporales Estas importantes restricciones hacen que las subrutinas sean menos atractivas que las funciones por lo tanto su uso deber a limitarse a situaciones donde sea absolutamente necesario ahorrar en el tama o del c digo A continuaci n se ofrece la sintaxis de una subrutina Nombre_de_la_subrutina cuerpo de la subrutina 2 2 4 Variables Todas las variables en NQC son del mismo tipo enteros con signo de 16 bits Las variables se declaran usando la palabra reservada int seguida de una lista de nombres de variables separados por coma y terminados por un punto y coma Opcionalmente se puede especificar un valor inicial para cada variable usando el signo despu s del nombre de la variable Veamos a continuaci n varios ejemplos int x declara x int t z declara t y z int a 1 b declara a y b inicializa a con el valor 1 Las variables globales se declaran en el mbito del programa fuera de cualquier bloque de c digo Una vez declaradas se pueden utilizar dentro de cualquier tarea funci n y subrutina Su mbito comienza en la declaraci n y termina al final del programa Las variables locales se pueden declarar dentro de las tareas funciones y a veces dentro de las subrutinas Tales variables s lo son accesibles dentro del bloque del c digo en el que se definen Concretamente su mbito empieza con la declaraci n y termina al final del bloque de c digo En el caso de las varia
63. sar variables cuando se llama a una funci n usando argumentos int a void foo int amp x task main int y 1 y es igual a 1 foo y y es ahora igual a 2 foo 2 error solo se permiten variables El ltimo tipo const int amp es muy poco frecuente Tambi n se pasa por referencia pero con la restricci n de que a la funci n llamada no se le permite modificar el valor A causa de esta restricci n el compilador puede pasar cualquier cosa no s lo variables a funciones usando este tipo de argumento En general esta es la forma m s eficiente de pasar argumentos en NQC Hay una diferencia importante entre argumentos int y argumentos const int Un argumento int se pasa por valor de modo que en el caso de una expresi n P gina 4 Gu a del programador de NQC din mica como la lectura de un sensor el valor se lee una vez y se almacena Con los argumentos const int amp la expresi n se lee cada vez que es usada en la funci n void foo int x if x x esto siempre es verdad PlaySound SOUND_CLICK void bar const int amp x if x x puede no ser verdad el valor podr a cambiar PlaySound SOUND_CLICK task main foo SENSOR_1 reproduce sonido bar 2 reproduce sonido bar SENSOR_1 podr a no reproducir sonido Las funciones deben invocarse con el n mero y tipo correcto de argumentos El ejemplo siguiente muestra diferentes llamada
64. se otros efectos extra os Por ejemplo si se est mostrando una variable y se ejecuta un c lculo en el que el resultado es la variable es posible que el display muestre algunos resultados intermedios int x task main SetUserDisplay x 0 while true El display puede mostrar durante un instante 1 x 1 Timer 0 SelectDisplay modo Funci n RCX Selecciona un modo de display SelectDisplay DISPLAY_SENSOR_1 muestra el sensor 1 SetUserDisplay valor precisi n Funci n RCX2 Establece que el display LCD muestre continuamente un valor especificado Precisi n especifica el numero de d gitos a la derecha del punto decimal Una precisi n de 0 no muestra punto decimal SetUserDisplay Timer 0 0 muestra el temporizador 0 3 5 Comunicaciones 3 5 1 Mensajes RCX Scout El RCX y el Scout pueden enviar y recibir mensajes simples utilizando los infrarrojos Un mensaje puede tener un valor desde O hasta 255 pero no se recomienda utilizar el mensaje O El ltimo mensaje recibido es guardado y puede accederse a l mediante Message Si no ha sido recibido ning n mensaje Message devolver el valor 0 Debe tenerse en cuenta que debido a la naturaleza de la comunicaci n mediante infrarrojos no se podr n recibir mensajes mientras un mensaje se est transmitiendo P gina 27 Gu a del programador de NQC ClearMessage valor precisi n Funci n RCX Scout Borra el buffer de mensa
65. separar tokens y para hacer los programas m s legibles Con tal que se distingan los tokens no tiene efecto en el programa el a adir o suprimir espacios en blanco Por ejemplo las siguientes l neas de c digo tienen el mismo significado Algunos de los operadores de C est n formados por m ltiples caracteres Para preservar estos tokens no se debe insertar espacio en blanco entre ellos En el ejemplo siguiente la primera l nea usa un operador de cambio a la derecha gt gt pero en la segunda l nea el espacio a adido hace que los s mbolos gt se interpreten como dos elementos separados y en consecuencia se genere un error x 1 gt gt 4 dar a x el valor de 1 desplazado a la derecha 4 bits x 1 gt gt 4 error P gina 1 Gu a del programador de NQC 2 1 3 Constantes num ricas Las constantes num ricas se pueden escribir tanto en formato decimal como hexadecimal Las constantes decimales consisten en uno o m s d gitos decimales Las constantes hexadecimales empiezan con Ox 0X seguidos de uno o m s d gitos hexadecimales x 10 dar a x el valor 10 x 0x10 dar a x el valor 16 10 hex 2 1 4 Identificadores y palabras reservadas Se usan los identificadores para nombres de tarea variables y funciones El primer car cter de un identificador debe ser una letra may scula o min scula o el gui n bajo _ Los caracteres restantes pueden ser letras n meros y el gui n bajo S
Download Pdf Manuals
Related Search
Related Contents
Netgear WPN824EXT Setup Guide 登録申請 - 茨城県 「JUMP」2013年10月号 - 公益財団法人ひょうご産業活性化センター NOT! - Jem & Fix CH940-CH1000 Manual de servicio HandyAvi 4.3 User`s Manual 社会科 UM-3 ULTRASONIC THICKNESS GAUGE USER MANUAL VA43 VA43 Manual de instruções Copyright © All rights reserved.
Failed to retrieve file