Esta última actualización contiene el código funcional en las 10 funciones.
Dependencies: mbed
Fork of jc by
main.cpp@3:c7e3f75d4f10, 2017-11-24 (annotated)
- Committer:
- jonnas58328
- Date:
- Fri Nov 24 23:09:23 2017 +0000
- Revision:
- 3:c7e3f75d4f10
- Parent:
- 2:773082426491
Last Update 24.11.17;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
VaLaraC | 2:773082426491 | 1 | //---------------------------------LIBRERIAS-------------------------------------------- |
VaLaraC | 0:9aa960516df7 | 2 | #include "mbed.h" |
VaLaraC | 0:9aa960516df7 | 3 | #include "math.h" |
VaLaraC | 0:9aa960516df7 | 4 | #include "cstdlib" |
jonnas58328 | 3:c7e3f75d4f10 | 5 | #include "InterruptIn.h" |
VaLaraC | 2:773082426491 | 6 | |
VaLaraC | 2:773082426491 | 7 | //--------------------------DECLARACON DE CONTANTES------------------------------- |
VaLaraC | 0:9aa960516df7 | 8 | #define MAXPOS 255 |
VaLaraC | 0:9aa960516df7 | 9 | #define SS_TIME 500 |
VaLaraC | 0:9aa960516df7 | 10 | #define POSDRAW 300 |
VaLaraC | 0:9aa960516df7 | 11 | #define BUFF_SIZE 6 |
VaLaraC | 0:9aa960516df7 | 12 | #define COMM_N 0 |
VaLaraC | 0:9aa960516df7 | 13 | #define INITPARAMETER 1 |
VaLaraC | 0:9aa960516df7 | 14 | #define DEBUG 1 |
VaLaraC | 0:9aa960516df7 | 15 | #define BUFF_POS 6 |
VaLaraC | 0:9aa960516df7 | 16 | |
VaLaraC | 2:773082426491 | 17 | //--------------------------DECLARACION DE PUERTOS I/O---------------------------- |
VaLaraC | 0:9aa960516df7 | 18 | PwmOut myServoX(PB_3); //MOTOR EJE X |
VaLaraC | 0:9aa960516df7 | 19 | PwmOut myServoY(PB_4); //MOTOR EJE Y |
VaLaraC | 0:9aa960516df7 | 20 | PwmOut myServoZ(PB_10);//MOTOR EJE Z |
VaLaraC | 0:9aa960516df7 | 21 | |
jonnas58328 | 3:c7e3f75d4f10 | 22 | InterruptIn boton(PC_0); |
VaLaraC | 2:773082426491 | 23 | InterruptIn mybutton(USER_BUTTON); |
VaLaraC | 0:9aa960516df7 | 24 | Serial command(USBTX, USBRX); //COMUNICACION SERIAL |
jonnas58328 | 3:c7e3f75d4f10 | 25 | Serial Sdebug(USBTX, USBRX); //DEBUG SERIAL |
VaLaraC | 0:9aa960516df7 | 26 | DigitalOut led(LED1); //DECLARACION LED DE LA PLACA |
VaLaraC | 2:773082426491 | 27 | |
VaLaraC | 2:773082426491 | 28 | //---------------------------DEFINICION COMANDOS POR CONSOLA---------------------- |
VaLaraC | 0:9aa960516df7 | 29 | #define LED 0 |
VaLaraC | 0:9aa960516df7 | 30 | #define PUNTO 1 |
VaLaraC | 0:9aa960516df7 | 31 | #define LINE 2 |
VaLaraC | 0:9aa960516df7 | 32 | #define RECTANGLE 3 |
VaLaraC | 0:9aa960516df7 | 33 | #define CIRCLE 4 |
VaLaraC | 0:9aa960516df7 | 34 | #define STOP 5 |
VaLaraC | 0:9aa960516df7 | 35 | #define PAUSE 6 |
VaLaraC | 0:9aa960516df7 | 36 | #define REANUDAR 7 |
VaLaraC | 0:9aa960516df7 | 37 | #define RESOLUCION 8 |
VaLaraC | 0:9aa960516df7 | 38 | #define HOME 9 |
VaLaraC | 0:9aa960516df7 | 39 | #define TIEMPO_DE_PASO 10 |
VaLaraC | 0:9aa960516df7 | 40 | |
VaLaraC | 2:773082426491 | 41 | //--------------------------LLAMADO RUTINA DE INTERRUPCIONES---------------------- |
VaLaraC | 2:773082426491 | 42 | //Ticker ticker1; //Variable para rutina de interupciones |
VaLaraC | 2:773082426491 | 43 | //Timeout timeout;//Llamado de variable por conteo para manejo de pausa |
VaLaraC | 0:9aa960516df7 | 44 | |
VaLaraC | 2:773082426491 | 45 | //-------------------------VARIABLES GLOBALES------------------------------------- |
VaLaraC | 2:773082426491 | 46 | int rap;//Pendiente |
VaLaraC | 0:9aa960516df7 | 47 | int RSTEP = 5; |
VaLaraC | 0:9aa960516df7 | 48 | double abajo=7; |
VaLaraC | 0:9aa960516df7 | 49 | double arriba=0; |
VaLaraC | 0:9aa960516df7 | 50 | double k,l,r,tp=50,paso=0; |
VaLaraC | 0:9aa960516df7 | 51 | int p=0; |
VaLaraC | 2:773082426491 | 52 | uint8_t estado = 0; |
VaLaraC | 0:9aa960516df7 | 53 | |
VaLaraC | 0:9aa960516df7 | 54 | //***************************************************************************** |
VaLaraC | 0:9aa960516df7 | 55 | // COMANDO MOVER MOTOR |
VaLaraC | 0:9aa960516df7 | 56 | // |POS 1|POS 2|POS 3|POS 4| POS 5| POS 6| POS 7| |
VaLaraC | 0:9aa960516df7 | 57 | // | < | #C | a | b | c | d | > | |
VaLaraC | 0:9aa960516df7 | 58 | // |
VaLaraC | 0:9aa960516df7 | 59 | // #C -> indica el comando |
VaLaraC | 0:9aa960516df7 | 60 | // a,b,c,d parametros del comando |
VaLaraC | 0:9aa960516df7 | 61 | // <,> -> inicio, y fin de comando |
VaLaraC | 0:9aa960516df7 | 62 | // el inicio de comando no se almacena en el buffer |
VaLaraC | 0:9aa960516df7 | 63 | //***************************************************************************** |
VaLaraC | 0:9aa960516df7 | 64 | |
VaLaraC | 2:773082426491 | 65 | //--------------------------DETERMINACION TAMAÑO DE BUFFER------------------------ |
VaLaraC | 0:9aa960516df7 | 66 | uint8_t buffer_command[BUFF_SIZE]={0,0,0,0,0,0}; |
VaLaraC | 0:9aa960516df7 | 67 | float buffer_POS [BUFF_POS]= {0,0,0,0,0,0}; |
VaLaraC | 0:9aa960516df7 | 68 | |
VaLaraC | 2:773082426491 | 69 | //--------------------FUNCIONES PARA COMANDO DE BUFFER---------------------------- |
VaLaraC | 0:9aa960516df7 | 70 | |
VaLaraC | 0:9aa960516df7 | 71 | int coord2us(float coord) |
VaLaraC | 0:9aa960516df7 | 72 | { |
VaLaraC | 0:9aa960516df7 | 73 | if(0 <= coord <= MAXPOS) |
VaLaraC | 0:9aa960516df7 | 74 | return int(750+coord*1900/50);// u6 |
VaLaraC | 0:9aa960516df7 | 75 | return 750; |
VaLaraC | 0:9aa960516df7 | 76 | } |
VaLaraC | 0:9aa960516df7 | 77 | void print_num(uint8_t val) |
VaLaraC | 0:9aa960516df7 | 78 | { |
VaLaraC | 0:9aa960516df7 | 79 | if (val <10) |
VaLaraC | 0:9aa960516df7 | 80 | command.putc(val+0x30); |
VaLaraC | 0:9aa960516df7 | 81 | else |
VaLaraC | 0:9aa960516df7 | 82 | command.putc(val-9+0x40); |
VaLaraC | 0:9aa960516df7 | 83 | } |
VaLaraC | 0:9aa960516df7 | 84 | void print_bin2hex (uint8_t val) |
VaLaraC | 0:9aa960516df7 | 85 | { |
VaLaraC | 0:9aa960516df7 | 86 | command.printf(" 0x"); |
VaLaraC | 0:9aa960516df7 | 87 | print_num(val>>4); |
VaLaraC | 0:9aa960516df7 | 88 | print_num(val&0x0f); |
VaLaraC | 0:9aa960516df7 | 89 | } |
VaLaraC | 0:9aa960516df7 | 90 | void Read_command() |
VaLaraC | 0:9aa960516df7 | 91 | { |
VaLaraC | 0:9aa960516df7 | 92 | for (uint8_t i=0; i<BUFF_SIZE;i++) |
VaLaraC | 0:9aa960516df7 | 93 | { |
VaLaraC | 0:9aa960516df7 | 94 | buffer_command[i]=command.getc(); |
VaLaraC | 0:9aa960516df7 | 95 | |
VaLaraC | 0:9aa960516df7 | 96 | } |
VaLaraC | 0:9aa960516df7 | 97 | } |
VaLaraC | 0:9aa960516df7 | 98 | |
VaLaraC | 0:9aa960516df7 | 99 | void echo_command() |
VaLaraC | 0:9aa960516df7 | 100 | { |
VaLaraC | 0:9aa960516df7 | 101 | for (uint8_t i=0; i<BUFF_SIZE;i++) |
VaLaraC | 0:9aa960516df7 | 102 | { |
VaLaraC | 0:9aa960516df7 | 103 | print_bin2hex(buffer_command[i]); |
VaLaraC | 0:9aa960516df7 | 104 | } |
VaLaraC | 0:9aa960516df7 | 105 | } |
VaLaraC | 0:9aa960516df7 | 106 | uint8_t check_command() |
VaLaraC | 0:9aa960516df7 | 107 | { |
VaLaraC | 0:9aa960516df7 | 108 | if (buffer_command[BUFF_SIZE-1]== '>') |
VaLaraC | 0:9aa960516df7 | 109 | return 1; |
VaLaraC | 0:9aa960516df7 | 110 | return 0; |
VaLaraC | 0:9aa960516df7 | 111 | } |
VaLaraC | 0:9aa960516df7 | 112 | void command_led(uint8_t tm) |
VaLaraC | 0:9aa960516df7 | 113 | { |
VaLaraC | 0:9aa960516df7 | 114 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 115 | command.printf("%i, segundos", tm); |
VaLaraC | 0:9aa960516df7 | 116 | #endif |
VaLaraC | 0:9aa960516df7 | 117 | led=1; |
VaLaraC | 0:9aa960516df7 | 118 | wait(tm); |
VaLaraC | 0:9aa960516df7 | 119 | led=0; |
VaLaraC | 0:9aa960516df7 | 120 | } |
VaLaraC | 0:9aa960516df7 | 121 | void draw() |
VaLaraC | 0:9aa960516df7 | 122 | { |
VaLaraC | 0:9aa960516df7 | 123 | myServoZ.pulsewidth_us(POSDRAW); |
VaLaraC | 0:9aa960516df7 | 124 | wait(1); |
VaLaraC | 0:9aa960516df7 | 125 | } |
VaLaraC | 0:9aa960516df7 | 126 | void nodraw() |
VaLaraC | 0:9aa960516df7 | 127 | { |
VaLaraC | 0:9aa960516df7 | 128 | myServoZ.pulsewidth_us(MAXPOS); |
VaLaraC | 0:9aa960516df7 | 129 | wait(1); |
VaLaraC | 0:9aa960516df7 | 130 | } |
VaLaraC | 0:9aa960516df7 | 131 | uint8_t SSTIME = 100; |
VaLaraC | 0:9aa960516df7 | 132 | void tiempo_de_paso(int SST) |
VaLaraC | 0:9aa960516df7 | 133 | { |
VaLaraC | 2:773082426491 | 134 | |
VaLaraC | 2:773082426491 | 135 | |
VaLaraC | 2:773082426491 | 136 | //-------------------------CONFIURACION SSTIME/VERTEX----------------------------- |
VaLaraC | 2:773082426491 | 137 | SSTIME=SST; |
VaLaraC | 0:9aa960516df7 | 138 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 139 | command.printf("\nTiempo en pasos definida en:%i\n",SSTIME); |
VaLaraC | 0:9aa960516df7 | 140 | #endif |
VaLaraC | 0:9aa960516df7 | 141 | } |
VaLaraC | 0:9aa960516df7 | 142 | void vertex2d(float x, float y, float z) |
VaLaraC | 0:9aa960516df7 | 143 | { |
VaLaraC | 0:9aa960516df7 | 144 | int pulseX = coord2us(x); |
VaLaraC | 0:9aa960516df7 | 145 | int pulseY = coord2us(y); |
VaLaraC | 0:9aa960516df7 | 146 | int pulseZ = coord2us(z); |
VaLaraC | 0:9aa960516df7 | 147 | myServoX.pulsewidth_us(pulseX); |
VaLaraC | 0:9aa960516df7 | 148 | myServoY.pulsewidth_us(pulseY); |
VaLaraC | 0:9aa960516df7 | 149 | myServoZ.pulsewidth_us(pulseZ); |
VaLaraC | 0:9aa960516df7 | 150 | wait_ms(SSTIME); |
VaLaraC | 0:9aa960516df7 | 151 | } |
VaLaraC | 0:9aa960516df7 | 152 | |
VaLaraC | 2:773082426491 | 153 | //--------------------------DECLARACION MEMORIA DE SERVOS------------------------- |
VaLaraC | 0:9aa960516df7 | 154 | uint8_t posx_old=0; // posición anterior del eje X |
VaLaraC | 0:9aa960516df7 | 155 | uint8_t posy_old=0; // posición anterior del eje Y |
VaLaraC | 0:9aa960516df7 | 156 | uint8_t posz_old=0; // posición anterior del eje Y |
VaLaraC | 0:9aa960516df7 | 157 | uint8_t ss_time=100; // tiempo de espera para moverse 1 mm en microsegundos |
VaLaraC | 2:773082426491 | 158 | //-------------------------VARIABLES SSTIME/RESOLUCION---------------------------- |
VaLaraC | 0:9aa960516df7 | 159 | void put_sstime(uint8_t vtime){ |
VaLaraC | 0:9aa960516df7 | 160 | ss_time=vtime; |
VaLaraC | 0:9aa960516df7 | 161 | } |
VaLaraC | 0:9aa960516df7 | 162 | void sstime(uint8_t x, uint8_t y, uint8_t z) |
VaLaraC | 0:9aa960516df7 | 163 | { |
VaLaraC | 0:9aa960516df7 | 164 | double dx=abs(x-posx_old); |
VaLaraC | 0:9aa960516df7 | 165 | double dy=abs(y-posy_old); |
VaLaraC | 0:9aa960516df7 | 166 | double dz=abs(z-posz_old); |
VaLaraC | 0:9aa960516df7 | 167 | double dist= sqrt(dx*dx+dy*dy+dz*dz); |
VaLaraC | 0:9aa960516df7 | 168 | wait_ms((int)(ss_time*dist)); |
VaLaraC | 0:9aa960516df7 | 169 | posx_old=x; |
VaLaraC | 0:9aa960516df7 | 170 | posy_old=y; |
VaLaraC | 0:9aa960516df7 | 171 | posy_old=z; |
VaLaraC | 0:9aa960516df7 | 172 | } |
VaLaraC | 0:9aa960516df7 | 173 | void initdraw(float x, float y) |
VaLaraC | 0:9aa960516df7 | 174 | { |
VaLaraC | 0:9aa960516df7 | 175 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 176 | Sdebug.printf("inicia dibujo \n"); |
VaLaraC | 0:9aa960516df7 | 177 | #endif |
VaLaraC | 0:9aa960516df7 | 178 | vertex2d (x,y,abajo); |
VaLaraC | 0:9aa960516df7 | 179 | wait(1); |
VaLaraC | 0:9aa960516df7 | 180 | draw(); |
VaLaraC | 0:9aa960516df7 | 181 | } |
VaLaraC | 0:9aa960516df7 | 182 | |
VaLaraC | 0:9aa960516df7 | 183 | void resolucion(int res){ |
VaLaraC | 0:9aa960516df7 | 184 | RSTEP = res; |
VaLaraC | 0:9aa960516df7 | 185 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 186 | command.printf("Resolucion definida en = %i \n", RSTEP); |
VaLaraC | 0:9aa960516df7 | 187 | #endif |
VaLaraC | 0:9aa960516df7 | 188 | } |
VaLaraC | 2:773082426491 | 189 | |
VaLaraC | 2:773082426491 | 190 | //---------------------------------FUNCION HOME----------------------------------- |
VaLaraC | 0:9aa960516df7 | 191 | void home() |
VaLaraC | 0:9aa960516df7 | 192 | { |
VaLaraC | 0:9aa960516df7 | 193 | vertex2d(0,0,0); |
VaLaraC | 0:9aa960516df7 | 194 | wait_ms(rap); |
VaLaraC | 0:9aa960516df7 | 195 | } |
VaLaraC | 0:9aa960516df7 | 196 | void maxpos() |
VaLaraC | 0:9aa960516df7 | 197 | { |
VaLaraC | 0:9aa960516df7 | 198 | vertex2d(250,250,150); |
VaLaraC | 0:9aa960516df7 | 199 | } |
VaLaraC | 2:773082426491 | 200 | |
VaLaraC | 2:773082426491 | 201 | //---------------------------------FUNCION DOT----------------------------------- |
VaLaraC | 0:9aa960516df7 | 202 | void punto(uint8_t x, uint8_t y) |
VaLaraC | 0:9aa960516df7 | 203 | { |
VaLaraC | 0:9aa960516df7 | 204 | command.printf("Coord x= %i, coord y=%i \n",x,y); |
VaLaraC | 0:9aa960516df7 | 205 | vertex2d(x,y,0); |
VaLaraC | 0:9aa960516df7 | 206 | wait_ms(1000); |
VaLaraC | 0:9aa960516df7 | 207 | vertex2d(x,y,11); |
VaLaraC | 0:9aa960516df7 | 208 | wait_ms(1000); |
VaLaraC | 0:9aa960516df7 | 209 | vertex2d(x,y,0); |
VaLaraC | 0:9aa960516df7 | 210 | wait_ms(1000); |
VaLaraC | 0:9aa960516df7 | 211 | home(); |
VaLaraC | 0:9aa960516df7 | 212 | } |
VaLaraC | 0:9aa960516df7 | 213 | |
VaLaraC | 2:773082426491 | 214 | |
VaLaraC | 2:773082426491 | 215 | //------------------------------FUNCION LINE-------------------------------------- |
VaLaraC | 0:9aa960516df7 | 216 | void line(float xi, float xf, float yi, float yf) |
VaLaraC | 0:9aa960516df7 | 217 | { |
VaLaraC | 0:9aa960516df7 | 218 | // los parametros son coordenadas iniciales y finales de la linea en milimetros |
VaLaraC | 0:9aa960516df7 | 219 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 220 | Sdebug.printf("linea Xi= %f,Xf= %f,Yi= %f,Yf= %f \n", xi,xf,yi,yf); |
VaLaraC | 0:9aa960516df7 | 221 | #endif |
VaLaraC | 0:9aa960516df7 | 222 | float xp; float yp; |
VaLaraC | 0:9aa960516df7 | 223 | float m= (yf-yi)/(xf-xi); |
VaLaraC | 0:9aa960516df7 | 224 | float b=(yf-m*xf); |
VaLaraC | 0:9aa960516df7 | 225 | vertex2d(0,0,4); |
VaLaraC | 0:9aa960516df7 | 226 | wait(1); |
VaLaraC | 0:9aa960516df7 | 227 | vertex2d(xi,yi,abajo); |
VaLaraC | 0:9aa960516df7 | 228 | wait(1); |
VaLaraC | 0:9aa960516df7 | 229 | for (xp =xi;xp<=xf;xp+=RSTEP) |
VaLaraC | 0:9aa960516df7 | 230 | { |
VaLaraC | 0:9aa960516df7 | 231 | yp =m*xp+b; |
VaLaraC | 0:9aa960516df7 | 232 | vertex2d(xp,yp,abajo); |
VaLaraC | 0:9aa960516df7 | 233 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 234 | Sdebug.printf("coord X = %f,coord Y = %f \n", xp,yp); |
VaLaraC | 0:9aa960516df7 | 235 | #endif |
VaLaraC | 0:9aa960516df7 | 236 | } |
VaLaraC | 0:9aa960516df7 | 237 | nodraw(); |
VaLaraC | 0:9aa960516df7 | 238 | home(); |
VaLaraC | 0:9aa960516df7 | 239 | } |
VaLaraC | 2:773082426491 | 240 | |
VaLaraC | 2:773082426491 | 241 | //-----------------------------FUNCION RECTANGULO--------------------------------- |
VaLaraC | 0:9aa960516df7 | 242 | void rectangle(uint8_t xi, uint8_t yi,uint8_t a, uint8_t h) |
VaLaraC | 0:9aa960516df7 | 243 | { |
VaLaraC | 0:9aa960516df7 | 244 | int x,y; |
VaLaraC | 0:9aa960516df7 | 245 | x = a+ xi; |
VaLaraC | 0:9aa960516df7 | 246 | y = h+ yi; |
VaLaraC | 0:9aa960516df7 | 247 | |
VaLaraC | 0:9aa960516df7 | 248 | vertex2d(xi,yi,arriba); |
VaLaraC | 0:9aa960516df7 | 249 | wait_ms(600); |
VaLaraC | 0:9aa960516df7 | 250 | vertex2d(xi,yi,abajo); |
VaLaraC | 0:9aa960516df7 | 251 | wait_ms(600); |
VaLaraC | 0:9aa960516df7 | 252 | vertex2d(x,yi,abajo); |
VaLaraC | 0:9aa960516df7 | 253 | wait_ms(600); |
VaLaraC | 0:9aa960516df7 | 254 | vertex2d(x,y,abajo); |
VaLaraC | 0:9aa960516df7 | 255 | wait_ms(600); |
VaLaraC | 0:9aa960516df7 | 256 | vertex2d(xi,y,abajo); |
VaLaraC | 0:9aa960516df7 | 257 | wait_ms(600); |
VaLaraC | 0:9aa960516df7 | 258 | vertex2d(xi,yi,abajo); |
VaLaraC | 0:9aa960516df7 | 259 | wait_ms(600); |
VaLaraC | 0:9aa960516df7 | 260 | home(); |
VaLaraC | 0:9aa960516df7 | 261 | } |
VaLaraC | 2:773082426491 | 262 | |
VaLaraC | 2:773082426491 | 263 | //-----------------------------FUNCION CIRCULO----------------------------------- |
VaLaraC | 0:9aa960516df7 | 264 | void circle(uint8_t x1, uint8_t y1,uint8_t r) |
VaLaraC | 0:9aa960516df7 | 265 | { |
VaLaraC | 0:9aa960516df7 | 266 | double x2,y2,i,j; |
VaLaraC | 0:9aa960516df7 | 267 | vertex2d(x1 ,y1,arriba); |
VaLaraC | 0:9aa960516df7 | 268 | wait(1); |
VaLaraC | 0:9aa960516df7 | 269 | wait_ms(rap); |
VaLaraC | 0:9aa960516df7 | 270 | |
VaLaraC | 0:9aa960516df7 | 271 | for ( x2=0;x2<=r;x2++){ |
VaLaraC | 0:9aa960516df7 | 272 | y2= pow(((r*r)-(x2*x2)),0.5); |
VaLaraC | 0:9aa960516df7 | 273 | i= x2+x1; |
VaLaraC | 0:9aa960516df7 | 274 | j=y1+y2; |
VaLaraC | 0:9aa960516df7 | 275 | vertex2d(i ,j,abajo) ; |
VaLaraC | 0:9aa960516df7 | 276 | wait_ms(30); |
VaLaraC | 0:9aa960516df7 | 277 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 278 | Sdebug.printf("coord X = %f,coord Y = %f \n", i,j); |
VaLaraC | 0:9aa960516df7 | 279 | #endif |
VaLaraC | 0:9aa960516df7 | 280 | } |
VaLaraC | 0:9aa960516df7 | 281 | |
VaLaraC | 0:9aa960516df7 | 282 | for ( x2=r;x2>=0;x2--){ |
VaLaraC | 0:9aa960516df7 | 283 | y2= pow(((r*r)-(x2*x2)),0.5); |
VaLaraC | 0:9aa960516df7 | 284 | i= x2+x1; |
VaLaraC | 0:9aa960516df7 | 285 | j= y1 - y2; |
VaLaraC | 0:9aa960516df7 | 286 | vertex2d(i ,j,abajo) ; |
VaLaraC | 0:9aa960516df7 | 287 | wait_ms(30); |
VaLaraC | 0:9aa960516df7 | 288 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 289 | Sdebug.printf("coord X = %f,coord Y = %f \n", i,j); |
VaLaraC | 0:9aa960516df7 | 290 | #endif |
VaLaraC | 0:9aa960516df7 | 291 | } |
VaLaraC | 0:9aa960516df7 | 292 | |
VaLaraC | 0:9aa960516df7 | 293 | for ( x2=0;x2<=r;x2++){ |
VaLaraC | 0:9aa960516df7 | 294 | y2= pow(((r*r)-(x2*x2)),0.5); |
VaLaraC | 0:9aa960516df7 | 295 | i= x1- x2; |
VaLaraC | 0:9aa960516df7 | 296 | j= y1 - y2; |
VaLaraC | 0:9aa960516df7 | 297 | vertex2d(i ,j,abajo) ; |
VaLaraC | 0:9aa960516df7 | 298 | wait_ms(30); |
VaLaraC | 0:9aa960516df7 | 299 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 300 | Sdebug.printf("coord X = %f,coord Y = %f \n", i,j); |
VaLaraC | 0:9aa960516df7 | 301 | #endif |
VaLaraC | 0:9aa960516df7 | 302 | } |
VaLaraC | 0:9aa960516df7 | 303 | for ( x2=r;x2>=0;x2--){ |
VaLaraC | 0:9aa960516df7 | 304 | y2= pow(((r*r)-(x2*x2)),0.5); |
VaLaraC | 0:9aa960516df7 | 305 | i= x1-x2; |
VaLaraC | 0:9aa960516df7 | 306 | j=y1+y2; |
VaLaraC | 0:9aa960516df7 | 307 | vertex2d(i ,j,abajo) ; |
VaLaraC | 0:9aa960516df7 | 308 | wait_ms(30); |
VaLaraC | 0:9aa960516df7 | 309 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 310 | Sdebug.printf("coord X = %f,coord Y = %f \n", i,j); |
VaLaraC | 0:9aa960516df7 | 311 | #endif |
VaLaraC | 0:9aa960516df7 | 312 | } |
VaLaraC | 0:9aa960516df7 | 313 | vertex2d(i ,j,arriba) ; |
VaLaraC | 0:9aa960516df7 | 314 | wait_ms(rap); |
VaLaraC | 0:9aa960516df7 | 315 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 316 | Sdebug.printf("coord X = %f,coord Y = %f \n", i,j); |
VaLaraC | 0:9aa960516df7 | 317 | #endif |
VaLaraC | 0:9aa960516df7 | 318 | |
VaLaraC | 0:9aa960516df7 | 319 | if(x2==r) |
VaLaraC | 0:9aa960516df7 | 320 | { |
VaLaraC | 0:9aa960516df7 | 321 | wait(1); |
VaLaraC | 0:9aa960516df7 | 322 | home(); |
VaLaraC | 0:9aa960516df7 | 323 | } |
VaLaraC | 0:9aa960516df7 | 324 | |
jonnas58328 | 3:c7e3f75d4f10 | 325 | } |
VaLaraC | 2:773082426491 | 326 | //-------------------------------FUNCION REANUDAR--------------------------------- |
VaLaraC | 0:9aa960516df7 | 327 | void reanudar(){ |
VaLaraC | 0:9aa960516df7 | 328 | |
VaLaraC | 2:773082426491 | 329 | command.printf("piccolo reanudando \n"); |
VaLaraC | 2:773082426491 | 330 | wait (1); |
VaLaraC | 2:773082426491 | 331 | return; |
VaLaraC | 2:773082426491 | 332 | |
VaLaraC | 0:9aa960516df7 | 333 | } |
VaLaraC | 2:773082426491 | 334 | //------------------------------FUNCION PAUSA------------------------------------ |
VaLaraC | 0:9aa960516df7 | 335 | void pause(){ |
VaLaraC | 1:a9b3fdab473e | 336 | |
VaLaraC | 2:773082426491 | 337 | led = !led; |
VaLaraC | 2:773082426491 | 338 | command.printf("piccolo en pausa \n"); |
VaLaraC | 1:a9b3fdab473e | 339 | wait (5); |
jonnas58328 | 3:c7e3f75d4f10 | 340 | //return; |
VaLaraC | 2:773082426491 | 341 | |
VaLaraC | 0:9aa960516df7 | 342 | } |
VaLaraC | 2:773082426491 | 343 | |
VaLaraC | 2:773082426491 | 344 | //-------------------------------FUNCION PARE------------------------------------- |
VaLaraC | 0:9aa960516df7 | 345 | void stop() //Funcion para detener el programa |
VaLaraC | 0:9aa960516df7 | 346 | { |
jonnas58328 | 3:c7e3f75d4f10 | 347 | command.printf("piccolo en Stop \n"); |
jonnas58328 | 3:c7e3f75d4f10 | 348 | home(); |
VaLaraC | 0:9aa960516df7 | 349 | exit(0); |
jonnas58328 | 3:c7e3f75d4f10 | 350 | |
jonnas58328 | 3:c7e3f75d4f10 | 351 | |
VaLaraC | 0:9aa960516df7 | 352 | } |
VaLaraC | 0:9aa960516df7 | 353 | |
VaLaraC | 0:9aa960516df7 | 354 | void command_exe() |
VaLaraC | 0:9aa960516df7 | 355 | { |
VaLaraC | 2:773082426491 | 356 | |
VaLaraC | 2:773082426491 | 357 | //-------------------------ASIGNACION EN SWTICH CASE------------------------------ |
VaLaraC | 0:9aa960516df7 | 358 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 359 | command.printf("Ejecutando comando: "); |
VaLaraC | 0:9aa960516df7 | 360 | #endif |
VaLaraC | 0:9aa960516df7 | 361 | switch (buffer_command[COMM_N]) |
VaLaraC | 0:9aa960516df7 | 362 | { |
VaLaraC | 0:9aa960516df7 | 363 | case (LED): |
VaLaraC | 0:9aa960516df7 | 364 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 365 | command.printf("LED on\n"); |
VaLaraC | 0:9aa960516df7 | 366 | #endif |
VaLaraC | 0:9aa960516df7 | 367 | command_led(buffer_command[INITPARAMETER]); |
VaLaraC | 0:9aa960516df7 | 368 | break; |
VaLaraC | 0:9aa960516df7 | 369 | |
VaLaraC | 0:9aa960516df7 | 370 | case (PUNTO): |
VaLaraC | 0:9aa960516df7 | 371 | punto(buffer_command[INITPARAMETER],buffer_command[INITPARAMETER+1]); |
VaLaraC | 0:9aa960516df7 | 372 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 373 | command.printf("Dibujando Punto"); |
VaLaraC | 0:9aa960516df7 | 374 | #endif |
VaLaraC | 0:9aa960516df7 | 375 | break; |
VaLaraC | 0:9aa960516df7 | 376 | |
VaLaraC | 0:9aa960516df7 | 377 | case LINE: |
VaLaraC | 0:9aa960516df7 | 378 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 379 | command.printf("Dibujando Linea\n"); |
VaLaraC | 0:9aa960516df7 | 380 | #endif |
VaLaraC | 0:9aa960516df7 | 381 | line(buffer_command[INITPARAMETER],buffer_command[INITPARAMETER+1],buffer_command[INITPARAMETER+2],buffer_command[INITPARAMETER+3]); |
VaLaraC | 0:9aa960516df7 | 382 | |
VaLaraC | 0:9aa960516df7 | 383 | |
VaLaraC | 0:9aa960516df7 | 384 | break; |
VaLaraC | 0:9aa960516df7 | 385 | |
VaLaraC | 0:9aa960516df7 | 386 | case RECTANGLE: |
VaLaraC | 0:9aa960516df7 | 387 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 388 | command.printf("Dibujando Rectangulo\n"); |
VaLaraC | 0:9aa960516df7 | 389 | #endif |
VaLaraC | 0:9aa960516df7 | 390 | rectangle(buffer_command[INITPARAMETER],buffer_command[INITPARAMETER+1],buffer_command[INITPARAMETER+2],buffer_command[INITPARAMETER+3]); |
VaLaraC | 0:9aa960516df7 | 391 | break; |
VaLaraC | 0:9aa960516df7 | 392 | |
VaLaraC | 0:9aa960516df7 | 393 | case (CIRCLE): |
VaLaraC | 0:9aa960516df7 | 394 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 395 | command.printf("Dibujando Circulo\n"); |
VaLaraC | 0:9aa960516df7 | 396 | #endif |
VaLaraC | 0:9aa960516df7 | 397 | circle(buffer_command[INITPARAMETER],buffer_command[INITPARAMETER+1],buffer_command[INITPARAMETER+2]); |
VaLaraC | 0:9aa960516df7 | 398 | break; |
VaLaraC | 0:9aa960516df7 | 399 | |
VaLaraC | 0:9aa960516df7 | 400 | case (STOP): |
VaLaraC | 0:9aa960516df7 | 401 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 402 | command.printf(" STOP\n"); |
VaLaraC | 0:9aa960516df7 | 403 | #endif |
VaLaraC | 0:9aa960516df7 | 404 | break; |
VaLaraC | 0:9aa960516df7 | 405 | |
VaLaraC | 0:9aa960516df7 | 406 | case (PAUSE): |
VaLaraC | 0:9aa960516df7 | 407 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 408 | command.printf("programa pausado\n"); |
VaLaraC | 0:9aa960516df7 | 409 | #endif |
VaLaraC | 0:9aa960516df7 | 410 | pause(); |
VaLaraC | 0:9aa960516df7 | 411 | break; |
VaLaraC | 0:9aa960516df7 | 412 | |
VaLaraC | 0:9aa960516df7 | 413 | case (REANUDAR): |
VaLaraC | 0:9aa960516df7 | 414 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 415 | command.printf("draw reanudar programa\n"); |
VaLaraC | 0:9aa960516df7 | 416 | #endif |
VaLaraC | 0:9aa960516df7 | 417 | reanudar(); |
VaLaraC | 0:9aa960516df7 | 418 | break; |
VaLaraC | 0:9aa960516df7 | 419 | |
VaLaraC | 0:9aa960516df7 | 420 | case (RESOLUCION): |
VaLaraC | 0:9aa960516df7 | 421 | resolucion(buffer_command[INITPARAMETER]); |
VaLaraC | 0:9aa960516df7 | 422 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 423 | command.printf("Resolucion definida"); |
VaLaraC | 0:9aa960516df7 | 424 | #endif |
VaLaraC | 0:9aa960516df7 | 425 | break; |
VaLaraC | 0:9aa960516df7 | 426 | case (HOME): |
VaLaraC | 0:9aa960516df7 | 427 | home(); |
VaLaraC | 0:9aa960516df7 | 428 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 429 | command.printf("Posicion Home"); |
VaLaraC | 0:9aa960516df7 | 430 | #endif |
VaLaraC | 0:9aa960516df7 | 431 | break; |
VaLaraC | 0:9aa960516df7 | 432 | |
VaLaraC | 0:9aa960516df7 | 433 | case (TIEMPO_DE_PASO): |
VaLaraC | 0:9aa960516df7 | 434 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 435 | command.printf("Nuevo tiempo para paso:\res"); |
VaLaraC | 0:9aa960516df7 | 436 | #endif |
VaLaraC | 0:9aa960516df7 | 437 | tiempo_de_paso(buffer_command[INITPARAMETER]); |
VaLaraC | 0:9aa960516df7 | 438 | break; |
VaLaraC | 0:9aa960516df7 | 439 | |
VaLaraC | 0:9aa960516df7 | 440 | default: |
VaLaraC | 0:9aa960516df7 | 441 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 442 | command.printf("comando no encontrado\n"); |
VaLaraC | 0:9aa960516df7 | 443 | #endif |
VaLaraC | 0:9aa960516df7 | 444 | |
VaLaraC | 0:9aa960516df7 | 445 | } |
VaLaraC | 0:9aa960516df7 | 446 | } |
VaLaraC | 0:9aa960516df7 | 447 | |
VaLaraC | 2:773082426491 | 448 | //--------------------------***PENDIENTE***--------------------------------------- |
VaLaraC | 2:773082426491 | 449 | void Rx_interrupcion(){ |
VaLaraC | 2:773082426491 | 450 | |
VaLaraC | 2:773082426491 | 451 | char p = command.getc(); |
VaLaraC | 2:773082426491 | 452 | |
VaLaraC | 2:773082426491 | 453 | command.printf("picolo en pausa %c\n",p); |
VaLaraC | 2:773082426491 | 454 | wait_ms(2000); |
VaLaraC | 2:773082426491 | 455 | return ; |
VaLaraC | 2:773082426491 | 456 | |
VaLaraC | 2:773082426491 | 457 | } |
VaLaraC | 2:773082426491 | 458 | |
VaLaraC | 2:773082426491 | 459 | |
VaLaraC | 2:773082426491 | 460 | //----------------------------------MAIN DE PROGRAMA------------------------------ |
VaLaraC | 2:773082426491 | 461 | int main() { |
VaLaraC | 2:773082426491 | 462 | #if DEBUG |
VaLaraC | 2:773082426491 | 463 | command.printf("inicio con debug\n"); |
VaLaraC | 2:773082426491 | 464 | #else |
VaLaraC | 2:773082426491 | 465 | command.printf("inicio sin debug\n"); |
VaLaraC | 2:773082426491 | 466 | #endif |
VaLaraC | 1:a9b3fdab473e | 467 | uint8_t val; |
VaLaraC | 0:9aa960516df7 | 468 | // mybutton.rise(&stop); |
VaLaraC | 0:9aa960516df7 | 469 | while(1){ |
VaLaraC | 0:9aa960516df7 | 470 | val=command.getc(); |
VaLaraC | 0:9aa960516df7 | 471 | if (val== '<'){ |
VaLaraC | 0:9aa960516df7 | 472 | Read_command(); |
VaLaraC | 2:773082426491 | 473 | mybutton.fall(&pause); |
VaLaraC | 2:773082426491 | 474 | mybutton.rise(&reanudar); |
jonnas58328 | 3:c7e3f75d4f10 | 475 | boton.fall(&stop); |
VaLaraC | 0:9aa960516df7 | 476 | if (check_command()){ |
VaLaraC | 0:9aa960516df7 | 477 | command_exe(); |
VaLaraC | 0:9aa960516df7 | 478 | } |
VaLaraC | 0:9aa960516df7 | 479 | else{ |
VaLaraC | 0:9aa960516df7 | 480 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 481 | command.printf("\n ERROR COMANDO -> "); |
VaLaraC | 0:9aa960516df7 | 482 | echo_command(); |
VaLaraC | 0:9aa960516df7 | 483 | #endif |
VaLaraC | 0:9aa960516df7 | 484 | } |
VaLaraC | 0:9aa960516df7 | 485 | } |
VaLaraC | 0:9aa960516df7 | 486 | else{ |
VaLaraC | 0:9aa960516df7 | 487 | #if DEBUG |
VaLaraC | 0:9aa960516df7 | 488 | command.printf("error de inicio de trama: "); |
VaLaraC | 0:9aa960516df7 | 489 | command.putc(val); |
VaLaraC | 0:9aa960516df7 | 490 | #endif |
VaLaraC | 1:a9b3fdab473e | 491 | |
VaLaraC | 1:a9b3fdab473e | 492 | } |
VaLaraC | 1:a9b3fdab473e | 493 | } |
VaLaraC | 2:773082426491 | 494 | |
VaLaraC | 0:9aa960516df7 | 495 | } |
VaLaraC | 0:9aa960516df7 | 496 | |
VaLaraC | 0:9aa960516df7 | 497 | |
VaLaraC | 1:a9b3fdab473e | 498 | |
VaLaraC | 0:9aa960516df7 | 499 | |
VaLaraC | 0:9aa960516df7 | 500 |