SE AGREGÓ EL MOVIMIENTO EN LA MATRIZ DE TRIQUI SE AGREGO INTERRUPCION EN EL PROGRAMA

Dependencies:   mbed

ENTREGA 2 PICOLO SISTEMAS EMBEBIDOS

ROBOT PICOLO

/media/uploads/Camilokingxd/12050622893_67d0a56302_b.jpg

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.

OBJETIVOS

OBJETIVO GENERAL

  • DISEÑAR Y FABRICAR LA PROGRAMACIÓN Y LA ESTRUCTURA MECÁNICA CORRESPONDIENTE PARA QUE EL ROBOT SEA CAPAZ DE MOVILIZARSE FLUIDAMENTE POR EL TABLERO DE JUEGO

OBJETIVOS ESPECÍFICOS

  • FABRICAR UNA ESTRUCTURA RESISTENTE Y VERSÁTIL PARA EL FUNCIONAMIENTO GENERAL DEL SISTEMA LA CUAL SE COMPORTE DE MANERA EFICIENTE TANTO EN EL ALMACENAMIENTO COMO EN LA EXTRACCIÓN DE CUBOS DESDE Y HACIA LA MATRIZ.
  • IMPLEMENTAR UN SISTEMA DE COMUNICACIÓN SERIAL ENTRE EL ROBOT Y EL SOFTWARE DE VISUALIZACIÓN.
  • LLEGAR AL DISEÑO MÁS APROPIADO PARA LA FABRICACIÓN DEL DISPOSITIVO, OBTENIENDO UN COMPORTAMIENTO ESTABLE EN LA INTERACCIÓN DEL ROBOT CON EL TABLERO Y CON SU OPONENTE.
  • PRESENTAR EL PROYECTO FINALIZADO PARA LA FERIA TECNOLÓGICA DE LA UNIVERSIDAD ECCI.

DEFINICIÓN DEL PROBLEMA

SE REQUIERE UN ROBOT CAPAZ DE MOVILIZARSE FLUIDAMENTE CON EL FIN DE GANAR EL JUEGO DE TRIKI. ESTO LO DEBE HACER EN UN TIEMPO BREVE SIN INTERFERIR FÍSICAMENTE CON EL JUEGO DEL SIGUIENTE ROBOT.

REQUISITOS MÍNIMOS

  • INTERFAZ GRÁFICA – SENCILLA: SE REQUIERE UNA INTERFAZ QUE SIMPLEMENTE LE PERMITA AL USUARIO SABER EN QUE ESTADO SE ENCUENTRA EL PICOLO, DE IGUAL MANERA TAMBIÉN SE UTILIZARA EN ALGUNAS OCASIONES PARA REALIZAR PRUEBAS DE FUNCIONAMIENTO DE SUS DIFERENTES ACTUADORES Y ALGORITMOS.
  • VERSATILIDAD – ALTA: ESTO SE DEBE A QUE EL DISPOSITIVO CONTARÁ CON UNA GRAN CANTIDAD DE PIEZAS Y ACTUADORES, LO CUAL REQUIERE DE UNA VERSATILIDAD ALTA POR PARTE DEL SISTEMA EN GENERAL PARA ASÍ OBTENER EL COMPORTAMIENTO DESEADO EN EL MISMO.
  • VELOCIDAD – MEDIA ALTA: SE REQUIERE QUE EL ROBOT SE MUEVA CON UNA VELOCIDAD NATURAL, NO SE REQUIERE QUE VAYA A LA MÁXIMA VELOCIDAD, PERO SI QUE TENGA UN MOVIMIENTO ARMÓNICO EN SU DESPLAZAMIENTO POR EL TABLERO.
  • PROCESAMIENTO – RÁPIDO: SE REQUIERE UN PROCESAMIENTO DE DECISIONES VELOZ, ESTO CON EL FIN DE QUE EL JUEGO SEA COMO DE VER.
  • MOVIMIENTO LINEAL Y ROTACIONAL – RÁPIDO Y FLUIDO: EL ROBOT NECESITARÁ MOVERSE EN LAS CUATRO DIRECCIONES PRINCIPALES, AL FRENTE, ATRÁS, DERECHA E IZQUIERDA, ADEMÁS DE CONTAR CON MOVIMIENTO ROTACIONAL SOBRE SU PROPIO EJE YA SEA HACIA LA DERECHA, HACIA LA IZQUIERDA Y EN DIFERENTES ÁNGULOS DE 90°, 180° O 270°.

