#define MOVE_TIME 100 #define TURN_TIME 85 task main() { repeat(4) { OnFwd(OUT_A+OUT_C); Wait(MOVE_TIME); OnRev(OUT_C); Wait(TURN_TIME); } Off(OUT_A+OUT_C); } Las primeras dos líneas definen constantes que pueden usarse en el programa. Definir constantes es bueno por 2 razones: facilita la lectura del programa, y es más fácil cambiar los valores. Uso de Macros Las macros permiten definir constantes en el programa.
¿Cuáles son dos buenas razones para usar macros para definir constantes? 1. Facilitan la lectura del código. 2. Facilitan el cambio de valores.
More Examples ¿Qué representan las siguientes líneas de código? #define MOVE_TIME 100 #define TURN_TIME 85 #define ROT SENSOR_1 #define THRESHOLD 45 MOVE_TIME es igual a 100 pulsos o un segundo. TURN_TIME es igual a 85 pulsos o 0.85 segundo. ROT es igual a SENSOR_1 THRESHOLD es igual a 45. Cada vez que aparecen MOVE_TIME, TURN_TIME, ROT,o THRESHOLD el programa vé los valores 100, 85, SENSOR_1, y 45.
Definiendo “código” con macros #define turn_around OnRev(OUT_C);Wait(340);OnFwd(OUT_A+OUT_C); En el ejemplo anterior, hemos dado un nombre a un pequeño trozo de código. El código: OnRev(OUT_C); Wait(340); OnFwd(OUT_A+OUT_C); Ha recibido el nombre turn_around. Cada vez que necesitemos ese código, usaremos turn_around.
Acá hay un programa de ejemplo que usa una macro para girar: #define turn_around OnRev(OUT_C);Wait(340);OnFwd(OUT_A+OUT_C); task main() { OnFwd(OUT_A+OUT_C); Wait(100); turn_around; Wait(200); turn_around; Wait(100); turn_around; Off(OUT_A+OUT_C); } La palabra turn_around tras el enunciado #define, equivale al texto a continuación. En adelante escribir turn_around, reemplaza a ese texto.
Los enunciados define son muy poderosos. Pueden tener argumentos. Esto hace su código más compacto y legible. #define turn_right(s,t) SetPower(OUT_A+OUT_C,s);OnFwd(OUT_A);OnRev(OUT_C);Wait(t); #define turn_left(s,t) SetPower(OUT_A+OUT_C,s);OnRev(OUT_A);OnFwd(OUT_C);Wait(t); #define forwards(s,t) SetPower(OUT_A+OUT_C,s);OnFwd(OUT_A+OUT_C);Wait(t); #define backwards(s,t) SetPower(OUT_A+OUT_C,s);OnRev(OUT_A+OUT_C);Wait(t); task main() { forwards(3,200); turn_left(7,85); forwards(7,100); backwards(7,200); forwards(7,100); turn_right(7,85); forwards(3,200); Off(OUT_A+OUT_C); } Acá hay 4 macros; forwards, backwards, turn_left y turn_right. Todas tienen dos argumentos: La velocidad (s) y el tiempo (t).