Regresar | Me lo bajo |
Este texto es un ejemplo sencillo de cómo usar la HP para simular el movimiento de un brazo robot controlado con unas pocas teclas. El ejemplo no es excesivamente espectacular como podrás comprobar, pero sirve de ejemplo de varias técnicas de programación como podrás ver: uso de variables locales, funciones gráficas, uso de menús personalizados, estructuras CASE, detección de teclas, bucles infinitos, etc...
Este programa ha sido propuesto como ejemplo en uno de los cursos de programación de HP-48 que he impartido en la E.T.S.I.I. de Vigo, y su propósito es meramente educativo, por lo que evidentemente se puede mejorar mucho, sobre todo gráficamente.
El brazo mecánico que trataremos de simular está esquematizado en la figura siguiente:
Las ecuaciones que rigen este movimiento son:
X1 = Xr + l1 * cos(F) ; Y1 = Yr + l1 * sin(F)
X2 = X1 + dX = X1 + l2 * cos(A) ; Y2 = Y1 + dY = Y1 + l2 * sin(A)
La representación es sencilla en el sentido de que sólo hay que ir determinando los puntos dentro de un bucle.
A continuación se muestra el código del programa con los comentarios pertinentes:
« DEG FUNCTION @Modo grados y funciones reales -20 20 XRNG 0 13 YRNG @Establezco rango de representación 0 3 5 5 45 -20 15 15 RCLMENU \-> \<-XR \<-YR @Inicio estructura de variables locales L1 L2 F A INC1 INC2 @anotando longitud barras(L1,L2), Fi y Alfa MenuAct @iniciales(F,A),Incrementos de ángulo @por paso y el menú actual. « DO @Inicio un bucle DO-UNTIL-END \<-XR L1 F COS * + @hallo x1 \<-YR L1 F SIN * + @hallo y1 L2 A COS * @hallo ›x para x2 L2 A SIN * @hallo ›y para y2 \-> X1 Y1 DX DY @Los anoto para usarlos en una @subestructura de variables locales « ERASE \<-XR @En esta estructura lo único que se \<-YR R\->C X1 Y1 R\->C @hace es dibujar las lineas que LINE X1 Y1 R\->C X1 @representan a las barras a partir de DX + Y1 DY + R\->C @sus coordenadas. LINE { # 0d # 0d } PVIEW @muestro la imagen 3 FREEZE » @y la congelo para hacerla persistente { "\|^\Gh" "\|v\Gh" "\|^\Ga" "\|v\Ga" " "End"} TMENU @muestro el menú indicado (movimiento) -1 WAIT @espero a la pulsación de una tecla CASE DUP 11.1 == @Si es la A, sumo INC1 al ángulo F THEN 'F' INC1 STO+ END DUP 12.1 == @Si es la B, resto INC1 a F THEN 'F' INC1 STO- END DUP 13.1 == @Si es la C, sumo INC2 al ángulo A THEN 'A' INC2 STO+ END DUP 14.1 == @Si es la D, resto INC2 a A THEN 'A' INC2 STO- END DUP 16.1 == @Si es la F, limpio la pila, borro PPAR THEN DROP @y salgo del programa. 'PPAR' PURGE MenuAct MENU KILL END END DROP @borro la tecla de la pila (no la necesito más) UNTIL 0 @Pongo un 0 para hacer el bucle infinito. END @A partir de aquí se repite indefinidamente el » @proceso anterior. »Una imagen del programa en funcionamiento se puede ver en la siguiente figura:
Este texto es © José M. Alarcón Aguín 1997 y no puede ser utilizado ni reproducido en ningún curso, libro, etc.. sin el permiso expreso del autor.