RESTRICCIONES

  • TAMAÑO DEL TRIQUI.
  • DIMENSIONES ESTÁNDAR.
  • ALCANCE DE COMUNICACIÓN INTERFAZ – CONTROLADOR.
  • VIDA ÚTIL DE LA BATERÍA.
  • TIEMPO POR JUGADA.

DESCRIPCIÓN DEL PROGRAMA

EL PROGRAMA COMO TAL ESTA DIVIDIDO EN 4 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 MILÍMETROS 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, ASIGNÁNDOLES SUS VALORES EN MILÍMETROS PARA ESTAS POSICIONES, YA POR ULTIMO SE DEFINEN LOS COMANDOS QUE UTILIZAREMOS Y A QUE VALOR CORRESPONDE CADA UNO DE ESTOS, DE IGUAL MANERA DEFINIMOS UNA VARIABLE CON UN NUMERO CONCRETO DE PASOS NECESARIOS PARA QUE EL PICOLO AVANCE O RECORRA LOS 5 CENTÍMETROS CORRESPONDIENTES A CADA CUADRICULA. POR ULTIMO SE DEFINEN 4 VARIABLES CON EL FIN DE CARACTERIZAR LAS POSIBLES DIRECCIONES QUE TOME EL PICCOLO EN EL TABLERO DE JUEGO.

MAIN.CPP

EN NUESTRO PROGRAMA PRINCIPAL DEFINIMOS LAS LIBRERIAS NECESARIAS PARA EL FUNCIONAMIENTO DEL ROBOT, EL PROGRAMA COMIENZA CON LA ASIGNACIÓN DE LA SEÑAL PWM A LOS PINES PB4,PB5 Y PB3 ENCARGADOS DE MOVER LOS SERVOMOTORES SEGUIDO DE ESTO INICIALIZAMOS LA COLA Y CABEZA DE LA MEMORIA EN UNA POSICION 0, SE DEFINEN EL TAMAÑO Y EL TIPO DE NUESTRA MEMORIA .

/media/uploads/Camilokingxd/2.png

SE CREA UNA PEQUEÑA FUNCIÓN CON EL OBJETIVO DE LIBERAR LA MEMORIA EN CASO DE QUE SEA NECESARIO BORRAR LA INFORMACIÓN QUE SE ENCUENTRE GUARDADA. POSTERIORMENTE ENCONTRAMOS NUESTRA FUNCIÓN MEM_PUT, EN DONDE EMPEZAMOS VERIFICANDO QUE HAYA ESPACIO PARA ASIGNAR UN DATO A NUESTRA POSICIÓN 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. 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 TENÍAN, SE RETORNA UN 0 INDICANDO QUE EL PROCESO FUE SATISFACTORIO.

/media/uploads/Camilokingxd/3.png

EMPEZAMOS NUESTRO CÓDIGO COMO TAL DEFINIENDO NUESTRO VOID VERTEX2D CON DOS COORDENADAS CON VALORES DE 8 BITS, LAS CUALES SERÁN CONVERTIDAS POSTERIORMENTE A PULSOS COMO TAL, SE REALIZA EL MISMO PROCESO CON LA FUNCIÓN PARA NUESTRO EJE Z. DEFINIMOS X, Y Y Z COMO ENTEROS POSITIVOS DE 8 BITS, SE AGREGAN LAS VARIABLES QUE ALMACENARAN LA POSICIÓN DEL PICOLO EN LA MATRIZ EN TRES DIFERENTES CASOS, LA POSICIÓN ANTERIOR, LA POSICIÓN ACTUAL Y EL NUMERO DE CASILLAS PARA LLEGAR A LA POSICIÓN DESEADA E INCLUIMOS LA FUNCIÓN QUE REALIZARA LA CONVERSIÓN DE MILÍMETROS A PULSOS. DECLARAMOS LAS FUNCIONES QUE UTILIZAREMOS POSTERIORMENTE E INICIAMOS NUESTRO MAIN OFICIAL.

/media/uploads/Camilokingxd/4.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 DRAW, ENCENDEMOS EL LED PARA VERIFICAR QUE ESTE BIEN PROGRAMADA NUESTRA TARJETA E INICIALIZAMOS NUESTRO CICLO INFINITO.

/media/uploads/Camilokingxd/5.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/6.png

