170 likes | 273 Views
NQC “ No Demasiado C”. Estructura de Programa en NQC. Un programa NQC se compone de bloques de código y de variables globales . Hay 3 distintos tipos de bloques de código : ta rea s, funciones en línea , y sub rutin a s.
E N D
Estructura de Programa en NQC • Un programa NQC se compone de bloques de código y de variables globales. • Hay 3 distintos tipos de bloques de código: tareas, funciones en línea, y subrutinas. • Cada tipo de bloque de código tiene características y restricciones únicas, pero todas comparten una estructura común.
Tareas • El RCX implicitamente soporta múltiples tareas, de modo que una tarea NQC corresponde directamente a una tarea RCX. Las tareas se definen usando la siguiente sintáxis: • Nombre de la tarea() • { • //el código de la tarea se coloca acá}
Tareas • El nombre de la tarea puede ser cualquier identificador legal. • Todo programa tiene al menos una tarea - llamada "main" – la cual parte cuando el programa comienza. • Un programa puede contener hasta 9 tareas adicionales.
Lección 1: Motores y Sonido Soluciones de Programación, de RoboLab a NQC
Ejercicio 1: Solución RoboLab Encender los motores conectados a los puertos A y C por 4 segundos, en reversa; después, detener ambos motores: traducción a NQC Off(OUT_A); Off(OUT_C); task main() { OnRev(OUT_C); OnRev(OUT_A); } Wait(400);
Ejercicio 1: Solución NQC task main() { OnRev(OUT_A); OnRev(OUT_C); Wait(400); Off(OUT_A); Off(OUT_C); } La tarea “main” El programa comienza (green light) Enciende los motores A y C en reversa Espera 4 segundos Apga los motores A y C Fin del programa (luz roja)
Ejercicio 1: Solución NQC task main() { OnRev(OUT_A + OUT_C); Wait(400); Off(OUT_A + OUT_C); } Combina ambos motores en una función.
Ejercicio 1: Solución NQC #define BOTH_MOTORS OUT_A + OUT_C #define MOTOR_TIME 400 task main() { OnRev(BOTH_MOTORS); Wait(MOTOR_TIME); Off(BOTH_MOTORS); } use variables globalespara que el código sea más fácil de leer.
Ejercicio 1: Solución NQC #define BOTH_MOTORS OUT_A + OUT_C #define MOTOR_TIME 400 task main() { Rev(BOTH_MOTORS); OnFor(BOTH_MOTORS, MOTOR_TIME); } Elija primero la dirección. use “OnFor”para encender ambos motores por una cantidad de tiempo, y luego apáguelos.
Palabras Clave Hay palabras reservadas para uso del lenguaje NQC. Estas palabras reservadas se denominan palabras clave y NO pueden ser usadas como identificadores. A continuación una lista de las palabras clave: return sign start stop sub switch task true void While int Repeat const continue default do else false if inline __sensor __type abs asm break case
Ejercicio 2: Solución RoboLab Encienda el motor A para que avance una cantidad aleatoria de tiempo, y después apáguelo. task main() { Wait( Random(500) ); } OnFwd(OUT_A); Off(OUT_A);
Ejercicio 2: Solución NQC task main() { OnFwd(OUT_A); Wait( Random(500) ); Off(OUT_A); } Espera una cantida aleatoria de tiempo entre 0 y 5 segundos.
Ejercicio 2: Solución NQC #define LEFT_MOTOR OUT_A #define MOTOR_TIME Random(500) task main() { OnFwd(LEFT_MOTOR); Wait(MOTOR_TIME); Off(LEFT_MOTOR); } Puede usarvariablesglobales
Ejercicio 2: Solución NQC #define LEFT_MOTOR OUT_A #define MOTOR_TIME Random(500) task main() { Fwd(LEFT_MOTOR); OnFor(LEFT_MOTOR, MOTOR_TIME); } Puede usar la función “OnFor”
Ejercicio 3: Solución RoboLab Encienda el motor A para que avance por 2 segundos, apáguelo, y emita un sonido. Encienda el motor C en reversa por 2 segundos, apáguelo, y emita un sonido doble. PlaySound(SOUND_FAST_UP); PlaySound(SOUND_FAST_UP); PlaySound(SOUND_FAST_UP); task main() { } Rev(RIGHT_MOTOR); OnFor(RIGHT_MOTOR, MOTOR_TIME); Fwd(LEFT_MOTOR); OnFor(LEFT_MOTOR, MOTOR_TIME);
Ejercicio 3: Solución NQC Use macros para facilitar la lectura de su código #define LEFT_MOTOR OUT_A #define RIGHT_MOTOR OUT_C #define MOTOR_TIME 200 task main() { Fwd(LEFT_MOTOR); OnFor(LEFT_MOTOR, MOTOR_TIME); PlaySound(SOUND_FAST_UP); Rev(RIGHT_MOTOR); OnFor(RIGHT_MOTOR, MOTOR_TIME); PlaySound(SOUND_FAST_UP); PlaySound(SOUND_FAST_UP); } El sonido por defecto es“SOUND_FAST_UP”