AVANCE PICCOLO CORTE 1

Dependencies:   mbed

AVANZE PICCOLO CORTE 1

INTRODUCCIÓN

EN EL SIGUIENTE PROGRAMA SE PRESENTA EL CÓDIGO A UTILIZAR PARA EL MOVIMIENTO DEL PICCOLO TENIENDO COMO BASE LA COMUNICACIÓN SERIAL ENTRE NUESTRO MODULO Y NUESTRO PC, PARA ESTO EMPLEAMOS UNA PROGRAMACIÓN SECCIONADA, EN DONDE MANEJAMOS DIFERENTES FUNCIONES Y VARIABLES TANTO PARA LA COMUNICACIÓN, GUARDADO, UBICACIÓN Y EFICIENCIA EN GENERAL DE NUESTRO ROBOT.

DESCRIPCIÓN DEL PROGRAMA:

EL PROGRAMA COMO TAL ESTA DIVIDIDO EN 2 SECCIONES;

DEF.H:

PRINCIPALMENTE DECIDIMOS DEJAR LAS VARIABLES A UTILIZAR EN UN ARCHIVO CABECERA LLAMADO def.h , COMO YA SE MENCIONO, AQUÍ ALOJAREMOS NUESTRAS VARIABLES CON VALORES PREVIAMENTE ASIGNADOS

/media/uploads/Camilokingxd/1.png

LAS VARIABLES UTILIZADAS SON DEFINIDAS DEPENDIENDO DE SU USO, PRIMERAMENTE ENCONTRAMOS LA DEFINICIÓN DE LA VARIABLE MEM_SIZE, EN DONDE DEFINIMOS EL TAMAÑO DE LA MEMORIA Y POR TAL MOTIVO LA CANTIDAD DE ESPACIOS QUE TENDRA NUESTRO ARREGLO, POSTERIORMENTE ENCONTRAREMOS LA VARIABLE MEM_TYPE, QUE DEFINIRÁ EL TAMAÑO DE CADA UNA DE NUESTRAS POSICIONES, EN ESTE CASO DE 32 BITS (4 BYTES), SE DEFINEN LOS PULSOS MAXIMOS Y MINIMOS PARA POSICIONAR NUESTROS SERVOMOTORES A 0° O A 180°, POSTERIORMENTE DEFINIMOS NUESTRA MAXIMA POSICION EN MILIMETROS PARA TENER UNA VARIABLE QUE LIMITE EL MAXIMO DE RECORRIDO DE NUESTRO PICCOLO EN SUS EJES X Y Y, DE IGUAL MANERA SE HACE CON LAS VARIABLES DRAW Y NO DRAW, ASIGNANDOLES SUS VALORES EN MILIMETROS PARA ESTAS POSICIONES, YA POR ULTIMO SE DEFINEN LOS COMANDOS QUE UTILIZAREMOS Y A QUE VALOR CORRESPONDE CADA UNO DE ESTOS.

MAIN.CPP:

EN NUESTRO PROGRAMA PRINCIPAL EL PROGRAMA COMIENZA CON LA ASIGNACIÓN DE LA SEÑAL PWM A LOS PINES PB4,PB5 Y PB3 ENCARGADA DE MOVER LOS SERVOMOTORES SEGUIDO DE ESTO DEFINIMOS EL TAMAÑO Y EL TIPO DE NUESTRA MEMORIA , DEFINIMOS EL PULSO MÁXIMO Y EL PULSO MÍNIMO , LA MÁXIMA POSICIÓN QUE SERÁ 50 MM EL DRAW Y NO DRAW , CON LA POSICIÓN EN MM SIENDO 0 GRADOS PARA DRAW Y 180 GRADOS O 50 MM EN NO DRAW QUE ES CUANDO EL EJE Z ESTA ELEVADO , SEGUIDO DE ESTO SE DEFINE LAS FUNCIONES CON LOS NUEROS EN HEXADECIMAL CON LOS CUALES SE REALIZARA LA COMUNICACIÓN SERIAL , DESPUÉS DE ESTO DEFINIMOS NUESTRA MEMORIA , INICIALIZAMOS LA CABECERA Y LA COLA DE NUESTRA MEMORIA CON LOS BITS QUE VAMOS A UTILIZAR EN ELLA Y INICIALIZAMOS LA VARIABLE FULL LA CUAL VAMOS A UTILIZAR PARA VERIFICAR CUANDO LA MEMORIA ESTE LLENA O VACÍA SIGUIENDO CON NUESTRA MEMORIA COLOCAMOS LA FUNCIÓN (MEM FREE) EL CUAL NOS LIBERA MEMORIA SIENDO ASÍ EL QUE NOS DEJA LA CABECERA Y AL COLA EN EL INICIO

/media/uploads/Camilokingxd/2.png

POSTERIORMENTE ENCONTRAMOS NUESTRA FUNCION MEM_PUT, EN DONDE EMPEZAMOS VERIFICANDO QUE HAYA ESPACIO PARA ASIGNAR UN DATO A NUESTRA POSICION EN LA QUE SE ENCUENTRE EL APUNTADOR CABEZERA, SI LA MEMORIA ESTA LLENA, EL PROGRAMA NOS RETORNA UN 1, DE LO CONTRARIO SE LE ASIGNARA EL DATO AL ARREGLO "BUFFER" EN LA POSICION "MEM_HEAD", CORREMOS 1 POSICION NUESTRO APUNTADOR Y VERIFICAMOS QUE AUN QUEDE ESPACIO EN NUESTRO ARREGLO, DE SER ASI, RETORNAREMOS UN 1 DANDO A ENTENDER QUE TODO ESTA EN ORDEN.