EN LA FUNCIÓN MM2PULSE SE REALIZA LA CONVERSION DEL NUMERO ENTRE 0 Y 50 AL PULSO RESPECTIVO PARA EL MOVIMIENTO DE LOS SERVOMOTORES, AQUI SE REALIZA INICIALMENTE UNA COMPARACIÓN PARA CONSTATAR QUE EL NUMERO INGRESADO POR EL OPERADOR NO HAYA SIDO MAYOR A 50, DE SER ASÍ SE REALIZA LA CONVERSIÓN Y ENVIA EL RESPECTIVO PULSO. PARA LA FUNCIÓN DE SETZ SE SIGUE EL MISMO PRINCIPIO DE FUNCIONAMIENTO, AUNQUE AL SABERSE QUE SOLO SE MOVERÁ EN SUS DOS POSICIONES LIMITES. LA FUNCIÓN DEL VERTEX2D SIMPLEMENTE REUNE ESTOS VALORES YA CONVERTIDOS EN TÉRMINOS DE PULSO Y LOS ENVÍA A LOS MOTORES DE LOS EJES "X" Y "Y". EN LA FUNCIÓN DEL PROGRAM_SERIAL SE PROGRAMA LA VELOCIDAD DE LA TRANSMISIÓN DE DATOS, LOS BITS DE PARADA Y OTROS PARÁMETROS DE LA COMUNICACIÓN SERIAL.

/media/uploads/Camilokingxd/7.png

EN LA FUNCION DE EJECUTAR SE EMPIEZA ENVIANDO EL MENSAJE DE QUE EL PROGRAMA SE ESTA EJECUTANDO, DE ENTRAR A ESTA FUNCIÓN SE SABE QUE EL PROGRAMA SE GUARDO CORRECTAMENTE, QUE HAY DATOS Y QUE SE VA A PROCEDER A LEERLO CONFORME SE INGRESARON, DECLARAMOS LAS VARIABLES A,B,C,D,L, L1. L2 Y L3 LAS CUALES EXPLICAREMOS MAS ADELANTE, LE ASIGNAMOS EL TAMAÑO A NUESTRA MEMORIA Y PROGRAMAMOS LOS PUERTOS POR LOS CUALES ENVIAREMOS LOS SELECTORES A NUESTROS MOTORES PASO A PASO, ACONTINUACION CARGAMOS A NUESTRA VARIABLE "VAL" LO QUE SE TENGA ALMACENADO EN LA MEMORIA, AHORA SE FRACIONARA NUESTRA PRIMERA LINEA DE MAMEROA, ESTA LA DIVIDIREMOS EN 4 SUB COMANDOS, DPEENDIENDO DE QUE VALORES TOMEN SUS PRIMEROS BYTES SABREMOS QUE FUNCION ES LA QUE EJECUTAREMOS.

/media/uploads/Camilokingxd/8.png

EMPEZAREMOS CON UN PARAMETRO QUE NOS ESTABLEZCA SI EL COMANDO SE TRATA DE UNA SERIE DE 4 SUBCOMANDOS O DE 3 SUBCOMANDOS, PARA ESTO SE COMPARA EL TERCER SUBCOMANDO DE LA LINEA DEL PROGRAMA, SABIENDO SI SE TRATA DE VERTEX O STEPMOTOR, O POR EL CONTRARIO DE ALGUN OTRO COMANDO. SI SE SABE QUE EL COMANDO PRINCIPAL POR OBLIGACIÓN TENDRÁ 2 DATOS MAS SE PROCEDE A HACER LA NUEVA SEPARACIÓN, EN DONDE EL PRIMER BYTE SE GUARDA EN LA VARIABLE "A", EL SEGUNDO EN LA "B", EL TERCERO EN LA "C" Y EL CUARTO EN LA "D". SELECCIONAMOS EL PRIMER COMANDO "A" Y VERIFICAMOS SI SE TRATA DE UN VERTEX2D O DE UN STEPMOTOR, DE TRATARSE DE EL VERTEX2D SE ENVÍAN LOS COMANDOS "B" Y "C" CORRESPONDIENTES A LAS COORDENADAS "X" Y "Y", DE NO SER ASÍ, SE SABE QUE EL COMANDO A MANEJAR ES EL STEPMOTOR, AQUÍ GUARDAMOS EN "XNEW" LA POSICIÓN EN X A LA QUE NOS DESEAMOS MOVER, Y EN "YNEW" LA POSICIÓN EN Y A LA QUE NOS DESEAMOS MOVER, SE CALCULA MEDIANTE RESTAS EL NUMERO DE CASILLAS QUE SE DEBE MOVER EN "X" Y "Y" PARA LLEGAR A LA NUEVA POSICIÓN, Y FINALMENTE SE LE ASIGNA A LA POSICIÓN ANTERIOR LA POSICIÓN NUEVA CON EL FIN DE VOLVER A REALIZAR ESTA FUNCIÓN EN UN PRÓXIMO MOVIMIENTO.

