#include <stdio>
#include <dos>
#include <conio>
#define COM1 0x3F8
void inicializar_puerto ();
void main()
{
int valor,i;
unsigned char tecla;
clrscr();
inicializar_puerto();
gotoxy(20,5); printf("EJECUCION DE RUTINAS DEL ROBONOVA");
gotoxy(6,10); printf("1.-Dar un paso con pie izquierdo.");
gotoxy(6,12); printf("2.-Dar un paso con pie derecho.");
gotoxy(6,14); printf("3.-Levantar mano derecha.");
gotoxy(6,16); printf("4.-Levantar mano izquierda.");
gotoxy(9,18); printf("Selecciona una Rutina: ");
scanf("%d",&valor);
switch(valor)
{
case 1:
outportb(COM1,valor);
gotoxy(6,21); printf("ROBONOVA-1 Da un paso con pie izquierdo");
break;
case 2:
outportb(COM1,valor);
gotoxy(6,21); printf("ROBONOVA-1 Da un paso con pie derecho");
break;
case 3:
outportb(COM1,valor);
gotoxy(6,21); printf("ROBONOVA-1 Levanta mano derecha");
break;
case 4:
outportb(COM1,valor);
gotoxy(6,21); printf("ROBONOVA-1 Levanta mano izquierda");
break;
default:
for (i=7; i<8; i++)
{
textattr(i + ((i+1) <<4));
gotoxy(18,22);cprintf("Debes introducir un n£mero del 1 al 4!");
}
break;
}
getche();
}
void inicializar_puerto()
{
outportb(COM1+1,0);
outportb(COM1+3,0x80);
outportb(COM1+0,0x0C);
outportb(COM1+1,0x00);
outportb(COM1+3,0x03);
outportb(COM1+2,0xC7);
outportb(COM1+4,0x0B);
}
'==============================================================
'==============================================================
DIM RxIn AS BYTE
DIM A AS BYTE
'PTP -> Función ON/OFF para el control simultaneo de servos
PTP SETON 'Establecer la función de PTP como grupos
PTP ALLON 'Establecer la función de PTP para todos los servos
'Dirección inicial de los servos
'0->rotación contraria/gira a la izquierda
'1->rotacion normal/gira a la derecha
DIR G6A, 1,0,0,1,0,0
DIR G6B, 1,1,1,1,1,1
DIR G6C, 0,0,0,0,0,0
DIR G6D, 0,1,1,0,1,0
ZERO G6A,102, 93, 93, 107, 100
ZERO G6B,100, 102, 102
ZERO G6C,100, 102, 99
ZERO G6D, 99, 100, 100, 106, 102
'Leer la posición presente de los servos antes del encendido
'inicial y entonces designar la acción suavemente segun el
'comando move.
'1->Lee el valor presente del servo seleccionado y mantiene el
'estado presente del robot.
'0->mueve al valor inicial de el controlador la cual es 100
GETMOTORSET G6A, 1,1,1,1,1,0
GETMOTORSET G6B, 1,1,1,0,0,0
GETMOTORSET G6C, 1,1,1,0,0,0
GETMOTORSET G6D, 1,1,1,1,1,0
'Coloca la velocidad de los servos a 5
SPEED 5
'Fijar los servos que serán utilizados.
MOTOR G24
GOSUB POS_INICIAL
DELAY 1000
'==============================================================
MAIN:
Retry:
ERX 9600, RxIn, Retry 'Lee el puerto serie si no recibe
'vuelve al intentarlo.
IF RxIn=1 THEN
GOSUB RUTINAN1 'Da un paso izquierdo
DELAY 1000
GOSUB POS_INICIAL 'Se coloca en la posición estandar.
ELSEIF RxIn=2 THEN
GOSUB RUTINAN2 'Da un paso derecho
DELAY 1000
GOSUB POS_INICIAL 'Se coloca en la posición estandar.
ELSEIF RxIn=3 THEN
GOSUB RUTINAN3 'Levanta mano derecha.
DELAY 1000
GOSUB POS_INICIAL 'Se coloca en la posición estandar.
ELSEIF RxIN=4 THEN
GOSUB RUTINAN4 'Levanta mano izquierda
DELAY 1000
GOSUB POS_INICIAL 'Se coloca en la posición estandar.
ELSEIF RxIn=27 THEN
GOTO SALIR
ENDIF
GOTO MAIN
SALIR:
END
'==============================================================
'RUTINAS DEL ROBONOVA-1 =
'==============================================================
'Paso izquierdo
RUTINAN1:
SPEED 5
MOVE24 85, 71, 152, 91, 112, 60, 100, 40, 80, , , , 100, 40, 80, , , , 112, 76, 145, 93, 92, 60,
SPEED 14
'left up
MOVE24 90, 107, 105, 105, 114, 60, 90, 40, 80, , , , 100, 40, 80, , , , 114, 76, 145, 93, 90, 60,
'left down
MOVE24 90, 56, 143, 122, 114, 60, 80, 40, 80, , , , 105, 40, 80, , , , 113, 80, 145, 90, 90, 60,
MOVE24 90, 46, 163, 112, 114, 60, 80, 40, 80, , , , 105, 40, 80, , , , 112, 80, 145, 90, 90, 60,
SPEED 10
'left center
MOVE24 100, 66, 141, 113, 100, 100, 90, 40, 80, , , , 100, 40, 80, , , , 100, 83, 156, 80, 100, 100,
MOVE24 113, 78, 142, 105, 90, 60, 100, 40, 80, , , , 100, 40, 80, , , , 90, 102, 136, 85, 114, 60,
SPEED 14
'right up
MOVE24 113, 76, 145, 93, 90, 60, 100, 40, 80, , , , 90, 40, 80, , , , 90, 107, 105, 105, 114, 60,
RETURN
'Paso derecho
RUTINAN2:
'right up
MOVE24 113, 76, 145, 93, 90, 60, 100, 40, 80, , , , 90, 40, 80, , , , 90, 107, 105, 105, 114, 60,
'right down
MOVE24 113, 80, 145, 90, 90, 60, 105, 40, 80, , , , 80, 40, 80, , , , 90, 56, 143, 122, 114, 60,
MOVE24 112, 80, 145, 90, 90, 60, 105, 40, 80, , , , 80, 40, 80, , , , 90, 46, 163, 112, 114, 60,
SPEED 10
'right center
MOVE24 100, 83, 156, 80, 100, 100, 100, 40, 80, , , , 90, 40, 80, , , , 100, 66, 141, 113, 100, 100,
MOVE24 90, 102, 136, 85, 114, 60, 100, 40, 80, , , , 100, 40, 80, , , , 113, 78, 142, 105, 90, 60,
SPEED 14
'left up
MOVE24 90, 107, 105, 105, 114, 60, 90, 40, 80, , , , 100, 40, 80, , , , 113, 76, 145, 93, 90, 60,
SPEED 5
MOVE24 85, 71, 152, 91, 112, 60, 100, 40, 80, , , , 100, 40, 80, , , , 112, 76, 145, 93, 92, 60,
RETURN
'Levanta brazo derecho
RUTINAN3:
SPEED 5
MOVE G6A,101, 76, 145, 94, 99, 100
MOVE G6B,100, 30, 80, 100, 100, 100
MOVE G6C,166, 16, 81, 100, 100, 100
MOVE G6D,100, 75, 143, 94, 98, 100
DELAY 1000
MOVE G6A,102, 76, 145, 95, 99, 100
MOVE G6B,100, 30, 81, 100, 100, 100
MOVE G6C,100, 30, 80, 100, 100, 100
MOVE G6D,101, 75, 140, 96, 96, 100
RETURN
'Levanta Brazo izquierdo
RUTINAN4:
SPEED 5
MOVE G6A,102, 76, 145, 95, 99, 100
MOVE G6B,164, 21, 81, 100, 100, 100
MOVE G6C,101, 31, 81, 100, 100, 100
MOVE G6D,101, 75, 139, 97, 96, 100
DELAY 1000
MOVE G6A,102, 76, 145, 95, 99, 100
MOVE G6B,100, 30, 80, 100, 100, 100
MOVE G6C,102, 32, 82, 100, 100, 100
MOVE G6D,101, 75, 138, 98, 96, 100
RETURN
POS_INICIAL:
'Posición inicial del robot.
'El comando MOVE opera un servo al ángulo deseado, el ángulo
'del motor esta entre 10-190.
MOVE G6A,100, 76, 145, 93, 100, 100
MOVE G6D,100, 76, 145, 93, 100, 100
MOVE G6B,100, 30, 80, 100, 100, 100
MOVE G6C,100, 30, 80, 100, 100, 100
WAIT
RETURN