/media/uploads/Camilokingxd/3.png

PARA NUESTRA FUNCION MEM_GET, SE APLICA UN PRINCIPIO SIMILAR AL DE MEM_PUT, EMPEZAMOS VERIFICANDO SI TENEMOS DATOS QUE LEER, DE NO SER ASI, EL PROGRAMA RETORNARA UN 1 DANDO A SABER QUE NO TENEMOS NADA GUARDADO EN NUESTRA MEMORIA, POSTERIORMENTE SE REALIZA LA OBTENCION DE DATOS SUMANDO DE A UNA POSICION A LA COLA DEL ARREGLO, CUANDO LA COLA LLEGE HASTA LA CABEZA DEL ARREGLO SABREMOS QUE YA FUERON OBTENIDOS TODOS LOS DATOS QUE SE TENIAN, SE RETORNA UN 0 INDICANDO QUE EL PROCESO FUE SATISFACTORIO.

/media/uploads/Camilokingxd/4.png

EMPEZAMOS NUESTRO CODIGO COMO TAL DEFINIENDO NUESTRO VOID VERTEX2D CON DOS COORDENADAS CON VALORES DE 8 BITS, LAS CUALES SERAN CONVERTIDAS POSTERIORMENTE A PULSOS COMO TAL, SE REALIZA EL MISMO PROCESO CON LA FUNCION PARA NUESTRO EJE Z. DEFINIMOS X, Y Y Z COMO INTEROS POSITIVOS DE 8 BITS, E INCLUIMOS LA FUNCION QUE REALIZARA LA CONVERSION DE MILIMETROS A PULSOS. DECLARAMOS LAS FUNCIONES QUE UTILIZAREMOS POSTERIORMENTE E INICIAMOS NUESTRO MAIN OFICIAL.

/media/uploads/Camilokingxd/5.png

EMPEZAMOS DECLARANDO EL PERIODO PARA CADA UNO DE NUESTROS SERVOS, SE INICIA LA COMUNICACION SERIAL CON LA SUBRUTINA PROGRAMSERIAL Y DEFINIMOS LAS VARIABLES LETRA Y SUBLETRA, LAS CUALES SE UTILIZARAN POSTERIORMENTE PARA LA SEPARACION DE NUESTROS BYTES, SE INICIALIZA NUESTRO PICCOLO EN 0,0 EN EL EJE X Y Y, Y EL EJE Z EN NO DRAM, ENCENDEMOS EL LED PARA VERFICAR QUE ESTE BIEN PROGRAMADA NUESTRA TARJETA E INICIALIZAMOS NUESTRO CICLO INFINITO.

/media/uploads/Camilokingxd/6.png

EMPEZAMOS ENVIANDO EL MENSAJE DE "INGRESE COMANDO", IMPORTANTE, EL PROGRAMA INICIALMENTE DEBE LEER SI SE QUIERE GUARDAR DATOS O EJECUTAR LOS DATOS QUE TENGA LA MEMORIA, ESTE COMANDO DEBE ESTAR SEGUIDO POR EL END (F0); ESTE VALOR DE 16 BITS SE CARGA SU PRIMER BYTE A LA VARIABLE "LETRA" Y SU SEGUNDO BYTE A LA VARIABLE "SUBLETRA", PRIMERO VERIFICAMOS QUE SE HALLA CERRADO CORRECTAMENTE EL COMANDO, ES DECIR QUE SE HALLA DIGITADO EL F0 COMO FINAL DE LINEA, SI FUE ASÍ, SE PROCEDE A ANALIZAR SI EL COMANDO INGRESADO FUE EL DE EJECUTAR O EL DE GUARDAR, PARA EL CASO 1 (EJECUTAR), SE VERIFICA QUE EFECTIVAMENTE EXISTAN DATOS EN NUESTRA MEMORIA, SI ES ASI SE REDIRIGE A LA FUNCION DE EJECUTAR, DEL CONTRARIO SE ENVIA UN MENSAJE ESPECIFICANDO QUE LA EMEMORIA SE ENCUENTRA VACIA, PARA NUESTRO SEGUNDO CASO (GUARDAR) SE DEBEN DE INGRESAR LOS DATOS, Y FINALIZAR ESTE GUARDADO, SI SE REALIZA BIEN ESTE PROCESO, EL PROGRAMA RETORNARA UN 0 INDICANDONOS QUE SE GUARDARON LOS DATOS CORRECTAMENTE. DE LO CONTRARIO SE ENVIA UN MENSAJE DE ERROR EN EL GUARDADO, DE NO SER ESPECIFICADO EL COMANDO INGRESADO COMO ALGUNA DE ESTAS DOS OPCIONES SE ENVIA UN MENSAJE DE COMANDO NO DEFINIDO.

/media/uploads/Camilokingxd/7.png


All wikipages