/media/uploads/Camilokingxd/9.png

LO QUE QUEDA AHORA ES ANALIZAR LOS POSIBLES MOVIMIENTOS QUE SE PUEDEN PRESENTAR Y ASIGNARLES LA MEJOR RUTA PARA LLEGAR A ESAS CASILLAS TENIENDO EN CUENTA QUE EN ALGUNAS OCASIONES EL MOVIMIENTO PUEDE SER NEGATIVO, PARA ESTO SE USA LA MULTIPLICACION POR SU VALOR ABSOLUTO, ESTO SE CARGA EN UNA VARIABLE LLAMADA "NOY" LA CUAL POSTERIORMENTE SE MULTIPLICA POR EL NUMERO DE PASOS NECESARIO PARA RECORRER EL CUADRANTE.

/media/uploads/Camilokingxd/10.png

DE NO SER NINGUNA DE ESTAS DOS ACCIONES SIMPLEMENTE SE SABE QUE LA FUNCIÓN ES DRAW O NODRAW Y SE REALIZA LA ACCIÓN CORRESPONDIENTE, AL TERMINARSE ESTO SE VUELVA A GUARDAR EN VAL LO QUE QUEDE EN LA MEMORIA, SE VUELVE A HACER LA SEPARACIÓN DE BYTES Y SE REPITE EL PROCESO HASTA QUE SE ENCUENTRE UN "FA". CUANDO SE TERMINEN DE EJECUTAR LO QUE SE ENCUENTRE EN LA MEMORIA, EL PROGRAMA ENVÍA UN MENSAJE DICIENDO QUE EL PROGRAMA YA SE HA TERMINADO DE EJECUTAR.

/media/uploads/Camilokingxd/11.png

POR ULTIMO ENCONTRAMOS LA FUNCIÓN DE GUARDADO, ESTA FUNCIONA CON UN PRINCIPIO MUY PARECIDO AL DE EJECUTAR, EN DONDE EN VEZ DE LEER CADA UNA DE LAS POSICIONES DEL ARREGLO ESCRIBE SOBRE ELLAS DE FORMA CONSECUTIVA, EL PROGRAMA EMPIEZA LIBERANDO LA MEMORIA, ESTO CON EL FIN DE ELIMINAR POSIBLES COMANDOS O DATOS BASURA QUE SE ENCUENTREN. POSTERIORMENTE SE DECLARAN DOS VARIABLES QUE UTILIZAREMOS MAS ADELANTE PARA ASIGNAR LOS DATOS QUE PROVENGAN DE LA COMUNICACION SERIAL. EL PROGRAMA COMIENZA PIDIENDOLE AL OPERADOR QUE INGRESE SUS COMANDOS Y COODENADAS ASIGNANDO ESTOS A LA VARIABLE "SL", SE VERIFICA QUE EL ULTIMO COMANDO SEA DIFERENTE A "FA" DE SER ASÍ SE PROCEDE A EVALUAR CUAL FUE EL COMANDO INGRESADO POR EL OPERADOR. DE SER EL COMANDO DEL SERVO SE REALIZARA LA SEPARACION DE BYTES TENIENDO EN CUENTA QUE SU ULTIMO BYTE DEBERÁ DE SER "F0", DE NO SER ASI, SE ENVIARA EL MENSAJE DICIENDO QUE EL COMANDO END NO FUE DEFINIDO. PARA EL CASO DE DRAW, NODRAW Y MOTORSTEP SE REALIZARÁ EL MISMO PROCEDIMIENTO, TENIENDO SIEMPRE EN SU FINAL EL LLAMADO DE LA FUNCION MEMPUT CON EL DATO "L" PARA QUE DE ESTA MANERA SE VAYAN GUARDANDO SUCESIVAMENTE NUESTROS DATOS. YA EN LA PARTE FINAL DE LA FUNCIÓN SE ENVIA EL MENSAJE INFORMANDO QUE EL PROGRAMA SE TERMINÓ DE GUARDAR.

