Proyecto de Tesis en Mecatrónica. Universidad Técnica del Norte. Ernesto Palacios <mecatronica.mid@gmail.com>

Dependencies:   EthernetNetIf HTTPServer QEI_hw RPCInterface mbed

Committer:
Yo_Robot
Date:
Thu Jul 17 17:12:41 2014 +0000
Revision:
37:20f4a737cc13
Parent:
34:bdf918bc9b59
Programa final para el deslizador lineal UTN. version 2.0  - documentaci?n escibir a mecatronica.mid@gmail.com

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Yo_Robot 4:552beeda4722 1 /**
Yo_Robot 4:552beeda4722 2 * @file setup.cpp
Yo_Robot 4:552beeda4722 3 * @author Ernesto Palacios
Yo_Robot 20:4b154134ab20 4 * @brief Codigo Fuente de las funciones para el deslizador.
Yo_Robot 4:552beeda4722 5 *
Yo_Robot 4:552beeda4722 6 * Created on 25 de Marzo de 2012
Yo_Robot 4:552beeda4722 7 *
Yo_Robot 4:552beeda4722 8 * Licencia GPL v3.0
Yo_Robot 4:552beeda4722 9 * http://www.gnu.org/licenses/gpl-3.0.html
Yo_Robot 4:552beeda4722 10 */
Yo_Robot 4:552beeda4722 11
Yo_Robot 25:1910a55ff0a3 12 #include "mbed.h"
Yo_Robot 25:1910a55ff0a3 13 #include "qeihw.h"
Yo_Robot 3:8d5a9e3cd680 14 #include "setup.h"
Yo_Robot 18:cf1e07d82630 15 #include "EthernetNetIf.h"
Yo_Robot 25:1910a55ff0a3 16
Yo_Robot 3:8d5a9e3cd680 17
Yo_Robot 24:a1d16835201c 18 extern Serial pc; // Salida Serial de mbed
Yo_Robot 24:a1d16835201c 19 extern Serial RS_232; // Salida Serial a MAX232
Yo_Robot 25:1910a55ff0a3 20 extern QEIHW encoder;
Yo_Robot 24:a1d16835201c 21 extern Timer crono; // Cronometro interno del microcontrolador
Yo_Robot 24:a1d16835201c 22 extern DigitalIn isPC; // Bit de configuracion serial en la placa
Yo_Robot 12:c02b08dacc45 23 extern DigitalOut pin_son; // SON
Yo_Robot 12:c02b08dacc45 24 extern DigitalOut pin_dir; // SIGN+
Yo_Robot 12:c02b08dacc45 25 extern InterruptIn pin_alm; // ALM
Yo_Robot 12:c02b08dacc45 26 extern AnalogOut aout; // +-10V
Yo_Robot 22:d5431fff164b 27 extern DigitalOut led_verde; // Led verde del conector Ethernet
Yo_Robot 24:a1d16835201c 28 extern DigitalOut led_rojo; // Led naranja del conector Ethernet
Yo_Robot 30:413d1a6648b5 29 extern InterruptIn limite_1;
Yo_Robot 30:413d1a6648b5 30 extern InterruptIn limite_2;
Yo_Robot 30:413d1a6648b5 31 extern InterruptIn limite_3;
Yo_Robot 30:413d1a6648b5 32 extern InterruptIn limite_4;
Yo_Robot 20:4b154134ab20 33
Yo_Robot 15:a1ffa32ce9d1 34 int fq_posicion = 10000; // Variable global donde se almacenara
Yo_Robot 15:a1ffa32ce9d1 35 // la velocidad de posicionamiento en Hz
Yo_Robot 24:a1d16835201c 36 float t_alto; // para el posicionamiento del motor
Yo_Robot 23:2126e38bb48c 37
Yo_Robot 26:dad0b2031173 38 int fq_actual = 0; // Ultimo valor seteado para el tren de pulsos
Yo_Robot 22:d5431fff164b 39
Yo_Robot 32:4483d6c225e5 40 int bandera_inicio = 0;
Yo_Robot 33:e6ff02c3e0f5 41
Yo_Robot 29:52932326c45a 42 int velocidad_rpm()
Yo_Robot 22:d5431fff164b 43 {
Yo_Robot 33:e6ff02c3e0f5 44 return encoder.GetVelocityCap();
Yo_Robot 22:d5431fff164b 45 }
Yo_Robot 22:d5431fff164b 46
Yo_Robot 22:d5431fff164b 47 void clear_encoder()
Yo_Robot 22:d5431fff164b 48 {
Yo_Robot 25:1910a55ff0a3 49 encoder.Reset( QEI_RESET_POS ); // reset position
Yo_Robot 22:d5431fff164b 50 }
Yo_Robot 22:d5431fff164b 51
Yo_Robot 4:552beeda4722 52 void setTimer2()
Yo_Robot 3:8d5a9e3cd680 53 {
Yo_Robot 3:8d5a9e3cd680 54 // Encender Timer2 (PCONP[22])
Yo_Robot 3:8d5a9e3cd680 55 LPC_SC->PCONP |= 1 << 22;
Yo_Robot 3:8d5a9e3cd680 56
Yo_Robot 3:8d5a9e3cd680 57 // Resetear y parar el Timer
Yo_Robot 3:8d5a9e3cd680 58 LPC_TIM2->TCR = 0x2;
Yo_Robot 3:8d5a9e3cd680 59 LPC_TIM2->CTCR = 0x0;
Yo_Robot 3:8d5a9e3cd680 60
Yo_Robot 4:552beeda4722 61 // Establecer el Preescaler en cero
Yo_Robot 4:552beeda4722 62 // SIn Preesclaer
Yo_Robot 4:552beeda4722 63 LPC_TIM2->PR = 0;
Yo_Robot 3:8d5a9e3cd680 64
Yo_Robot 4:552beeda4722 65 // Calcular el periodo Inicial
Yo_Robot 4:552beeda4722 66 uint32_t periodo = ( SystemCoreClock / 400 );
Yo_Robot 3:8d5a9e3cd680 67
Yo_Robot 3:8d5a9e3cd680 68 // Establecer los Registros de Coincidencia
Yo_Robot 3:8d5a9e3cd680 69 // ( Match Register )
Yo_Robot 3:8d5a9e3cd680 70 LPC_TIM2->MR2 = periodo;
Yo_Robot 4:552beeda4722 71 LPC_TIM2->MR3 = periodo; // Legacy, salidas identicas
Yo_Robot 3:8d5a9e3cd680 72
Yo_Robot 4:552beeda4722 73 LPC_TIM2->MCR |= 1 << 7; // Resetear Timer en MR2
Yo_Robot 3:8d5a9e3cd680 74
Yo_Robot 3:8d5a9e3cd680 75 LPC_TIM2->EMR |= 15UL << 8; // Alternar Pin MAT2.2
Yo_Robot 3:8d5a9e3cd680 76 // y MAT2.3
Yo_Robot 3:8d5a9e3cd680 77
Yo_Robot 3:8d5a9e3cd680 78 LPC_PINCON->PINSEL0 |= 15UL << 16; //Activar MAT2.2
Yo_Robot 8:958dfe5052b9 79 // y MAT2.3 como salidas
Yo_Robot 8:958dfe5052b9 80
Yo_Robot 6:b4dae934e1ea 81 }
Yo_Robot 6:b4dae934e1ea 82
Yo_Robot 12:c02b08dacc45 83 void ISR_Serial()
Yo_Robot 12:c02b08dacc45 84 {
Yo_Robot 12:c02b08dacc45 85 int value; // Nuevo Valor
Yo_Robot 12:c02b08dacc45 86 char command; // Comando al que aplicar el nuevo valor
Yo_Robot 23:2126e38bb48c 87
Yo_Robot 12:c02b08dacc45 88
Yo_Robot 19:c26cf8a48986 89 if( isPC )
Yo_Robot 23:2126e38bb48c 90 pc.scanf( "%d-%c", &value, &command );
Yo_Robot 19:c26cf8a48986 91 else
Yo_Robot 23:2126e38bb48c 92 RS_232.scanf( "%d-%c", &value, &command );
Yo_Robot 23:2126e38bb48c 93
Yo_Robot 23:2126e38bb48c 94 switch( command )
Yo_Robot 23:2126e38bb48c 95 {
Yo_Robot 19:c26cf8a48986 96
Yo_Robot 29:52932326c45a 97 case 'E': // Leer el contador del encoder.
Yo_Robot 24:a1d16835201c 98 {
Yo_Robot 23:2126e38bb48c 99
Yo_Robot 27:b8254b76ec57 100 //Leer la posición del encoder
Yo_Robot 23:2126e38bb48c 101
Yo_Robot 26:dad0b2031173 102 if( isPC )
Yo_Robot 29:52932326c45a 103 pc.printf("%d\n\r",encoder.GetPosition());
Yo_Robot 26:dad0b2031173 104 else
Yo_Robot 29:52932326c45a 105 RS_232.printf("%d\n\r",encoder.GetPosition());
Yo_Robot 23:2126e38bb48c 106 break;
Yo_Robot 24:a1d16835201c 107 }
Yo_Robot 27:b8254b76ec57 108
Yo_Robot 23:2126e38bb48c 109 case 'H': // Establecer nueva frecuencia
Yo_Robot 24:a1d16835201c 110 {
Yo_Robot 23:2126e38bb48c 111 setPTO( value );
Yo_Robot 26:dad0b2031173 112 fq_actual = value;
Yo_Robot 32:4483d6c225e5 113 bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar
Yo_Robot 26:dad0b2031173 114
Yo_Robot 26:dad0b2031173 115 // Envia un OK de comando recibido
Yo_Robot 26:dad0b2031173 116 if( isPC )
Yo_Robot 26:dad0b2031173 117 pc.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 118 else
Yo_Robot 26:dad0b2031173 119 RS_232.printf("OK\r\n");
Yo_Robot 23:2126e38bb48c 120 break;
Yo_Robot 24:a1d16835201c 121 }
Yo_Robot 27:b8254b76ec57 122
Yo_Robot 23:2126e38bb48c 123 case 'K':
Yo_Robot 24:a1d16835201c 124 {
Yo_Robot 23:2126e38bb48c 125 setPTO( value * 1000 );
Yo_Robot 26:dad0b2031173 126 fq_actual = value;
Yo_Robot 32:4483d6c225e5 127 bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar
Yo_Robot 32:4483d6c225e5 128
Yo_Robot 26:dad0b2031173 129 // Envia un OK de comando recibido
Yo_Robot 26:dad0b2031173 130 if( isPC )
Yo_Robot 26:dad0b2031173 131 pc.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 132 else
Yo_Robot 26:dad0b2031173 133 RS_232.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 134
Yo_Robot 23:2126e38bb48c 135 break;
Yo_Robot 24:a1d16835201c 136 }
Yo_Robot 23:2126e38bb48c 137 case 'A': // Cambiar voltaje de salida
Yo_Robot 24:a1d16835201c 138 {
Yo_Robot 23:2126e38bb48c 139 aout = (float)( value + 10000.0 ) / 20000.0;
Yo_Robot 26:dad0b2031173 140
Yo_Robot 26:dad0b2031173 141 // Envia un OK de comando recibido
Yo_Robot 26:dad0b2031173 142 if( isPC )
Yo_Robot 26:dad0b2031173 143 pc.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 144 else
Yo_Robot 26:dad0b2031173 145 RS_232.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 146
Yo_Robot 23:2126e38bb48c 147 break;
Yo_Robot 24:a1d16835201c 148 }
Yo_Robot 23:2126e38bb48c 149 case 'D': // Cambiar la direccion
Yo_Robot 24:a1d16835201c 150 {
Yo_Robot 26:dad0b2031173 151
Yo_Robot 23:2126e38bb48c 152 stopTimer2();
Yo_Robot 23:2126e38bb48c 153 pin_dir = value;
Yo_Robot 23:2126e38bb48c 154 wait_us( 2 );
Yo_Robot 32:4483d6c225e5 155 bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar
Yo_Robot 26:dad0b2031173 156
Yo_Robot 26:dad0b2031173 157 if ( fq_actual != 0 )
Yo_Robot 26:dad0b2031173 158 {
Yo_Robot 26:dad0b2031173 159 startTimer2();
Yo_Robot 26:dad0b2031173 160 }
Yo_Robot 26:dad0b2031173 161
Yo_Robot 26:dad0b2031173 162 // Envia un OK de comando recibido
Yo_Robot 26:dad0b2031173 163 if( isPC )
Yo_Robot 26:dad0b2031173 164 pc.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 165 else
Yo_Robot 26:dad0b2031173 166 RS_232.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 167
Yo_Robot 23:2126e38bb48c 168 break;
Yo_Robot 24:a1d16835201c 169 }
Yo_Robot 23:2126e38bb48c 170 case 'V': //Setear la velocidad de Posicionamiento
Yo_Robot 24:a1d16835201c 171 {
Yo_Robot 23:2126e38bb48c 172 fq_posicion = value;
Yo_Robot 26:dad0b2031173 173
Yo_Robot 26:dad0b2031173 174 // Envia un OK de comando recibido
Yo_Robot 26:dad0b2031173 175 if( isPC )
Yo_Robot 26:dad0b2031173 176 pc.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 177 else
Yo_Robot 26:dad0b2031173 178 RS_232.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 179
Yo_Robot 23:2126e38bb48c 180 break;
Yo_Robot 24:a1d16835201c 181 }
Yo_Robot 27:b8254b76ec57 182
Yo_Robot 27:b8254b76ec57 183 // Generar un numero definido de pulsos a la velocidad de posicionamiento
Yo_Robot 29:52932326c45a 184 case 'P':
Yo_Robot 24:a1d16835201c 185 {
Yo_Robot 37:20f4a737cc13 186 float pulsos = abs( value ); //Numero de pulsos a generar
Yo_Robot 28:b7ded82ee7da 187 t_alto = (float)(pulsos / fq_posicion); //Tiempo que debe ser generado el tren de pulsos.
Yo_Robot 27:b8254b76ec57 188
Yo_Robot 32:4483d6c225e5 189 bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar
Yo_Robot 32:4483d6c225e5 190
Yo_Robot 27:b8254b76ec57 191 //DEBUG
Yo_Robot 32:4483d6c225e5 192 //pc.printf("Tiempo en timer en seg = %f", t_alto);
Yo_Robot 27:b8254b76ec57 193
Yo_Robot 23:2126e38bb48c 194 stopTimer2(); //Deten el tren de pulsos
Yo_Robot 23:2126e38bb48c 195 setPTO( fq_posicion ); //Nueva frecuencia de salida
Yo_Robot 23:2126e38bb48c 196 startTimer2(); //Inicia el tren de pulsos
Yo_Robot 23:2126e38bb48c 197 wait( t_alto ); //Espera hasta llegar a la posicion
Yo_Robot 23:2126e38bb48c 198 stopTimer2(); //Posicion alcanzada ALTO.
Yo_Robot 26:dad0b2031173 199
Yo_Robot 26:dad0b2031173 200
Yo_Robot 26:dad0b2031173 201 // Envia un OK de comando recibido
Yo_Robot 26:dad0b2031173 202 if( isPC )
Yo_Robot 26:dad0b2031173 203 pc.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 204 else
Yo_Robot 26:dad0b2031173 205 RS_232.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 206
Yo_Robot 23:2126e38bb48c 207 break;
Yo_Robot 24:a1d16835201c 208 }
Yo_Robot 27:b8254b76ec57 209
Yo_Robot 27:b8254b76ec57 210 // Generar un numero definido de MILES de pulsos a la velocidad de posicionamiento
Yo_Robot 29:52932326c45a 211 case 'M':
Yo_Robot 27:b8254b76ec57 212 {
Yo_Robot 37:20f4a737cc13 213 float pulsos = abs(value * 1000); //Numero de pulsos a generar
Yo_Robot 28:b7ded82ee7da 214 t_alto = (float)(pulsos / fq_posicion); //Tiempo que debe ser generado el tren de pulsos.
Yo_Robot 32:4483d6c225e5 215 bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar
Yo_Robot 32:4483d6c225e5 216
Yo_Robot 27:b8254b76ec57 217 //DEBUG
Yo_Robot 32:4483d6c225e5 218 //pc.printf("Tiempo en timer en seg = %f", t_alto);
Yo_Robot 27:b8254b76ec57 219
Yo_Robot 27:b8254b76ec57 220 stopTimer2(); //Deten el tren de pulsos
Yo_Robot 27:b8254b76ec57 221 setPTO( fq_posicion ); //Nueva frecuencia de salida
Yo_Robot 27:b8254b76ec57 222 startTimer2(); //Inicia el tren de pulsos
Yo_Robot 27:b8254b76ec57 223 wait( t_alto ); //Espera hasta llegar a la posicion
Yo_Robot 27:b8254b76ec57 224 stopTimer2(); //Posicion alcanzada ALTO.
Yo_Robot 27:b8254b76ec57 225
Yo_Robot 27:b8254b76ec57 226
Yo_Robot 27:b8254b76ec57 227 // Envia un OK de comando recibido
Yo_Robot 27:b8254b76ec57 228 if( isPC )
Yo_Robot 27:b8254b76ec57 229 pc.printf("OK\r\n");
Yo_Robot 27:b8254b76ec57 230 else
Yo_Robot 27:b8254b76ec57 231 RS_232.printf("OK\r\n");
Yo_Robot 27:b8254b76ec57 232
Yo_Robot 27:b8254b76ec57 233
Yo_Robot 27:b8254b76ec57 234 break;
Yo_Robot 27:b8254b76ec57 235 }
Yo_Robot 27:b8254b76ec57 236
Yo_Robot 27:b8254b76ec57 237 // Generar un numero definido de MILLONES pulsos a la velocidad de posicionamiento
Yo_Robot 29:52932326c45a 238 case 'N':
Yo_Robot 27:b8254b76ec57 239 {
Yo_Robot 37:20f4a737cc13 240 float pulsos = abs( value * 1000000 ); //Numero de pulsos a generar
Yo_Robot 28:b7ded82ee7da 241 t_alto = (float)(pulsos / fq_posicion); //Tiempo que debe ser generado el tren de pulsos.
Yo_Robot 32:4483d6c225e5 242 bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar
Yo_Robot 32:4483d6c225e5 243
Yo_Robot 27:b8254b76ec57 244 //DEBUG
Yo_Robot 32:4483d6c225e5 245 //pc.printf("Tiempo en timer en seg = %f", t_alto);
Yo_Robot 27:b8254b76ec57 246
Yo_Robot 27:b8254b76ec57 247 stopTimer2(); //Deten el tren de pulsos
Yo_Robot 27:b8254b76ec57 248 setPTO( fq_posicion ); //Nueva frecuencia de salida
Yo_Robot 27:b8254b76ec57 249 startTimer2(); //Inicia el tren de pulsos
Yo_Robot 27:b8254b76ec57 250 wait( t_alto ); //Espera hasta llegar a la posicion
Yo_Robot 27:b8254b76ec57 251 stopTimer2(); //Posicion alcanzada ALTO.
Yo_Robot 27:b8254b76ec57 252
Yo_Robot 27:b8254b76ec57 253
Yo_Robot 27:b8254b76ec57 254 // Envia un OK de comando recibido
Yo_Robot 27:b8254b76ec57 255 if( isPC )
Yo_Robot 27:b8254b76ec57 256 pc.printf("OK\r\n");
Yo_Robot 27:b8254b76ec57 257 else
Yo_Robot 27:b8254b76ec57 258 RS_232.printf("OK\r\n");
Yo_Robot 27:b8254b76ec57 259
Yo_Robot 27:b8254b76ec57 260
Yo_Robot 27:b8254b76ec57 261 break;
Yo_Robot 27:b8254b76ec57 262 }
Yo_Robot 27:b8254b76ec57 263
Yo_Robot 27:b8254b76ec57 264
Yo_Robot 29:52932326c45a 265 case 'R': // Leer la velocidd del encoder en RPM's
Yo_Robot 24:a1d16835201c 266 {
Yo_Robot 23:2126e38bb48c 267 if( isPC )
Yo_Robot 33:e6ff02c3e0f5 268 {
Yo_Robot 33:e6ff02c3e0f5 269 pc.printf( "%u", encoder.CalculateRPM( encoder.GetVelocityCap(), 360) ); // ultima velocidad leida desde el encoder
Yo_Robot 33:e6ff02c3e0f5 270 }else
Yo_Robot 33:e6ff02c3e0f5 271 RS_232.printf( "%u",encoder.CalculateRPM( encoder.GetVelocityCap(), 360) );
Yo_Robot 23:2126e38bb48c 272 break;
Yo_Robot 24:a1d16835201c 273 }
Yo_Robot 26:dad0b2031173 274
Yo_Robot 23:2126e38bb48c 275 case 'Z': //Limpiar contador encoder
Yo_Robot 29:52932326c45a 276 encoder.Reset(QEI_RESET_POS);
Yo_Robot 29:52932326c45a 277 encoder.Reset(QEI_RESET_VEL);
Yo_Robot 26:dad0b2031173 278
Yo_Robot 26:dad0b2031173 279 // Envia un OK de comando recibido
Yo_Robot 26:dad0b2031173 280 if( isPC )
Yo_Robot 26:dad0b2031173 281 pc.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 282 else
Yo_Robot 26:dad0b2031173 283 RS_232.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 284
Yo_Robot 23:2126e38bb48c 285 break;
Yo_Robot 23:2126e38bb48c 286
Yo_Robot 23:2126e38bb48c 287 case 'S': //Encender el Servo
Yo_Robot 26:dad0b2031173 288
Yo_Robot 23:2126e38bb48c 289 pin_son = value;
Yo_Robot 32:4483d6c225e5 290 bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar
Yo_Robot 32:4483d6c225e5 291
Yo_Robot 32:4483d6c225e5 292 // Envia un OK de comando recibido
Yo_Robot 32:4483d6c225e5 293 if( isPC )
Yo_Robot 32:4483d6c225e5 294 pc.printf("OK\r\n");
Yo_Robot 32:4483d6c225e5 295 else
Yo_Robot 32:4483d6c225e5 296 RS_232.printf("OK\r\n");
Yo_Robot 32:4483d6c225e5 297
Yo_Robot 32:4483d6c225e5 298 break;
Yo_Robot 32:4483d6c225e5 299
Yo_Robot 32:4483d6c225e5 300 case 'I': //Ir al inicio del recorrido
Yo_Robot 32:4483d6c225e5 301
Yo_Robot 32:4483d6c225e5 302 pin_dir = 1; //Mover hacia el motor
Yo_Robot 32:4483d6c225e5 303 bandera_inicio = 1; // Informar a ISR_Adv_motor() acerca del Homing
Yo_Robot 32:4483d6c225e5 304 setPTO( value ); // a la velocidad seteada
Yo_Robot 26:dad0b2031173 305
Yo_Robot 26:dad0b2031173 306 // Envia un OK de comando recibido
Yo_Robot 26:dad0b2031173 307 if( isPC )
Yo_Robot 26:dad0b2031173 308 pc.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 309 else
Yo_Robot 26:dad0b2031173 310 RS_232.printf("OK\r\n");
Yo_Robot 26:dad0b2031173 311
Yo_Robot 23:2126e38bb48c 312 break;
Yo_Robot 28:b7ded82ee7da 313
Yo_Robot 28:b7ded82ee7da 314 default:
Yo_Robot 28:b7ded82ee7da 315
Yo_Robot 28:b7ded82ee7da 316 // EL COMANDO NO SE RECONOCE: No Aplica
Yo_Robot 28:b7ded82ee7da 317 if( isPC )
Yo_Robot 28:b7ded82ee7da 318 pc.printf("NA\r\n");
Yo_Robot 28:b7ded82ee7da 319 else
Yo_Robot 28:b7ded82ee7da 320 RS_232.printf("NA\r\n");
Yo_Robot 28:b7ded82ee7da 321
Yo_Robot 28:b7ded82ee7da 322 break;
Yo_Robot 32:4483d6c225e5 323
Yo_Robot 18:cf1e07d82630 324 }
Yo_Robot 23:2126e38bb48c 325
Yo_Robot 12:c02b08dacc45 326 }
Yo_Robot 12:c02b08dacc45 327
Yo_Robot 12:c02b08dacc45 328
Yo_Robot 12:c02b08dacc45 329 void setPTO( int freq )
Yo_Robot 12:c02b08dacc45 330 {
Yo_Robot 12:c02b08dacc45 331 if( freq != 0 )
Yo_Robot 12:c02b08dacc45 332 {
Yo_Robot 12:c02b08dacc45 333 LPC_TIM2->TC = 0x00; //Resetear Timer
Yo_Robot 12:c02b08dacc45 334 setMR2( getMRvalue( freq ) );
Yo_Robot 12:c02b08dacc45 335 startTimer2();
Yo_Robot 12:c02b08dacc45 336
Yo_Robot 12:c02b08dacc45 337 }else{
Yo_Robot 12:c02b08dacc45 338
Yo_Robot 12:c02b08dacc45 339 stopTimer2();
Yo_Robot 12:c02b08dacc45 340 LPC_TIM2->TC = 0x00; //Resetear Timer
Yo_Robot 12:c02b08dacc45 341 }
Yo_Robot 12:c02b08dacc45 342 }
Yo_Robot 12:c02b08dacc45 343
Yo_Robot 22:d5431fff164b 344
Yo_Robot 22:d5431fff164b 345
Yo_Robot 22:d5431fff164b 346 void ISR_Alarm()
Yo_Robot 22:d5431fff164b 347 {
Yo_Robot 22:d5431fff164b 348 pin_son = 0 ;
Yo_Robot 22:d5431fff164b 349 stopTimer2();
Yo_Robot 22:d5431fff164b 350 aout = 0.5 ;
Yo_Robot 22:d5431fff164b 351
Yo_Robot 22:d5431fff164b 352 if(isPC)
Yo_Robot 31:7e2cdd547cb2 353 pc.printf( "AL\r\n" ); //ALARMA! solo es AL para que
Yo_Robot 31:7e2cdd547cb2 354 //sea conciso con el modo ETH y funcione
Yo_Robot 31:7e2cdd547cb2 355 //bien en LabVIEW.
Yo_Robot 22:d5431fff164b 356 else
Yo_Robot 26:dad0b2031173 357 RS_232.printf( "AL\r\n" );
Yo_Robot 22:d5431fff164b 358 }
Yo_Robot 22:d5431fff164b 359
Yo_Robot 30:413d1a6648b5 360
Yo_Robot 30:413d1a6648b5 361
Yo_Robot 30:413d1a6648b5 362
Yo_Robot 30:413d1a6648b5 363 /** @brief: Esta es la rutina que maneja las interrupciones
Yo_Robot 30:413d1a6648b5 364 * del sensor óptico, al recibir una ALARMA de proximidad al encoder
Yo_Robot 30:413d1a6648b5 365 */
Yo_Robot 31:7e2cdd547cb2 366 void ISR_Alm_encoder()
Yo_Robot 31:7e2cdd547cb2 367 {
Yo_Robot 31:7e2cdd547cb2 368 if( isPC )
Yo_Robot 32:4483d6c225e5 369 pc.printf("A3\r\n");
Yo_Robot 31:7e2cdd547cb2 370 else
Yo_Robot 32:4483d6c225e5 371 RS_232.printf("A3\r\n");
Yo_Robot 31:7e2cdd547cb2 372 }
Yo_Robot 30:413d1a6648b5 373
Yo_Robot 30:413d1a6648b5 374
Yo_Robot 30:413d1a6648b5 375 /** @brief: Esta es la rutina que maneja las interrupciones
Yo_Robot 30:413d1a6648b5 376 * del sensor óptico, al recibir una ALARMA de proximidad al motor
Yo_Robot 30:413d1a6648b5 377 */
Yo_Robot 31:7e2cdd547cb2 378 void ISR_Alm_motor()
Yo_Robot 31:7e2cdd547cb2 379 {
Yo_Robot 32:4483d6c225e5 380 wait_us( 50 );
Yo_Robot 32:4483d6c225e5 381 if ( limite_4 == 1)
Yo_Robot 32:4483d6c225e5 382 {
Yo_Robot 32:4483d6c225e5 383 if( isPC )
Yo_Robot 32:4483d6c225e5 384 pc.printf("A0\r\n");
Yo_Robot 32:4483d6c225e5 385 else
Yo_Robot 32:4483d6c225e5 386 RS_232.printf("A0\r\n");
Yo_Robot 32:4483d6c225e5 387 }
Yo_Robot 31:7e2cdd547cb2 388 }
Yo_Robot 30:413d1a6648b5 389
Yo_Robot 30:413d1a6648b5 390
Yo_Robot 30:413d1a6648b5 391 /** @brief: Esta es la rutina que maneja las interrupciones
Yo_Robot 30:413d1a6648b5 392 * del sensor óptico, al recibir una advertencia de proximidad al encoder
Yo_Robot 30:413d1a6648b5 393 */
Yo_Robot 31:7e2cdd547cb2 394 void ISR_Adv_encoder()
Yo_Robot 31:7e2cdd547cb2 395 {
Yo_Robot 32:4483d6c225e5 396 wait_ms( 50 );
Yo_Robot 32:4483d6c225e5 397 if ( limite_2 == 1)
Yo_Robot 32:4483d6c225e5 398 {
Yo_Robot 31:7e2cdd547cb2 399
Yo_Robot 32:4483d6c225e5 400 if( isPC )
Yo_Robot 32:4483d6c225e5 401 pc.printf("A2\r\n");
Yo_Robot 32:4483d6c225e5 402 else
Yo_Robot 32:4483d6c225e5 403 RS_232.printf("A2\r\n");
Yo_Robot 32:4483d6c225e5 404 }
Yo_Robot 31:7e2cdd547cb2 405
Yo_Robot 31:7e2cdd547cb2 406 }
Yo_Robot 30:413d1a6648b5 407
Yo_Robot 30:413d1a6648b5 408
Yo_Robot 30:413d1a6648b5 409 /** @brief: Esta es la rutina que maneja las interrupciones
Yo_Robot 30:413d1a6648b5 410 * del sensor óptico, al recibir una advertencia de proximidad al motor
Yo_Robot 30:413d1a6648b5 411 */
Yo_Robot 31:7e2cdd547cb2 412 void ISR_Adv_motor()
Yo_Robot 31:7e2cdd547cb2 413 {
Yo_Robot 32:4483d6c225e5 414 if ( bandera_inicio == 1 )
Yo_Robot 32:4483d6c225e5 415 {
Yo_Robot 32:4483d6c225e5 416 setPTO( 0 ); //detener el carro
Yo_Robot 32:4483d6c225e5 417 pin_dir = 0; //hacer que se aleje del motor
Yo_Robot 32:4483d6c225e5 418
Yo_Robot 32:4483d6c225e5 419
Yo_Robot 32:4483d6c225e5 420 stopTimer2(); //Deten el tren de pulsos
Yo_Robot 32:4483d6c225e5 421 setPTO( 20000 ); //Nueva frecuencia de salida
Yo_Robot 32:4483d6c225e5 422 startTimer2(); //Inicia el tren de pulsos
Yo_Robot 32:4483d6c225e5 423 wait_ms( 100 ); //Espera hasta llegar a la posicion
Yo_Robot 32:4483d6c225e5 424 stopTimer2(); //Posicion alcanzada ALTO.
Yo_Robot 32:4483d6c225e5 425
Yo_Robot 32:4483d6c225e5 426 setPTO (0); // Detener el carro cuando este en posición valida
Yo_Robot 32:4483d6c225e5 427 wait_ms(100);
Yo_Robot 32:4483d6c225e5 428 //Encerar el contador de encoder y de velocidad
Yo_Robot 32:4483d6c225e5 429 encoder.Reset(QEI_RESET_POS);
Yo_Robot 32:4483d6c225e5 430 encoder.Reset(QEI_RESET_VEL);
Yo_Robot 32:4483d6c225e5 431
Yo_Robot 32:4483d6c225e5 432 bandera_inicio = 0; //Limpiar la bandera
Yo_Robot 32:4483d6c225e5 433
Yo_Robot 32:4483d6c225e5 434 // Envia un IN de proceso terminado
Yo_Robot 32:4483d6c225e5 435 if( isPC )
Yo_Robot 32:4483d6c225e5 436 pc.printf("IN\r\n");
Yo_Robot 32:4483d6c225e5 437 else
Yo_Robot 32:4483d6c225e5 438 RS_232.printf("IN\r\n");
Yo_Robot 32:4483d6c225e5 439 }
Yo_Robot 32:4483d6c225e5 440
Yo_Robot 32:4483d6c225e5 441 else{
Yo_Robot 32:4483d6c225e5 442
Yo_Robot 32:4483d6c225e5 443 if( isPC )
Yo_Robot 32:4483d6c225e5 444 pc.printf("A1\r\n");
Yo_Robot 32:4483d6c225e5 445 else
Yo_Robot 32:4483d6c225e5 446 RS_232.printf("A1\r\n");
Yo_Robot 32:4483d6c225e5 447 }
Yo_Robot 32:4483d6c225e5 448
Yo_Robot 31:7e2cdd547cb2 449 }
Yo_Robot 30:413d1a6648b5 450
Yo_Robot 30:413d1a6648b5 451
Yo_Robot 30:413d1a6648b5 452
Yo_Robot 22:d5431fff164b 453 int getMRvalue( int fout )
Yo_Robot 22:d5431fff164b 454 {
Yo_Robot 22:d5431fff164b 455 int toRegister;
Yo_Robot 22:d5431fff164b 456
Yo_Robot 22:d5431fff164b 457 toRegister = (24000000 /(fout*2.0) ) -1;
Yo_Robot 22:d5431fff164b 458 return toRegister;
Yo_Robot 22:d5431fff164b 459 }
Yo_Robot 22:d5431fff164b 460
Yo_Robot 22:d5431fff164b 461
Yo_Robot 22:d5431fff164b 462 void setMR2( int newValue )
Yo_Robot 22:d5431fff164b 463 {
Yo_Robot 22:d5431fff164b 464 LPC_TIM2->MR2 = newValue; // Las dos salidas son identicas
Yo_Robot 22:d5431fff164b 465 LPC_TIM2->MR3 = newValue; // Para testear el programa.
Yo_Robot 22:d5431fff164b 466 }
Yo_Robot 22:d5431fff164b 467
Yo_Robot 22:d5431fff164b 468
Yo_Robot 22:d5431fff164b 469
Yo_Robot 22:d5431fff164b 470 void startTimer2()
Yo_Robot 22:d5431fff164b 471 {
Yo_Robot 22:d5431fff164b 472 // Arrancer el Timer 2
Yo_Robot 22:d5431fff164b 473 LPC_TIM2->TCR = 1;
Yo_Robot 22:d5431fff164b 474 }
Yo_Robot 22:d5431fff164b 475
Yo_Robot 22:d5431fff164b 476 void stopTimer2()
Yo_Robot 22:d5431fff164b 477 {
Yo_Robot 22:d5431fff164b 478 // Detener el Timer 2
Yo_Robot 22:d5431fff164b 479 LPC_TIM2->TCR = 0x2;
Yo_Robot 22:d5431fff164b 480 }
Yo_Robot 22:d5431fff164b 481
Yo_Robot 22:d5431fff164b 482 int getBaud()
Yo_Robot 22:d5431fff164b 483 {
Yo_Robot 22:d5431fff164b 484 int baudios = 115200; //Valor por defecto
Yo_Robot 22:d5431fff164b 485
Yo_Robot 22:d5431fff164b 486 FILE *fp = fopen("/local/config.mbd", "r"); // Abre el archivo y lo guarda en fp
Yo_Robot 22:d5431fff164b 487
Yo_Robot 22:d5431fff164b 488 if(!fp) // En caso de no encontrarse el archivo
Yo_Robot 22:d5431fff164b 489 {
Yo_Robot 22:d5431fff164b 490 printf("\nEl archivo /mbed/config.txt no puede ser abierto!\n");
Yo_Robot 22:d5431fff164b 491 printf("Cree un archivo de texto: config.mbd dentro de la unidad Mbed\n");
Yo_Robot 22:d5431fff164b 492 printf("que contenga las lineas:\n\n");
Yo_Robot 22:d5431fff164b 493
Yo_Robot 22:d5431fff164b 494 printf(" 1\n");
Yo_Robot 22:d5431fff164b 495 printf(" 2\n");
Yo_Robot 22:d5431fff164b 496 printf(" 3\n");
Yo_Robot 22:d5431fff164b 497 printf(" 4\n");
Yo_Robot 22:d5431fff164b 498 printf(" baudios: 115200\n");
Yo_Robot 22:d5431fff164b 499
Yo_Robot 22:d5431fff164b 500 printf("Cambie el valor de 115200 por la velocidad a la que desea transmitir:\n");
Yo_Robot 22:d5431fff164b 501 printf("luego reinicie el microcontrolador\n");
Yo_Robot 22:d5431fff164b 502 exit(1);
Yo_Robot 22:d5431fff164b 503
Yo_Robot 22:d5431fff164b 504 }
Yo_Robot 22:d5431fff164b 505 else
Yo_Robot 22:d5431fff164b 506 {
Yo_Robot 22:d5431fff164b 507 // Cadenas de caracteres desde el Archivo config.mbd
Yo_Robot 22:d5431fff164b 508 char notstr [04]; // linea vacia
Yo_Robot 22:d5431fff164b 509 char baud [40]; // valor en baudios
Yo_Robot 22:d5431fff164b 510
Yo_Robot 22:d5431fff164b 511 // Leer linea a linea el archivo
Yo_Robot 22:d5431fff164b 512 // cuatro primeras lineas no sirven
Yo_Robot 22:d5431fff164b 513 fgets( notstr, 4, fp );
Yo_Robot 22:d5431fff164b 514 fgets( notstr, 4, fp );
Yo_Robot 22:d5431fff164b 515 fgets( notstr, 4, fp );
Yo_Robot 22:d5431fff164b 516 fgets( notstr, 4, fp );
Yo_Robot 22:d5431fff164b 517 fgets( baud, 40, fp );
Yo_Robot 22:d5431fff164b 518 fclose(fp);
Yo_Robot 23:2126e38bb48c 519
Yo_Robot 22:d5431fff164b 520 // Extraer los valores numericos
Yo_Robot 22:d5431fff164b 521 sscanf( baud,"%*s %d",&baudios );
Yo_Robot 22:d5431fff164b 522
Yo_Robot 22:d5431fff164b 523
Yo_Robot 22:d5431fff164b 524 }
Yo_Robot 22:d5431fff164b 525
Yo_Robot 22:d5431fff164b 526 return baudios;
Yo_Robot 22:d5431fff164b 527 }
Yo_Robot 22:d5431fff164b 528
Yo_Robot 22:d5431fff164b 529 // **** Funciones Liberia Ethernet ***** //
Yo_Robot 12:c02b08dacc45 530 void setPTO_eth( char * input, char * output )
Yo_Robot 12:c02b08dacc45 531 {
Yo_Robot 12:c02b08dacc45 532 int freq = atoi( input );
Yo_Robot 12:c02b08dacc45 533
Yo_Robot 12:c02b08dacc45 534 if( freq != 0 ){
Yo_Robot 12:c02b08dacc45 535 LPC_TIM2->TC = 0x00; // Resetear Timer
Yo_Robot 12:c02b08dacc45 536 setMR2( getMRvalue( freq ) ); // Cambiar frefuencia
Yo_Robot 12:c02b08dacc45 537 startTimer2(); // Iniciar Timer
Yo_Robot 14:039d070732d5 538 if( pin_alm == 0 )
Yo_Robot 31:7e2cdd547cb2 539 {
Yo_Robot 31:7e2cdd547cb2 540 if ( limite_2 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 541 {
Yo_Robot 31:7e2cdd547cb2 542 sprintf( output,"A2\r\n" );
Yo_Robot 31:7e2cdd547cb2 543 }
Yo_Robot 31:7e2cdd547cb2 544 if ( limite_3 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 545 {
Yo_Robot 31:7e2cdd547cb2 546 sprintf( output,"A1\r\n" );
Yo_Robot 31:7e2cdd547cb2 547 }
Yo_Robot 31:7e2cdd547cb2 548 if ( limite_1 == 1 || limite_4 == 1 ) // ERROR DE POSICION
Yo_Robot 31:7e2cdd547cb2 549 {
Yo_Robot 31:7e2cdd547cb2 550 sprintf( output,"A0\r\n" );
Yo_Robot 31:7e2cdd547cb2 551 }
Yo_Robot 31:7e2cdd547cb2 552
Yo_Robot 31:7e2cdd547cb2 553 else
Yo_Robot 31:7e2cdd547cb2 554 sprintf( output,"OK\r\n" );
Yo_Robot 31:7e2cdd547cb2 555 }
Yo_Robot 14:039d070732d5 556 else
Yo_Robot 14:039d070732d5 557 sprintf( output,"AL" );
Yo_Robot 12:c02b08dacc45 558 }else{
Yo_Robot 12:c02b08dacc45 559 stopTimer2();
Yo_Robot 12:c02b08dacc45 560 LPC_TIM2->TC = 0x00; // Resetear Timer
Yo_Robot 14:039d070732d5 561 if( pin_alm == 0 )
Yo_Robot 31:7e2cdd547cb2 562 {
Yo_Robot 31:7e2cdd547cb2 563 if ( limite_2 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 564 {
Yo_Robot 31:7e2cdd547cb2 565 sprintf( output,"A2\r\n" );
Yo_Robot 31:7e2cdd547cb2 566 }
Yo_Robot 31:7e2cdd547cb2 567 if ( limite_3 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 568 {
Yo_Robot 31:7e2cdd547cb2 569 sprintf( output,"A1\r\n" );
Yo_Robot 31:7e2cdd547cb2 570 }
Yo_Robot 31:7e2cdd547cb2 571 if ( limite_1 == 1 || limite_4 == 1 ) // ERROR DE POSICION
Yo_Robot 31:7e2cdd547cb2 572 {
Yo_Robot 31:7e2cdd547cb2 573 sprintf( output,"A0\r\n" );
Yo_Robot 31:7e2cdd547cb2 574 }
Yo_Robot 31:7e2cdd547cb2 575
Yo_Robot 31:7e2cdd547cb2 576 else
Yo_Robot 31:7e2cdd547cb2 577 sprintf( output,"OK\r\n" );
Yo_Robot 31:7e2cdd547cb2 578 }
Yo_Robot 14:039d070732d5 579 else
Yo_Robot 14:039d070732d5 580 sprintf( output,"AL" );
Yo_Robot 12:c02b08dacc45 581 }
Yo_Robot 12:c02b08dacc45 582 }
Yo_Robot 12:c02b08dacc45 583
Yo_Robot 15:a1ffa32ce9d1 584 void setANG_eth( char * input, char * output )
Yo_Robot 15:a1ffa32ce9d1 585 {
Yo_Robot 15:a1ffa32ce9d1 586 long int pulsos = atol( input ); //Numero de pulsos a generar
Yo_Robot 29:52932326c45a 587 float pulsos_f = (float) pulsos;
Yo_Robot 29:52932326c45a 588 t_alto = pulsos_f / fq_posicion; //Tiempo que debe ser generado el tren de pulsos.
Yo_Robot 15:a1ffa32ce9d1 589
Yo_Robot 15:a1ffa32ce9d1 590 stopTimer2(); //Deten el tren de pulsos
Yo_Robot 15:a1ffa32ce9d1 591 setPTO( fq_posicion ); //Nueva frecuencia de salida
Yo_Robot 15:a1ffa32ce9d1 592 startTimer2(); //Inicia el tren de pulsos
Yo_Robot 15:a1ffa32ce9d1 593 wait( t_alto ); //Espera hasta llegar a la posicion
Yo_Robot 18:cf1e07d82630 594 stopTimer2(); //Posicion alcanzada ALTO.
Yo_Robot 15:a1ffa32ce9d1 595
Yo_Robot 15:a1ffa32ce9d1 596 if( pin_alm == 0 )
Yo_Robot 31:7e2cdd547cb2 597 {
Yo_Robot 31:7e2cdd547cb2 598 if ( limite_2 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 599 {
Yo_Robot 31:7e2cdd547cb2 600 sprintf( output,"A2\r\n" );
Yo_Robot 31:7e2cdd547cb2 601 }
Yo_Robot 31:7e2cdd547cb2 602 if ( limite_3 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 603 {
Yo_Robot 31:7e2cdd547cb2 604 sprintf( output,"A1\r\n" );
Yo_Robot 31:7e2cdd547cb2 605 }
Yo_Robot 31:7e2cdd547cb2 606 if ( limite_1 == 1 || limite_4 == 1 ) // ERROR DE POSICION
Yo_Robot 31:7e2cdd547cb2 607 {
Yo_Robot 31:7e2cdd547cb2 608 sprintf( output,"A0\r\n" );
Yo_Robot 31:7e2cdd547cb2 609 }
Yo_Robot 31:7e2cdd547cb2 610
Yo_Robot 31:7e2cdd547cb2 611 else
Yo_Robot 31:7e2cdd547cb2 612 sprintf( output,"OK\r\n" );
Yo_Robot 31:7e2cdd547cb2 613 }
Yo_Robot 15:a1ffa32ce9d1 614 else
Yo_Robot 15:a1ffa32ce9d1 615 sprintf( output,"AL" );
Yo_Robot 15:a1ffa32ce9d1 616
Yo_Robot 15:a1ffa32ce9d1 617 }
Yo_Robot 21:353b0fe8fc54 618
Yo_Robot 21:353b0fe8fc54 619
Yo_Robot 15:a1ffa32ce9d1 620 void setSPD_eth( char * input, char * output )
Yo_Robot 15:a1ffa32ce9d1 621 {
Yo_Robot 15:a1ffa32ce9d1 622 fq_posicion = atoi( input );
Yo_Robot 15:a1ffa32ce9d1 623 // Esta funcion cambia la velocidad con la que se
Yo_Robot 15:a1ffa32ce9d1 624 // posicionara el eje del motor en un angulo determinado
Yo_Robot 15:a1ffa32ce9d1 625 if( pin_alm == 0 )
Yo_Robot 31:7e2cdd547cb2 626 {
Yo_Robot 31:7e2cdd547cb2 627 if ( limite_2 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 628 {
Yo_Robot 31:7e2cdd547cb2 629 sprintf( output,"A2\r\n" );
Yo_Robot 31:7e2cdd547cb2 630 }
Yo_Robot 31:7e2cdd547cb2 631 if ( limite_3 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 632 {
Yo_Robot 31:7e2cdd547cb2 633 sprintf( output,"A1\r\n" );
Yo_Robot 31:7e2cdd547cb2 634 }
Yo_Robot 31:7e2cdd547cb2 635 if ( limite_1 == 1 || limite_4 == 1 ) // ERROR DE POSICION
Yo_Robot 31:7e2cdd547cb2 636 {
Yo_Robot 31:7e2cdd547cb2 637 sprintf( output,"A0\r\n" );
Yo_Robot 31:7e2cdd547cb2 638 }
Yo_Robot 31:7e2cdd547cb2 639
Yo_Robot 31:7e2cdd547cb2 640 else
Yo_Robot 31:7e2cdd547cb2 641 sprintf( output,"OK\r\n" );
Yo_Robot 31:7e2cdd547cb2 642 }
Yo_Robot 15:a1ffa32ce9d1 643 else
Yo_Robot 15:a1ffa32ce9d1 644 sprintf( output,"AL" );
Yo_Robot 15:a1ffa32ce9d1 645
Yo_Robot 15:a1ffa32ce9d1 646 }
Yo_Robot 21:353b0fe8fc54 647
Yo_Robot 12:c02b08dacc45 648 void setAout_eth( char * input, char * output )
Yo_Robot 12:c02b08dacc45 649 {
Yo_Robot 12:c02b08dacc45 650 int vout = atoi( input );
Yo_Robot 14:039d070732d5 651 aout = (float)( vout + 10000 ) / 20000;
Yo_Robot 14:039d070732d5 652 if( pin_alm == 0 )
Yo_Robot 31:7e2cdd547cb2 653 {
Yo_Robot 31:7e2cdd547cb2 654 if ( limite_2 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 655 {
Yo_Robot 31:7e2cdd547cb2 656 sprintf( output,"A2\r\n" );
Yo_Robot 31:7e2cdd547cb2 657 }
Yo_Robot 31:7e2cdd547cb2 658 if ( limite_3 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 659 {
Yo_Robot 31:7e2cdd547cb2 660 sprintf( output,"A1\r\n" );
Yo_Robot 31:7e2cdd547cb2 661 }
Yo_Robot 31:7e2cdd547cb2 662 if ( limite_1 == 1 || limite_4 == 1 ) // ERROR DE POSICION
Yo_Robot 31:7e2cdd547cb2 663 {
Yo_Robot 31:7e2cdd547cb2 664 sprintf( output,"A0\r\n" );
Yo_Robot 31:7e2cdd547cb2 665 }
Yo_Robot 31:7e2cdd547cb2 666
Yo_Robot 31:7e2cdd547cb2 667 else
Yo_Robot 31:7e2cdd547cb2 668 sprintf( output,"OK\r\n" );
Yo_Robot 31:7e2cdd547cb2 669 }
Yo_Robot 14:039d070732d5 670 else
Yo_Robot 14:039d070732d5 671 sprintf( output,"AL" );
Yo_Robot 12:c02b08dacc45 672 }
Yo_Robot 12:c02b08dacc45 673
Yo_Robot 12:c02b08dacc45 674
Yo_Robot 12:c02b08dacc45 675
Yo_Robot 12:c02b08dacc45 676 void setDir_eth ( char * input, char * output )
Yo_Robot 12:c02b08dacc45 677 {
Yo_Robot 12:c02b08dacc45 678 int value = atoi( input );
Yo_Robot 12:c02b08dacc45 679
Yo_Robot 12:c02b08dacc45 680 pin_dir = value;
Yo_Robot 12:c02b08dacc45 681
Yo_Robot 14:039d070732d5 682 if( pin_alm == 0 )
Yo_Robot 31:7e2cdd547cb2 683 {
Yo_Robot 31:7e2cdd547cb2 684 if ( limite_2 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 685 {
Yo_Robot 31:7e2cdd547cb2 686 sprintf( output,"A2\r\n" );
Yo_Robot 31:7e2cdd547cb2 687 }
Yo_Robot 31:7e2cdd547cb2 688 if ( limite_3 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 689 {
Yo_Robot 31:7e2cdd547cb2 690 sprintf( output,"A1\r\n" );
Yo_Robot 31:7e2cdd547cb2 691 }
Yo_Robot 31:7e2cdd547cb2 692 if ( limite_1 == 1 || limite_4 == 1 ) // ERROR DE POSICION
Yo_Robot 31:7e2cdd547cb2 693 {
Yo_Robot 31:7e2cdd547cb2 694 sprintf( output,"A0\r\n" );
Yo_Robot 31:7e2cdd547cb2 695 }
Yo_Robot 31:7e2cdd547cb2 696
Yo_Robot 31:7e2cdd547cb2 697 else
Yo_Robot 31:7e2cdd547cb2 698 sprintf( output,"OK\r\n" );
Yo_Robot 31:7e2cdd547cb2 699 }
Yo_Robot 12:c02b08dacc45 700 else
Yo_Robot 14:039d070732d5 701 sprintf( output,"AL" );
Yo_Robot 12:c02b08dacc45 702 }
Yo_Robot 12:c02b08dacc45 703
Yo_Robot 12:c02b08dacc45 704
Yo_Robot 12:c02b08dacc45 705
Yo_Robot 12:c02b08dacc45 706 void setSON_eth ( char * input, char * output )
Yo_Robot 12:c02b08dacc45 707 {
Yo_Robot 12:c02b08dacc45 708 int value = atoi( input );
Yo_Robot 12:c02b08dacc45 709
Yo_Robot 12:c02b08dacc45 710 pin_son = value;
Yo_Robot 12:c02b08dacc45 711
Yo_Robot 14:039d070732d5 712 if( pin_alm == 0 )
Yo_Robot 31:7e2cdd547cb2 713 {
Yo_Robot 31:7e2cdd547cb2 714 if ( limite_2 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 715 {
Yo_Robot 31:7e2cdd547cb2 716 sprintf( output,"A2\r\n" );
Yo_Robot 31:7e2cdd547cb2 717 }
Yo_Robot 31:7e2cdd547cb2 718 if ( limite_3 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 719 {
Yo_Robot 31:7e2cdd547cb2 720 sprintf( output,"A1\r\n" );
Yo_Robot 31:7e2cdd547cb2 721 }
Yo_Robot 31:7e2cdd547cb2 722 if ( limite_1 == 1 || limite_4 == 1 ) // ERROR DE POSICION
Yo_Robot 31:7e2cdd547cb2 723 {
Yo_Robot 31:7e2cdd547cb2 724 sprintf( output,"A0\r\n" );
Yo_Robot 31:7e2cdd547cb2 725 }
Yo_Robot 31:7e2cdd547cb2 726
Yo_Robot 31:7e2cdd547cb2 727 else
Yo_Robot 31:7e2cdd547cb2 728 sprintf( output,"OK\r\n" );
Yo_Robot 31:7e2cdd547cb2 729 }
Yo_Robot 12:c02b08dacc45 730 else
Yo_Robot 14:039d070732d5 731 sprintf( output,"AL" );
Yo_Robot 12:c02b08dacc45 732
Yo_Robot 12:c02b08dacc45 733 }
Yo_Robot 12:c02b08dacc45 734
Yo_Robot 12:c02b08dacc45 735
Yo_Robot 22:d5431fff164b 736 void getENC_eth( char * input, char * output )
Yo_Robot 20:4b154134ab20 737 {
Yo_Robot 22:d5431fff164b 738 if( pin_alm == 0 )
Yo_Robot 31:7e2cdd547cb2 739 {
Yo_Robot 31:7e2cdd547cb2 740 if ( limite_2 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 741 {
Yo_Robot 31:7e2cdd547cb2 742 sprintf( output,"A2\r\n" );
Yo_Robot 31:7e2cdd547cb2 743 }
Yo_Robot 31:7e2cdd547cb2 744 if ( limite_3 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 745 {
Yo_Robot 31:7e2cdd547cb2 746 sprintf( output,"A1\r\n" );
Yo_Robot 31:7e2cdd547cb2 747 }
Yo_Robot 31:7e2cdd547cb2 748 if ( limite_1 == 1 || limite_4 == 1 ) // ERROR DE POSICION
Yo_Robot 31:7e2cdd547cb2 749 {
Yo_Robot 31:7e2cdd547cb2 750 sprintf( output,"A0\r\n" );
Yo_Robot 31:7e2cdd547cb2 751 }
Yo_Robot 31:7e2cdd547cb2 752
Yo_Robot 31:7e2cdd547cb2 753 else
Yo_Robot 31:7e2cdd547cb2 754 sprintf( output,"OK\r\n" );
Yo_Robot 31:7e2cdd547cb2 755 }
Yo_Robot 22:d5431fff164b 756 else
Yo_Robot 22:d5431fff164b 757 sprintf( output,"AL" );
Yo_Robot 22:d5431fff164b 758 }
Yo_Robot 21:353b0fe8fc54 759
Yo_Robot 21:353b0fe8fc54 760
Yo_Robot 22:d5431fff164b 761 void setENC_eth( char * input, char * output )
Yo_Robot 22:d5431fff164b 762 {
Yo_Robot 29:52932326c45a 763 encoder.Reset(QEI_RESET_POS);
Yo_Robot 29:52932326c45a 764 encoder.Reset(QEI_RESET_VEL);
Yo_Robot 22:d5431fff164b 765
Yo_Robot 22:d5431fff164b 766 if( pin_alm == 0 )
Yo_Robot 31:7e2cdd547cb2 767 {
Yo_Robot 31:7e2cdd547cb2 768 if ( limite_2 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 769 {
Yo_Robot 31:7e2cdd547cb2 770 sprintf( output,"A2\r\n" );
Yo_Robot 31:7e2cdd547cb2 771 }
Yo_Robot 31:7e2cdd547cb2 772 if ( limite_3 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 773 {
Yo_Robot 31:7e2cdd547cb2 774 sprintf( output,"A1\r\n" );
Yo_Robot 31:7e2cdd547cb2 775 }
Yo_Robot 31:7e2cdd547cb2 776 if ( limite_1 == 1 || limite_4 == 1 ) // ERROR DE POSICION
Yo_Robot 31:7e2cdd547cb2 777 {
Yo_Robot 31:7e2cdd547cb2 778 sprintf( output,"A0\r\n" );
Yo_Robot 31:7e2cdd547cb2 779 }
Yo_Robot 31:7e2cdd547cb2 780
Yo_Robot 31:7e2cdd547cb2 781 else
Yo_Robot 31:7e2cdd547cb2 782 sprintf( output,"OK\r\n" );
Yo_Robot 31:7e2cdd547cb2 783 }
Yo_Robot 22:d5431fff164b 784 else
Yo_Robot 22:d5431fff164b 785 sprintf( output,"AL" );
Yo_Robot 22:d5431fff164b 786
Yo_Robot 20:4b154134ab20 787 }
Yo_Robot 12:c02b08dacc45 788
Yo_Robot 23:2126e38bb48c 789 void getRPM_eth( char * input, char * output )
Yo_Robot 23:2126e38bb48c 790 {
Yo_Robot 29:52932326c45a 791 int rpm;
Yo_Robot 23:2126e38bb48c 792
Yo_Robot 29:52932326c45a 793 rpm = encoder.CalculateRPM( encoder.GetVelocityCap(), 360); // ultima velocidad leida desde el encoder
Yo_Robot 29:52932326c45a 794 // numero de revoluciones por vuelta del encoder
Yo_Robot 29:52932326c45a 795
Yo_Robot 23:2126e38bb48c 796
Yo_Robot 23:2126e38bb48c 797 if( pin_alm == 0 )
Yo_Robot 31:7e2cdd547cb2 798 {
Yo_Robot 31:7e2cdd547cb2 799 if ( limite_2 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 800 {
Yo_Robot 31:7e2cdd547cb2 801 sprintf( output,"A2\r\n" );
Yo_Robot 31:7e2cdd547cb2 802 }
Yo_Robot 31:7e2cdd547cb2 803 if ( limite_3 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 31:7e2cdd547cb2 804 {
Yo_Robot 31:7e2cdd547cb2 805 sprintf( output,"A1\r\n" );
Yo_Robot 31:7e2cdd547cb2 806 }
Yo_Robot 31:7e2cdd547cb2 807 if ( limite_1 == 1 || limite_4 == 1 ) // ERROR DE POSICION
Yo_Robot 31:7e2cdd547cb2 808 {
Yo_Robot 31:7e2cdd547cb2 809 sprintf( output,"A0\r\n" );
Yo_Robot 31:7e2cdd547cb2 810 }
Yo_Robot 31:7e2cdd547cb2 811
Yo_Robot 31:7e2cdd547cb2 812 else
Yo_Robot 31:7e2cdd547cb2 813 sprintf( output,"OK\r\n" );
Yo_Robot 31:7e2cdd547cb2 814 }
Yo_Robot 23:2126e38bb48c 815 else
Yo_Robot 29:52932326c45a 816 sprintf( output,"AL" );
Yo_Robot 23:2126e38bb48c 817
Yo_Robot 23:2126e38bb48c 818
Yo_Robot 23:2126e38bb48c 819 }
Yo_Robot 23:2126e38bb48c 820
Yo_Robot 21:353b0fe8fc54 821
Yo_Robot 32:4483d6c225e5 822 void setHOME_eth( char * input, char * output )
Yo_Robot 32:4483d6c225e5 823 {
Yo_Robot 32:4483d6c225e5 824 int value = atoi( input );
Yo_Robot 32:4483d6c225e5 825 pin_dir = 1; //Mover hacia el motor
Yo_Robot 32:4483d6c225e5 826 bandera_inicio = 1; // Informar a ISR_Adv_motor() acerca del Homing
Yo_Robot 32:4483d6c225e5 827 setPTO( value * 1000 ); // a la velocidad seteada en KiloHertzios
Yo_Robot 32:4483d6c225e5 828
Yo_Robot 32:4483d6c225e5 829 if( pin_alm == 0 )
Yo_Robot 32:4483d6c225e5 830 {
Yo_Robot 32:4483d6c225e5 831 if ( limite_2 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 32:4483d6c225e5 832 {
Yo_Robot 32:4483d6c225e5 833 sprintf( output,"A2\r\n" );
Yo_Robot 32:4483d6c225e5 834 }
Yo_Robot 32:4483d6c225e5 835
Yo_Robot 32:4483d6c225e5 836 if ( limite_3 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 32:4483d6c225e5 837 {
Yo_Robot 32:4483d6c225e5 838 if (bandera_inicio == 1)
Yo_Robot 32:4483d6c225e5 839 {
Yo_Robot 32:4483d6c225e5 840 sprintf( output,"IN\r\n" );
Yo_Robot 32:4483d6c225e5 841 }
Yo_Robot 32:4483d6c225e5 842 sprintf( output,"A1\r\n" );
Yo_Robot 32:4483d6c225e5 843 }
Yo_Robot 32:4483d6c225e5 844 if ( limite_1 == 1 || limite_4 == 1 ) // ERROR DE POSICION
Yo_Robot 32:4483d6c225e5 845 {
Yo_Robot 32:4483d6c225e5 846 sprintf( output,"A0\r\n" );
Yo_Robot 32:4483d6c225e5 847 }
Yo_Robot 32:4483d6c225e5 848
Yo_Robot 32:4483d6c225e5 849 else
Yo_Robot 32:4483d6c225e5 850 sprintf( output,"OK\r\n" );
Yo_Robot 32:4483d6c225e5 851 }
Yo_Robot 32:4483d6c225e5 852 else
Yo_Robot 32:4483d6c225e5 853 sprintf( output,"AL" );
Yo_Robot 32:4483d6c225e5 854
Yo_Robot 32:4483d6c225e5 855
Yo_Robot 32:4483d6c225e5 856 }
Yo_Robot 32:4483d6c225e5 857
Yo_Robot 34:bdf918bc9b59 858 void getALM_eth ( char * input, char * output )
Yo_Robot 34:bdf918bc9b59 859 {
Yo_Robot 34:bdf918bc9b59 860
Yo_Robot 34:bdf918bc9b59 861 if( pin_alm == 0 )
Yo_Robot 34:bdf918bc9b59 862 {
Yo_Robot 34:bdf918bc9b59 863 if ( limite_2 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 34:bdf918bc9b59 864 {
Yo_Robot 34:bdf918bc9b59 865 sprintf( output,"A2\r\n" );
Yo_Robot 34:bdf918bc9b59 866 }
Yo_Robot 34:bdf918bc9b59 867 if ( limite_3 == 1 ) // Alarma muy cerca al encoder
Yo_Robot 34:bdf918bc9b59 868 {
Yo_Robot 34:bdf918bc9b59 869 sprintf( output,"A1\r\n" );
Yo_Robot 34:bdf918bc9b59 870 }
Yo_Robot 34:bdf918bc9b59 871 if ( limite_1 == 1 || limite_4 == 1 ) // ERROR DE POSICION
Yo_Robot 34:bdf918bc9b59 872 {
Yo_Robot 34:bdf918bc9b59 873 sprintf( output,"A0\r\n" );
Yo_Robot 34:bdf918bc9b59 874 }
Yo_Robot 34:bdf918bc9b59 875
Yo_Robot 34:bdf918bc9b59 876 else
Yo_Robot 34:bdf918bc9b59 877 sprintf( output,"OK\r\n" );
Yo_Robot 34:bdf918bc9b59 878 }
Yo_Robot 34:bdf918bc9b59 879 else
Yo_Robot 34:bdf918bc9b59 880 sprintf( output,"AL" );
Yo_Robot 34:bdf918bc9b59 881
Yo_Robot 34:bdf918bc9b59 882 }
Yo_Robot 22:d5431fff164b 883
Yo_Robot 22:d5431fff164b 884
Yo_Robot 4:552beeda4722 885 /* LEGACY FUNCTIONS
Yo_Robot 4:552beeda4722 886 *
Yo_Robot 20:4b154134ab20 887 * El siguiente codigo no es utilizado por el
Yo_Robot 20:4b154134ab20 888 * programa. Sin embargo pueden servir como
Yo_Robot 20:4b154134ab20 889 * futuras referencias.
Yo_Robot 4:552beeda4722 890 */
Yo_Robot 4:552beeda4722 891 void setMR3( int newValue )
Yo_Robot 4:552beeda4722 892 {
Yo_Robot 4:552beeda4722 893 LPC_TIM2->MR3 = newValue;
Yo_Robot 4:552beeda4722 894 }
Yo_Robot 4:552beeda4722 895
Yo_Robot 4:552beeda4722 896
Yo_Robot 4:552beeda4722 897 void setPrescaler( int newValue)
Yo_Robot 4:552beeda4722 898 {
Yo_Robot 4:552beeda4722 899 LPC_TIM2->PR = newValue;
Yo_Robot 4:552beeda4722 900 }
Yo_Robot 20:4b154134ab20 901
Yo_Robot 20:4b154134ab20 902
Yo_Robot 20:4b154134ab20 903 EthernetNetIf configurarEthernet()
Yo_Robot 20:4b154134ab20 904 {
Yo_Robot 20:4b154134ab20 905 //____________ *** ARCHIVO DE CONFIGURACION ***_______________________ //
Yo_Robot 20:4b154134ab20 906
Yo_Robot 20:4b154134ab20 907 printf("\n *** CONFIGURACION ETHERNET DE MBED ***\n");
Yo_Robot 20:4b154134ab20 908 printf("Leyendo archivo de configuracion...\n\n");
Yo_Robot 20:4b154134ab20 909
Yo_Robot 20:4b154134ab20 910 FILE *fp = fopen("/local/config.txt", "r"); // Abre el archivo y lo guarda en fp
Yo_Robot 20:4b154134ab20 911
Yo_Robot 20:4b154134ab20 912 if(!fp) // En caso de no encontrarse el archivo
Yo_Robot 20:4b154134ab20 913 {
Yo_Robot 20:4b154134ab20 914 printf("\nEl archivo /mbed/config.txt no puede ser abierto!\n");
Yo_Robot 20:4b154134ab20 915 exit(1);
Yo_Robot 20:4b154134ab20 916
Yo_Robot 20:4b154134ab20 917 }
Yo_Robot 20:4b154134ab20 918 else
Yo_Robot 20:4b154134ab20 919 {
Yo_Robot 20:4b154134ab20 920 // Cadenas de caracteres desde el Archivo config.txt
Yo_Robot 20:4b154134ab20 921 char isDHCP [15]; //Modo Automatico o Manual
Yo_Robot 20:4b154134ab20 922 char empty [2]; // Linea vacia
Yo_Robot 20:4b154134ab20 923 char ip [40]; // Direccion IP
Yo_Robot 20:4b154134ab20 924 char mask [40]; // Mascara de Subred
Yo_Robot 20:4b154134ab20 925 char gate [40]; // Puerta de enlace
Yo_Robot 20:4b154134ab20 926 char dns [40]; // Direccion DNS
Yo_Robot 20:4b154134ab20 927
Yo_Robot 20:4b154134ab20 928 // Valores 'int' para agregar a la configuracion manual
Yo_Robot 20:4b154134ab20 929 int DHCP;
Yo_Robot 20:4b154134ab20 930 int n_ip[4];
Yo_Robot 20:4b154134ab20 931 int n_mask[4];
Yo_Robot 20:4b154134ab20 932 int n_gate[4];
Yo_Robot 20:4b154134ab20 933 int n_dns[4];
Yo_Robot 20:4b154134ab20 934
Yo_Robot 20:4b154134ab20 935
Yo_Robot 20:4b154134ab20 936 // Leer linea a linea el archivo
Yo_Robot 20:4b154134ab20 937 fgets( isDHCP, 15, fp );
Yo_Robot 20:4b154134ab20 938 fgets( empty, 2, fp );
Yo_Robot 20:4b154134ab20 939 fgets( ip, 40, fp );
Yo_Robot 20:4b154134ab20 940 fgets( mask, 40, fp );
Yo_Robot 20:4b154134ab20 941 fgets( gate, 40, fp );
Yo_Robot 20:4b154134ab20 942 fgets( dns, 40, fp );
Yo_Robot 20:4b154134ab20 943
Yo_Robot 20:4b154134ab20 944 printf("Cerrando archivo...\n");
Yo_Robot 20:4b154134ab20 945 fclose(fp);
Yo_Robot 20:4b154134ab20 946
Yo_Robot 20:4b154134ab20 947 // Extraer los valores numericos
Yo_Robot 20:4b154134ab20 948 sscanf( isDHCP,"%*s %d",&DHCP );
Yo_Robot 20:4b154134ab20 949
Yo_Robot 20:4b154134ab20 950 sscanf( ip,"%*s %d.%d.%d.%d",&n_ip[0],&n_ip[1],&n_ip[2],&n_ip[3] );
Yo_Robot 20:4b154134ab20 951 sscanf( mask,"%*s %d.%d.%d.%d",&n_mask[0],&n_mask[1],&n_mask[2],&n_mask[3] );
Yo_Robot 20:4b154134ab20 952 sscanf( gate,"%*s %d.%d.%d.%d",&n_gate[0],&n_gate[1],&n_gate[2],&n_gate[3] );
Yo_Robot 20:4b154134ab20 953 sscanf( dns,"%*s %d.%d.%d.%d",&n_dns[0],&n_dns[1],&n_dns[2],&n_dns[3] );
Yo_Robot 20:4b154134ab20 954
Yo_Robot 20:4b154134ab20 955
Yo_Robot 20:4b154134ab20 956 if(DHCP) //En caso de modo DHCP
Yo_Robot 20:4b154134ab20 957 {
Yo_Robot 20:4b154134ab20 958 printf("\n Configurar red de manera automatica\n");
Yo_Robot 20:4b154134ab20 959 EthernetNetIf eth; //Crea la interfaz
Yo_Robot 20:4b154134ab20 960 EthernetErr ethErr = eth.setup();
Yo_Robot 20:4b154134ab20 961 if( ethErr )
Yo_Robot 20:4b154134ab20 962 {
Yo_Robot 20:4b154134ab20 963 printf( "Error %d en la configuracion\n", ethErr );
Yo_Robot 20:4b154134ab20 964 exit(1);
Yo_Robot 20:4b154134ab20 965 }
Yo_Robot 20:4b154134ab20 966
Yo_Robot 20:4b154134ab20 967 printf("Configuracion Correcta\n\n");
Yo_Robot 20:4b154134ab20 968 return eth;
Yo_Robot 20:4b154134ab20 969 }
Yo_Robot 20:4b154134ab20 970 else
Yo_Robot 20:4b154134ab20 971 {
Yo_Robot 20:4b154134ab20 972 sscanf( ip,"%*s %d.%d.%d.%d",&n_ip[0], &n_ip[1], &n_ip[2], &n_ip[3] );
Yo_Robot 20:4b154134ab20 973 sscanf( mask,"%*s %d.%d.%d.%d",&n_mask[0],&n_mask[1],&n_mask[2],&n_mask[3] );
Yo_Robot 20:4b154134ab20 974 sscanf( gate,"%*s %d.%d.%d.%d",&n_gate[0],&n_gate[1],&n_gate[2],&n_gate[3] );
Yo_Robot 20:4b154134ab20 975 sscanf( dns,"%*s %d.%d.%d.%d",&n_dns[0], &n_dns[1], &n_dns[2], &n_dns[3] );
Yo_Robot 20:4b154134ab20 976 printf(" %s %s %s %s %s\n " , isDHCP, ip, mask, gate, dns );
Yo_Robot 20:4b154134ab20 977
Yo_Robot 20:4b154134ab20 978 printf("\n Configurar red de manera manual\n");
Yo_Robot 20:4b154134ab20 979 EthernetNetIf eth(
Yo_Robot 20:4b154134ab20 980 IpAddr( n_ip[0], n_ip[1], n_ip[2], n_ip[3]), //IP Address
Yo_Robot 20:4b154134ab20 981 IpAddr( n_mask[0],n_mask[1],n_mask[2],n_mask[3]), //Network Mask
Yo_Robot 20:4b154134ab20 982 IpAddr( n_gate[0],n_gate[1],n_gate[2],n_gate[3]), //Gateway
Yo_Robot 20:4b154134ab20 983 IpAddr( n_dns[0], n_dns[1], n_dns[2], n_dns[3] ) //DNS
Yo_Robot 20:4b154134ab20 984 );
Yo_Robot 20:4b154134ab20 985
Yo_Robot 20:4b154134ab20 986 EthernetErr ethErr = eth.setup();
Yo_Robot 20:4b154134ab20 987 if( ethErr )
Yo_Robot 20:4b154134ab20 988 {
Yo_Robot 20:4b154134ab20 989 printf( "Error %d en la configuracion\n", ethErr );
Yo_Robot 20:4b154134ab20 990 exit(1);
Yo_Robot 20:4b154134ab20 991 }
Yo_Robot 20:4b154134ab20 992
Yo_Robot 20:4b154134ab20 993 printf("Configuracion Correcta\n\n");
Yo_Robot 20:4b154134ab20 994 return eth;
Yo_Robot 20:4b154134ab20 995 }
Yo_Robot 20:4b154134ab20 996
Yo_Robot 20:4b154134ab20 997 }
Yo_Robot 20:4b154134ab20 998
Yo_Robot 20:4b154134ab20 999 EthernetNetIf eth;
Yo_Robot 20:4b154134ab20 1000 return eth;
Yo_Robot 20:4b154134ab20 1001 }