Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; -----------------------------------------------
- ; PROYECTO DE ARQUITECTURA DE COMPUTADORES, I SEMESTRE 2012
- ; PARA LEGO MINDSTORMS NXT (NBC)
- ; programado por geovanny méndez marín 20/mayo/2012
- ; -----------------------------------------------
- ;--------------inclusiones
- #include "NXTDefs.h"
- ;--------------constantes
- #define velocidad_maxima 100
- ;--------------segmento de datos
- variables segment
- estado_sensor_sonido word
- segundos_1 word // Contador
- segundos_2 word // Contador
- contar_notas_1 byte // Contador
- estado_sensor_ultrasonico byte
- estado_sensor_contacto byte
- sonido_1 byte[] 'Woops.rso' // Uno de los sonidos que viene por defecto
- mi_random byte
- sonido_2 byte[] 'Attention.rso' // Uno de los sonidos que viene por defecto
- sonido_3 byte[] 'Startup.rso' // Uno de los sonidos que viene por defecto
- ind1 byte[]
- ind2 byte[]
- variables ends
- ;--------------macros
- // Establecer los puertos donde van conectados los sensores
- #define conectar_sensores \
- SetSensorTouch(IN_1) \
- SetSensorSound(IN_2) \
- SetSensorLight(IN_3)\
- SetSensorUltrasonic(IN_4)
- // Moverse 5 segundos hacia el frente (Velocidad 100)
- // Si hay algún sonido, moverse 4 segundos hacia atrás, velocidad 100.
- // Luego moverse hacia adelante los segundos que faltaron. Se tuvieron que haber guardado los segundos (100)
- #define pasos_1_y_2 \
- set segundos_1, 1000 \
- set segundos_2, 1000 \
- \
- etiqueta_001: \
- ReadSensor(IN_2,estado_sensor_sonido) \
- \
- OnFwd(OUT_B,velocidad_maxima) \
- OnFwd(OUT_C,velocidad_maxima) \
- \
- wait 1000 \
- add segundos_1,segundos_1,1000 \
- \
- brcmp EQ, etiqueta_002, estado_sensor_sonido, 1 \
- \
- brcmp GT, etiqueta_aux_2, segundos_1, 5000 \
- brcmp LTEQ, etiqueta_001, segundos_1, 5000 \
- \
- etiqueta_aux_2: \
- Off(OUT_BC)\
- ReadSensor(IN_2,estado_sensor_sonido) \
- NumOut(0,0,estado_sensor_sonido)\
- brcmp GT, etiqueta_002, estado_sensor_sonido, 70 \
- brcmp LTEQ, etiqueta_aux_2, estado_sensor_sonido, 70 \
- wait 500 \
- \
- etiqueta_002: \
- \
- OnRev(OUT_B,velocidad_maxima) \
- OnRev(OUT_C,velocidad_maxima) \
- \
- wait 1000 \
- add segundos_2,segundos_2,1000 \
- \
- brcmp GT, etiqueta_aux_1, segundos_2, 4000 \
- brcmp LTEQ, etiqueta_002, segundos_2, 4000 \
- \
- etiqueta_aux_1: \
- wait 500\
- Off(OUT_BC)
- // Reproduce una canción
- #define reproducir_cancion_1 \
- set contar_notas_1,0 \
- PlayTone(TONE_G5,500) \
- wait 500 \
- PlayTone(TONE_FS5,500) \
- wait 500 \
- PlayTone(TONE_A5,500) \
- wait 500 \
- PlayTone(TONE_G5,500) \
- wait 500 \
- PlayTone(TONE_G5,1000) \
- wait 500 \
- PlayTone(TONE_C6,1000) \
- wait 500 \
- PlayTone(TONE_B5,1000) \
- wait 500 \
- PlayTone(TONE_A5,1000) \
- wait 500 \
- PlayTone(TONE_B5,1000) \
- mov contar_notas_1,9 \
- wait 500 \
- PlayTone(TONE_A5,1000) \
- wait 500 \
- \
- PlayTone(TONE_B5,500) \
- wait 500 \
- PlayTone(TONE_C6,500) \
- wait 500 \
- PlayTone(TONE_D6,500) \
- wait 500 \
- PlayTone(TONE_B5,500) \
- wait 500 \
- PlayTone(TONE_G5,1000) \
- wait 500 \
- PlayTone(TONE_A5,1000) \
- wait 500 \
- PlayTone(TONE_G5,1000) \
- wait 500 \
- PlayTone(TONE_FS5,1000) \
- wait 500 \
- PlayTone(TONE_A5,1000) \
- wait 500 \
- PlayTone(TONE_G5,1000) \
- \
- wait 1000
- // Espera a que le pongan un objeto en frente, colisiona con el y empieza a retroceder
- #define pasos_5_y_6 \
- set estado_sensor_ultrasonico, 0 \
- set estado_sensor_contacto, 0 \
- etiqueta_005: \
- ReadSensorUS(IN_4,estado_sensor_ultrasonico) \
- brcmp EQ, etiqueta_006, estado_sensor_ultrasonico, 1 \
- brcmp NEQ, etiqueta_005, estado_sensor_ultrasonico, 1 \
- etiqueta_006: \
- ReadSensor(IN_1,estado_sensor_contacto)\
- OnFwd(OUT_BC,100) \
- wait 500 \
- brcmp EQ, etiqueta_007, estado_sensor_contacto, 1 \
- brcmp NEQ, etiqueta_006, estado_sensor_contacto, 1 \
- etiqueta_007: \
- PlayFile(sonido_1) \
- wait 1000 \
- OnRev(OUT_BC,100) \
- wait 4000 \
- Off(OUT_BC)
- // Espera que le pase la mano para moverse en círculos
- #define paso7 \
- set estado_sensor_ultrasonico, 0 \
- etiqueta_008: \
- ReadSensor(IN_4,estado_sensor_ultrasonico) \
- brcmp EQ, etiqueta_009, estado_sensor_ultrasonico, 1 \
- brcmp NEQ, etiqueta_008, estado_sensor_ultrasonico, 1 \
- etiqueta_009: \
- OnFwd(OUT_C,100) \
- wait 10000 \
- Off(OUT_C)
- #define paso8 \
- Random(mi_random,3) \
- brcmp EQ, etiqueta_010, mi_random, 0 \
- brcmp EQ, etiqueta_011, mi_random, 1 \
- brcmp EQ, etiqueta_012, mi_random, 2 \
- \
- etiqueta_010: \
- PlayFile(sonido_2) \
- wait 1000 \
- \
- etiqueta_011: \
- OnRev(OUT_BC,20) \
- wait 5000 \
- Off(OUT_BC) \
- \
- etiqueta_012: \
- OnFwd(OUT_BC,20) \
- wait 5000 \
- Off(OUT_BC) \
- wait 500
- // Prioridad entre dos saltos, la tiene la etiqueta de sonido
- #define paso9 \
- set estado_sensor_ultrasonico, 0 \
- set estado_sensor_sonido, 0 \
- etiqueta_013: \
- ReadSensor(IN_2,estado_sensor_sonido) \
- ReadSensor(IN_4,estado_sensor_ultrasonico) \
- brcmp EQ, etiqueta_014, estado_sensor_sonido, 1 \
- brcmp EQ, etiqueta_015, estado_sensor_ultrasonico, 1 \
- jmp etiqueta_013 \
- etiqueta_014: \
- PlayFile(sonido_3) \
- wait 1000 \
- OnRev(OUT_BC,30) \
- wait 4000 \
- Off(OUT_BC) \
- \
- etiqueta_015: \
- OnFwd(OUT_BC,30) \
- wait 4000 \
- Off(OUT_BC) \
- wait 500 \
- OnFwd(OUT_BC,30) \
- wait 4000 \
- Off(OUT_BC) \
- //Baile
- #define paso10 \
- mov ind1,0 \
- mov ind2,0 \
- etiqueta_016: \
- OnFwd(OUT_B,velocidad_maxima) \
- wait 2000 \
- Off(OUT_B) \
- \
- OnRev(OUT_B,velocidad_maxima) \
- wait 2000 \
- Off(OUT_B) \
- \
- OnFwd(OUT_C,velocidad_maxima) \
- wait 2000 \
- Off(OUT_C) \
- \
- OnRev(OUT_C,velocidad_maxima) \
- wait 2000 \
- Off(OUT_C) \
- \
- add,ind1,ind1,1 \
- brcmp LTEQ, etiqueta_016, ind1, 5 \
- brcmp GT, etiqueta_017, ind1, 5 \
- \
- etiqueta_017: \
- OnFwd(OUT_B,velocidad_maxima) \
- wait 2000 \
- Off(OUT_B) \
- \
- OnRev(OUT_C,velocidad_maxima) \
- wait 2000 \
- Off(OUT_C) \
- \
- OnFwd(OUT_C,velocidad_maxima) \
- wait 2000 \
- Off(OUT_C) \
- \
- OnRev(OUT_B,velocidad_maxima) \
- wait 2000 \
- Off(OUT_B) \
- \
- add,ind2,ind2,1 \
- brcmp LTEQ, etiqueta_017, ind2, 5 \
- brcmp GT, etiqueta_018, ind2, 5 \
- \
- etiqueta_018: \
- wait 500
- ;--------------código del programa
- // Un thread secundario con una macro adentro
- thread tocar_musica
- reproducir_cancion_1
- exit
- endt
- // Un thread secundario con las sentencias dentro, sin usar macros en el thread
- thread reversa_1
- jmp etiqueta_003
- etiqueta_003:
- brcmp EQ, etiqueta_004, contar_notas_1, 9
- brcmp NEQ, etiqueta_003, contar_notas_1, 9
- TextOut(0,0,"Reversa con musica")
- etiqueta_004:
- OnRev(OUT_BC,40)
- wait 4000
- Off(OUT_BC)
- wait 500
- exit
- endt
- // PRIMERA ETAPA (PRUEBA BÁSICA)
- thread sub_main_1
- pasos_1_y_2
- wait 500
- precedes tocar_musica,reversa_1
- wait 500
- // pasos_5_y_6
- wait 500
- //start sub_main_2
- exit
- endt
- // SEGUNDA ETAPA (PRUEBA INTERMEDIA)
- thread sub_main_2
- paso7
- paso8
- paso9
- paso10
- wait 500
- exit
- endt
- // THREAD PRINCIPAL
- thread main
- conectar_sensores // Conecta todos los sensores
- start sub_main_1
- wait 4000
- exit
- endt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement