Advertisement
Geovanny

ProyectoArquitectura2, Robot NXT con NBC

Dec 31st, 2012
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.76 KB | None | 0 0
  1. ; -----------------------------------------------
  2. ; PROYECTO DE ARQUITECTURA DE COMPUTADORES, I SEMESTRE 2012
  3. ; PARA LEGO MINDSTORMS NXT (NBC)
  4. ; programado por geovanny méndez marín 20/mayo/2012
  5. ; -----------------------------------------------
  6.  
  7. ;--------------inclusiones
  8. #include "NXTDefs.h"
  9.  
  10. ;--------------constantes
  11. #define velocidad_maxima 100
  12.  
  13. ;--------------segmento de datos
  14. variables segment
  15. estado_sensor_sonido word
  16. segundos_1 word // Contador
  17. segundos_2 word // Contador
  18. contar_notas_1 byte // Contador
  19. estado_sensor_ultrasonico byte
  20. estado_sensor_contacto byte
  21. sonido_1 byte[] 'Woops.rso' // Uno de los sonidos que viene por defecto
  22. mi_random byte
  23. sonido_2 byte[] 'Attention.rso' // Uno de los sonidos que viene por defecto
  24. sonido_3 byte[] 'Startup.rso' // Uno de los sonidos que viene por defecto
  25. ind1 byte[]
  26. ind2 byte[]
  27. variables ends
  28.  
  29. ;--------------macros
  30.  
  31. // Establecer los puertos donde van conectados los sensores
  32. #define conectar_sensores \
  33. SetSensorTouch(IN_1) \
  34. SetSensorSound(IN_2) \
  35. SetSensorLight(IN_3)\
  36. SetSensorUltrasonic(IN_4)
  37.  
  38. // Moverse 5 segundos hacia el frente (Velocidad 100)
  39. // Si hay algún sonido, moverse 4 segundos hacia atrás, velocidad 100.
  40. // Luego moverse hacia adelante los segundos que faltaron. Se tuvieron que haber guardado los segundos (100)
  41. #define pasos_1_y_2 \
  42. set segundos_1, 1000 \
  43. set segundos_2, 1000 \
  44. \
  45. etiqueta_001: \
  46. ReadSensor(IN_2,estado_sensor_sonido) \
  47. \
  48. OnFwd(OUT_B,velocidad_maxima) \
  49. OnFwd(OUT_C,velocidad_maxima) \
  50. \
  51. wait 1000 \
  52. add segundos_1,segundos_1,1000 \
  53. \
  54. brcmp EQ, etiqueta_002, estado_sensor_sonido, 1 \
  55. \
  56. brcmp GT, etiqueta_aux_2, segundos_1, 5000 \
  57. brcmp LTEQ, etiqueta_001, segundos_1, 5000 \
  58. \
  59. etiqueta_aux_2: \
  60. Off(OUT_BC)\
  61. ReadSensor(IN_2,estado_sensor_sonido) \
  62. NumOut(0,0,estado_sensor_sonido)\
  63. brcmp GT, etiqueta_002, estado_sensor_sonido, 70 \
  64. brcmp LTEQ, etiqueta_aux_2, estado_sensor_sonido, 70 \
  65. wait 500 \
  66. \
  67. etiqueta_002: \
  68. \
  69. OnRev(OUT_B,velocidad_maxima) \
  70. OnRev(OUT_C,velocidad_maxima) \
  71. \
  72. wait 1000 \
  73. add segundos_2,segundos_2,1000 \
  74. \
  75. brcmp GT, etiqueta_aux_1, segundos_2, 4000 \
  76. brcmp LTEQ, etiqueta_002, segundos_2, 4000 \
  77. \
  78. etiqueta_aux_1: \
  79. wait 500\
  80. Off(OUT_BC)
  81.  
  82.  
  83.  
  84. // Reproduce una canción
  85. #define reproducir_cancion_1 \
  86. set contar_notas_1,0 \
  87. PlayTone(TONE_G5,500) \
  88. wait 500 \
  89. PlayTone(TONE_FS5,500) \
  90. wait 500 \
  91. PlayTone(TONE_A5,500) \
  92. wait 500 \
  93. PlayTone(TONE_G5,500) \
  94. wait 500 \
  95. PlayTone(TONE_G5,1000) \
  96. wait 500 \
  97. PlayTone(TONE_C6,1000) \
  98. wait 500 \
  99. PlayTone(TONE_B5,1000) \
  100. wait 500 \
  101. PlayTone(TONE_A5,1000) \
  102. wait 500 \
  103. PlayTone(TONE_B5,1000) \
  104. mov contar_notas_1,9 \
  105. wait 500 \
  106. PlayTone(TONE_A5,1000) \
  107. wait 500 \
  108. \
  109. PlayTone(TONE_B5,500) \
  110. wait 500 \
  111. PlayTone(TONE_C6,500) \
  112. wait 500 \
  113. PlayTone(TONE_D6,500) \
  114. wait 500 \
  115. PlayTone(TONE_B5,500) \
  116. wait 500 \
  117. PlayTone(TONE_G5,1000) \
  118. wait 500 \
  119. PlayTone(TONE_A5,1000) \
  120. wait 500 \
  121. PlayTone(TONE_G5,1000) \
  122. wait 500 \
  123. PlayTone(TONE_FS5,1000) \
  124. wait 500 \
  125. PlayTone(TONE_A5,1000) \
  126. wait 500 \
  127. PlayTone(TONE_G5,1000) \
  128. \
  129. wait 1000
  130.  
  131. // Espera a que le pongan un objeto en frente, colisiona con el y empieza a retroceder
  132. #define pasos_5_y_6 \
  133. set estado_sensor_ultrasonico, 0 \
  134. set estado_sensor_contacto, 0 \
  135. etiqueta_005: \
  136. ReadSensorUS(IN_4,estado_sensor_ultrasonico) \
  137. brcmp EQ, etiqueta_006, estado_sensor_ultrasonico, 1 \
  138. brcmp NEQ, etiqueta_005, estado_sensor_ultrasonico, 1 \
  139. etiqueta_006: \
  140. ReadSensor(IN_1,estado_sensor_contacto)\
  141. OnFwd(OUT_BC,100) \
  142. wait 500 \
  143. brcmp EQ, etiqueta_007, estado_sensor_contacto, 1 \
  144. brcmp NEQ, etiqueta_006, estado_sensor_contacto, 1 \
  145. etiqueta_007: \
  146. PlayFile(sonido_1) \
  147. wait 1000 \
  148. OnRev(OUT_BC,100) \
  149. wait 4000 \
  150. Off(OUT_BC)
  151.  
  152. // Espera que le pase la mano para moverse en círculos
  153. #define paso7 \
  154. set estado_sensor_ultrasonico, 0 \
  155. etiqueta_008: \
  156. ReadSensor(IN_4,estado_sensor_ultrasonico) \
  157. brcmp EQ, etiqueta_009, estado_sensor_ultrasonico, 1 \
  158. brcmp NEQ, etiqueta_008, estado_sensor_ultrasonico, 1 \
  159. etiqueta_009: \
  160. OnFwd(OUT_C,100) \
  161. wait 10000 \
  162. Off(OUT_C)
  163.  
  164. #define paso8 \
  165. Random(mi_random,3) \
  166. brcmp EQ, etiqueta_010, mi_random, 0 \
  167. brcmp EQ, etiqueta_011, mi_random, 1 \
  168. brcmp EQ, etiqueta_012, mi_random, 2 \
  169. \
  170. etiqueta_010: \
  171. PlayFile(sonido_2) \
  172. wait 1000 \
  173. \
  174. etiqueta_011: \
  175. OnRev(OUT_BC,20) \
  176. wait 5000 \
  177. Off(OUT_BC) \
  178. \
  179. etiqueta_012: \
  180. OnFwd(OUT_BC,20) \
  181. wait 5000 \
  182. Off(OUT_BC) \
  183. wait 500
  184.  
  185.  
  186. // Prioridad entre dos saltos, la tiene la etiqueta de sonido
  187. #define paso9 \
  188. set estado_sensor_ultrasonico, 0 \
  189. set estado_sensor_sonido, 0 \
  190. etiqueta_013: \
  191. ReadSensor(IN_2,estado_sensor_sonido) \
  192. ReadSensor(IN_4,estado_sensor_ultrasonico) \
  193. brcmp EQ, etiqueta_014, estado_sensor_sonido, 1 \
  194. brcmp EQ, etiqueta_015, estado_sensor_ultrasonico, 1 \
  195. jmp etiqueta_013 \
  196. etiqueta_014: \
  197. PlayFile(sonido_3) \
  198. wait 1000 \
  199. OnRev(OUT_BC,30) \
  200. wait 4000 \
  201. Off(OUT_BC) \
  202. \
  203. etiqueta_015: \
  204. OnFwd(OUT_BC,30) \
  205. wait 4000 \
  206. Off(OUT_BC) \
  207. wait 500 \
  208. OnFwd(OUT_BC,30) \
  209. wait 4000 \
  210. Off(OUT_BC) \
  211.  
  212. //Baile
  213. #define paso10 \
  214. mov ind1,0 \
  215. mov ind2,0 \
  216. etiqueta_016: \
  217. OnFwd(OUT_B,velocidad_maxima) \
  218. wait 2000 \
  219. Off(OUT_B) \
  220. \
  221. OnRev(OUT_B,velocidad_maxima) \
  222. wait 2000 \
  223. Off(OUT_B) \
  224. \
  225. OnFwd(OUT_C,velocidad_maxima) \
  226. wait 2000 \
  227. Off(OUT_C) \
  228. \
  229. OnRev(OUT_C,velocidad_maxima) \
  230. wait 2000 \
  231. Off(OUT_C) \
  232. \
  233. add,ind1,ind1,1 \
  234. brcmp LTEQ, etiqueta_016, ind1, 5 \
  235. brcmp GT, etiqueta_017, ind1, 5 \
  236. \
  237. etiqueta_017: \
  238. OnFwd(OUT_B,velocidad_maxima) \
  239. wait 2000 \
  240. Off(OUT_B) \
  241. \
  242. OnRev(OUT_C,velocidad_maxima) \
  243. wait 2000 \
  244. Off(OUT_C) \
  245. \
  246. OnFwd(OUT_C,velocidad_maxima) \
  247. wait 2000 \
  248. Off(OUT_C) \
  249. \
  250. OnRev(OUT_B,velocidad_maxima) \
  251. wait 2000 \
  252. Off(OUT_B) \
  253. \
  254. add,ind2,ind2,1 \
  255. brcmp LTEQ, etiqueta_017, ind2, 5 \
  256. brcmp GT, etiqueta_018, ind2, 5 \
  257. \
  258. etiqueta_018: \
  259. wait 500
  260.  
  261.  
  262. ;--------------código del programa
  263.  
  264. // Un thread secundario con una macro adentro
  265. thread tocar_musica
  266. reproducir_cancion_1
  267. exit
  268. endt
  269.  
  270. // Un thread secundario con las sentencias dentro, sin usar macros en el thread
  271. thread reversa_1
  272. jmp etiqueta_003
  273. etiqueta_003:
  274. brcmp EQ, etiqueta_004, contar_notas_1, 9
  275. brcmp NEQ, etiqueta_003, contar_notas_1, 9
  276. TextOut(0,0,"Reversa con musica")
  277. etiqueta_004:
  278. OnRev(OUT_BC,40)
  279. wait 4000
  280. Off(OUT_BC)
  281. wait 500
  282. exit
  283. endt
  284.  
  285. // PRIMERA ETAPA (PRUEBA BÁSICA)
  286. thread sub_main_1
  287. pasos_1_y_2
  288. wait 500
  289. precedes tocar_musica,reversa_1
  290. wait 500
  291. // pasos_5_y_6
  292. wait 500
  293. //start sub_main_2
  294. exit
  295. endt
  296.  
  297. // SEGUNDA ETAPA (PRUEBA INTERMEDIA)
  298.  
  299. thread sub_main_2
  300. paso7
  301. paso8
  302. paso9
  303. paso10
  304. wait 500
  305. exit
  306.  
  307. endt
  308.  
  309. // THREAD PRINCIPAL
  310.  
  311. thread main
  312. conectar_sensores // Conecta todos los sensores
  313. start sub_main_1
  314. wait 4000
  315. exit
  316. endt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement