100 likes | 214 Views
Le cció n 3: Sensor e s y U ntils Soluciones de Programación RoboLab a NQC. Ejercicio 1: Solución RoboLab.
E N D
Lección 3: Sensores yUntilsSoluciones de ProgramaciónRoboLab a NQC
Ejercicio 1: Solución RoboLab Encienda el motor A para que avance. Si el sensor de contacto es presionado y se mantiene presionado, invierta la dirección del motor. Al liberar el sensor de contacto, apague el motor. until (SENSOR_1 == 1); task main() { Off(OUT_A); OnRev(OUT_A); } OnFwd(OUT_A); until (SENSOR_1 == 0); SetSensor(SENSOR_1, SENSOR_TOUCH);
Ejercicio 1: Solución NQC En el puerto 1 hay un sensor de contacto task main() { SetSensor(SENSOR_1, SENSOR_TOUCH); OnFwd(OUT_A); until (SENSOR_1 == 1); OnRev(OUT_A); until (SENSOR_1 == 0); Off(OUT_A); } 1 significa “pressionado.” 0 significa “liberado.” No olvide usar el doble signo igual!
Ejercicio 1: Solución NQC Use macros para facilitar la lectura del código #define TOUCH SENSOR_1 #define PRESSED 1 #define RELEASED 0 task main() { SetSensor(TOUCH, SENSOR_TOUCH); OnFwd(OUT_A); until (TOUCH == PRESSED); OnRev(OUT_A); until (TOUCH == RELEASED); Off(OUT_A); }
Ejercicio 2: Solución RoboLab Al partir el sensor está sobre una superficie blanca. Al moverse sobre una superficie negra, encienda el motor A para que avance. Al volver a la superficie blanca, apague el motor. until (LIGHT <= THRESHOLD); task main() { Off(OUT_A); OnFwd(OUT_A); } SetSensor(LIGHT, SENSOR_LIGHT); until (LIGHT > THRESHOLD);
Ejercicio 2: Solución NQC Macros para facilitar la lectura #define LIGHT SENSOR_1 #define THRESHOLD 45 task main() { SetSensor(LIGHT, SENSOR_LIGHT); until (LIGHT <= THRESHOLD); OnFwd(OUT_A); until (LIGHT > THRESHOLD); Off(OUT_A); } 45 es el valor medio entre negro y blanco
Ejercicio 3: Solución RoboLab Escriba un programa que ejecuta un sonido cada vez que el sensor de rotación completa 1/4 de vuelta. Haga esto 10 veces. ClearSensor(ROT); until ( abs(ROT) >= QUARTER_REV ); repeat (10) { task main() { } } PlaySound(SOUND_FAST_UP); SetSensor(ROT, SENSOR_ROTATION);
Ejercicio 3: Solución NQC #define ROT SENSOR_1 #define QUARTER_REV 4 task main() { SetSensor(ROT, SENSOR_ROTATION); repeat(10) { ClearSensor(ROT); until ( abs(ROT) >= QUARTER_REV ); PlaySound(SOUND_FAST_UP); } } Pone a 0 el número de pulsos a través del lazo Si usa valor absoluto, el sentido de rotación no importa
Ejercicio 4: Solución RoboLab Al presionar el sensor de contacto, hace avanzar al motor. Cuando el sensor de rotación completa 1 1/2 vueltas,apaga el motor. OnFwd(OUT_A); task main() { } until (TOUCH == 1); Off(OUT_A); ClearSensor(ROT); until ( abs(ROT) >= 24 ); SetSensor(TOUCH, SENSOR_TOUCH); SetSensor(ROT, SENSOR_ROTATION);
Ejercicio 4: Solución NQC #define TOUCH SENSOR_1 #define ROT SENSOR_3 task main() { SetSensor(TOUCH, SENSOR_TOUCH); SetSensor(ROT, SENSOR_ROTATION); until (TOUCH == 1); OnFwd(OUT_A); ClearSensor(ROT); until ( abs(ROT) >= 24 ); Off(OUT_A); }