/media/uploads/Camilokingxd/12.png /media/uploads/Camilokingxd/13.png /media/uploads/Camilokingxd/14.png

STEP_MOTOR.CPP

PARA ESTE PROGRAMA SE INGRESAN INICIALMENTE LAS LIBRERIAS CORRESPONDIENTES PARA SU CORRECTO FUNCIONAMIENTO, SE INICIA PROGRAMANDO LOS NOMBRES PARA LOS 8 PINES SELECTORES DE NUESTRO MOTOR PASO A PASO, INICIALIZAMOS NUESTRAS VARIABLES EN 0 Y ESTABLECEMOS LA VELOCIDAD DE NUESTROS MOTORES ( SI ESTE NUMERO ES MAS GRANDE LA VELOCIDAD DE NUESTROS MOTORES EN MENOR ).

/media/uploads/Camilokingxd/15.png

POSTERIORMENTE SE ESTABLECE LA SECUENCIA OTABLA DE VERDAD NECESARIA PARA QUE NUESTRO MOTOR COMPLETE 1 PASO, VALE LA PENA RECALCAR QUE ENVIAREMOS UN SOLO BUS DE DATOS DE 8 BITS, AQUI IRA LA INFORMACION PARA LOS DOS MOTORES CONSECUTIVAMENTE, ESTO NOS EVITA ENVIAR LA INFORMACION FRAGMENTADA EN DOS GRUPOS...

/media/uploads/Camilokingxd/16.png

POR ULTIMO DECLARAMOS LAS FUNCIONES PARA DETERMINAR LA VELOCIDAD (NO SE UTILIZAN EN EL PROGRAMA) Y DECLARAMOS LA FUNCION PARA REALIZAR LOS PASOS, EN ESTA SIMPLEMENTE SE DEBERA INGRESAR EL NUMERO DE PASOS QUE SE DESEEN DAR Y LA DIRECCION QUE DEBERAN TOMAR LOS MOTORES. LO QUE QUEDA ES ESTABLECER EL MOVIMIENTO O SENTIDO DE NUESTROS MOTORES DEPENDIENDO DE LA DIRECCION QUE EL OPERARIO HAYA ESTABLECIDO EN EL COMANDO TENIENDO EN CUENTA QUE PARA CADA MOTOR NO SE PUEDE EXCEDER LOS 8 PASOS CORRESPONDIENTES PARA LA CONFIGURACION DEL BOBINADO DE NUESTROS MOTORES, ESTO SE REALIZARA EL NUMERO DE VECES TAL COMO HAYAMOS DEFINIDO LOS PASOS.

/media/uploads/Camilokingxd/17.png

STEP_MOTOT.H

PARA NUESTRA ULTIMA LIBRERIA SE ESTABLECE LAS CARACTERÍSTICAS DE NUESTRO OBJETO, PRINCIPALMENTE DIVIDIREMOS LAS CARACTERÍSTICAS PUBLICAS Y LAS PRIVADAS TENIENDO EN CUENTA EL MANEJO QUE SE LE DARÁN A ESTAS VARIABLES EN NUESTRO PROGRAMA.

/media/uploads/Camilokingxd/18.png

FUNCION PAUSE

/media/uploads/Camilokingxd/dfdf.png LA FUNCION PAUSA Y PLAY SE DECLARAN EN LA LIBRERIA DEF EN DONDE INICIALMENTE SE DEFINE LA FUNCION PAUSA CON LA ABREVIATURA F8 Y PLAY CON LA ABREVIATURA F4. EN EL MAIN SE PLANTEA LA INTERRUPCIÓN EN UN WHILE TENIENDO COMO CONDICION EL F4 QUE ES LA ABREVIATURA PARA LLAMAR LA FUNCION PLAY, ESTA INTERRUPCION SE LLAMA-ANTES DE LA FUNCIÓN EJECUTAR SE COLOCA EN LA FUNCION VERTEX 2D Y MOTORSTEP PARA ASI PODER LLAMAR LA INTERRUPCION CUANDO EL PICOLO SE ESTE MOVIENDO EN LOS CUADRANTES DEL TRIQUI Y CUANDO SE DISPONGA A HACER UN DIBUJO TENIENDO COMO OBJETIVO HACER UN SISTEMA EMBEBIDO EN TIEMPO REAL

INTEGRANTES

  • ANDRES CAMILO RAMIREZ
  • JUAN CAMILO FORERO
  • JUAN DAVID PEREZ

All wikipages