test

Committer:
dapi08
Date:
Wed May 27 07:50:09 2020 +0000
Revision:
2:82fdfeec5799
Parent:
1:da6afd392792
Child:
3:55227f9877e0
Sincroniza RTC con GPS;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dapi08 2:82fdfeec5799 1 #include "declaraciones.h"
deepikabhavnani 0:cf516d904427 2 #include "EthernetInterface.h"
dapi08 2:82fdfeec5799 3 #include "gps.h"
dapi08 1:da6afd392792 4
dapi08 2:82fdfeec5799 5 #define IP "192.168.1.247"
dapi08 1:da6afd392792 6 #define GATEWAY "192.168.1.1"
dapi08 1:da6afd392792 7 #define MASK "255.255.255.0"
dapi08 1:da6afd392792 8
deepikabhavnani 0:cf516d904427 9
deepikabhavnani 0:cf516d904427 10 // Network interface
deepikabhavnani 0:cf516d904427 11 EthernetInterface net;
dapi08 1:da6afd392792 12
dapi08 2:82fdfeec5799 13
dapi08 2:82fdfeec5799 14 //GPS gps(PC_10, PC_11, PF_8);
dapi08 2:82fdfeec5799 15
dapi08 1:da6afd392792 16 // CANALES DE COMUNICACION
dapi08 1:da6afd392792 17 Serial pc(SERIAL_TX, SERIAL_RX, 115200);
dapi08 1:da6afd392792 18 Serial serGPS(PC_10, PC_11, 9600);
dapi08 2:82fdfeec5799 19 RawSerial serSERVO(PC_12, PD_2, 115200);
dapi08 1:da6afd392792 20 Serial serRS485(PD_5, PD_6, 115200);
dapi08 1:da6afd392792 21
dapi08 1:da6afd392792 22 // SALIDAS PARA LEDS
dapi08 1:da6afd392792 23 DigitalOut led1(LED1, 0); //LED1
dapi08 1:da6afd392792 24 DigitalOut led2(LED2, 0);
dapi08 1:da6afd392792 25 DigitalOut led3(LED3, 0);
dapi08 1:da6afd392792 26
dapi08 1:da6afd392792 27 // SALIDAS DE CONTROL COMUNICACIONES
dapi08 2:82fdfeec5799 28 DigitalOut RS485_DIR(PE_3, 0); //DIR RS485 a RX
dapi08 2:82fdfeec5799 29 DigitalOut RS485_OE(PF_7, 0); //OE RS485 a tri-state
dapi08 1:da6afd392792 30
dapi08 1:da6afd392792 31 // SALIDAS PARA CONTROL DEL SERVO
dapi08 1:da6afd392792 32 DigitalOut control_PWR_servo(PF_9, 1); // Alimentacion del inverter para 220V del servo
dapi08 1:da6afd392792 33 DigitalOut SERVO_ON(PG_1, 0); // Salida de control ON del servo (J7-2)
dapi08 1:da6afd392792 34 DigitalOut SERVO_CLR_COUNT(PG_0, 0); // Salida de control CLR_COUNT del servo (J7-1)
dapi08 1:da6afd392792 35 DigitalOut SERVO_ALARM_CLR(PF_0, 0); // Salida de control ALARM_CLR del servo (J7-4)
dapi08 1:da6afd392792 36 DigitalOut SERVO_CONTROL_MODE(PC_6, 0); // Salida de control CONTROL_MODE del servo (J7-3)
dapi08 1:da6afd392792 37 DigitalOut SERVO_INC_POS(PB_10, 0); // Salida de control INC_POS del servo (J1-2)
dapi08 1:da6afd392792 38 DigitalOut SERVO_DEC_POS(PB_11, 0); // Salida de control DEC_POS del servo (J1-3)
dapi08 1:da6afd392792 39 DigitalOut SERVO_AUX_OUT(PA_15, 0); // Salida de control AUX_OUT del servo (J7-10)
dapi08 1:da6afd392792 40
dapi08 1:da6afd392792 41 // ENTRADAS DE ESTADO DEL SERVO
dapi08 1:da6afd392792 42 DigitalIn SERVO_RDY_IN(PF_13); //Entrada desde SERVO_RDY, 1=activa;
dapi08 1:da6afd392792 43 DigitalIn SERVO_AL_IN(PE_9); //Entrada desde SERVO_AL, 1=activa;
dapi08 1:da6afd392792 44 DigitalIn SERVO_POS_IN(PE_11); //Entrada desde SERVO_POS, 1=activa;
dapi08 1:da6afd392792 45 DigitalIn SERVO_TORQ_L_IN(PF_14); //Entrada desde SERVO_TORQ_L, 1=activa;
dapi08 1:da6afd392792 46 DigitalIn SERVO_Z_SPEED_IN(PE_13); //Entrada desde SERVO_Z_SPEED, 1=activa;
dapi08 1:da6afd392792 47 DigitalIn SRV_D_VEL(PF_2); //Entrada desde SERVO signo nivel de velocidad 1=positivo
dapi08 1:da6afd392792 48 DigitalIn SRV_D_TRQ(PF_1); //Entrada desde SERVO signo nivel de torque 1=positivo
dapi08 1:da6afd392792 49
dapi08 2:82fdfeec5799 50 // ENTRADAS DEL SELECTOR
dapi08 2:82fdfeec5799 51 DigitalIn SEL0(PC_8); //Selector 1 = BABOR/ESTRIBOR, ON(0)=BABOR OFF(1)=ESTRIBOR
dapi08 2:82fdfeec5799 52 DigitalIn SEL1(PC_9); //Selector 2
dapi08 2:82fdfeec5799 53 DigitalIn SEL2(PG_2); //Selector 3
dapi08 2:82fdfeec5799 54 DigitalIn SEL3(PG_3); //Selector 4
dapi08 2:82fdfeec5799 55
dapi08 1:da6afd392792 56 // SALIDAS PWM
dapi08 1:da6afd392792 57 PwmOut SRV_C_TRQ_P(PD_13); // Salida PWM para control del torque POSITIVO del SERVO
dapi08 1:da6afd392792 58 PwmOut SRV_C_TRQ_N(PA_0); // Salida PWM para control del torque NEGATIVO del SERVO
dapi08 1:da6afd392792 59
dapi08 1:da6afd392792 60 // ENTRADAS ANALOGICAS
dapi08 1:da6afd392792 61 AnalogIn SRV_VEL(PA_3); // Entrada analogica de VELOCIDAD del servo
dapi08 1:da6afd392792 62 AnalogIn SRV_TRQ(PC_0); // Entrada analogica de TORQUE del servo
dapi08 1:da6afd392792 63
dapi08 1:da6afd392792 64
dapi08 1:da6afd392792 65 // ENTRADAS GENERALES
dapi08 1:da6afd392792 66 DigitalIn pulsador(PC_13); //Pulsador de usuario, 1=pulsado;
dapi08 1:da6afd392792 67
dapi08 1:da6afd392792 68
dapi08 1:da6afd392792 69
dapi08 2:82fdfeec5799 70 // VARIABLES DE SISTEMA
dapi08 2:82fdfeec5799 71 volatile unsigned long tiempo_ms = 0;
dapi08 2:82fdfeec5799 72 volatile bool f_ms = false; // se pone en cada interrupcion de ms
dapi08 1:da6afd392792 73
dapi08 1:da6afd392792 74
dapi08 2:82fdfeec5799 75 long t_ult_recepcion; // guarda tiempo ultima recepción
dapi08 2:82fdfeec5799 76 byte nMando; // numero de mando 0=babor 1=estribor
dapi08 2:82fdfeec5799 77 int servo; // servo recibido en ultima comunicacion
dapi08 2:82fdfeec5799 78 volatile float latitud;
dapi08 2:82fdfeec5799 79 volatile float longitud;
dapi08 2:82fdfeec5799 80 volatile long fecha_hora;
dapi08 2:82fdfeec5799 81 volatile int n_satelites;
dapi08 2:82fdfeec5799 82 volatile float HDOP;
dapi08 2:82fdfeec5799 83 volatile int rumbo;
dapi08 2:82fdfeec5799 84 volatile int velocidad; // MNPH
dapi08 2:82fdfeec5799 85 volatile int timon_babor;
dapi08 2:82fdfeec5799 86 volatile int timon_estribor;
dapi08 2:82fdfeec5799 87 volatile enEstadoDireccion estado_direccion;
dapi08 2:82fdfeec5799 88 volatile byte EstadoAnteriorServo; //Guarda estado anterior del servo para salir de piloto-automatico o rumbo
dapi08 2:82fdfeec5799 89 volatile byte estado_otro_servo; // Estado del otro servo
dapi08 2:82fdfeec5799 90 volatile int retardoActualizacion; // para no visualizar estado durante este tiempo en ms
dapi08 2:82fdfeec5799 91 volatile bool act_display; // flag para actualizar display
dapi08 2:82fdfeec5799 92 volatile bool trama_estado_valida;
dapi08 2:82fdfeec5799 93 volatile bool trama_posicion_valida;
dapi08 1:da6afd392792 94
dapi08 2:82fdfeec5799 95 // VARIABLE CONTROL SERVO
dapi08 2:82fdfeec5799 96 enEstadoServo estado_servo;
dapi08 2:82fdfeec5799 97 int16_t velocidad_servo;
dapi08 2:82fdfeec5799 98 int16_t torque_servo;
dapi08 2:82fdfeec5799 99 long desviacion_servo;
dapi08 2:82fdfeec5799 100 volatile int pos_actual_servo = 0;
dapi08 2:82fdfeec5799 101 volatile int pos_objetivo_servo = 0;
dapi08 2:82fdfeec5799 102 volatile unsigned long tempo_espera = 0;
dapi08 2:82fdfeec5799 103
dapi08 2:82fdfeec5799 104 int torque_max; // torque máximo calculado
dapi08 2:82fdfeec5799 105 int out_torque = TORQUE_MINIMO; // nivel de torque de TORQUE_MINIMO a TORQUE_MAXIMO
dapi08 2:82fdfeec5799 106
dapi08 2:82fdfeec5799 107 int cons_timon_babor = 0; // consigna % de timon babor bajado
dapi08 2:82fdfeec5799 108 int cons_timon_estribor = 0; // consigna % de timon estribor bajado
dapi08 2:82fdfeec5799 109
dapi08 2:82fdfeec5799 110 float diferencia_rumbo = 0.0; // Diferencia al Rumbo deseado
dapi08 1:da6afd392792 111
dapi08 2:82fdfeec5799 112 st_datos_servo datos_servo; // ESTRUCTURA DE VARIABLES DE ESTADO DEL SERVO DE DIRECCION
dapi08 2:82fdfeec5799 113 st_datos_GPS datos_GPS; // ESTRUCTURA DE DATOS DE ESTADO DEL GPS
dapi08 2:82fdfeec5799 114
dapi08 2:82fdfeec5799 115
dapi08 2:82fdfeec5799 116 // VARIABLES CONFIGURACION DESDE ORDENADOR
dapi08 2:82fdfeec5799 117 int cfg_hora = 7200; // Suma dos horas a UTC
dapi08 2:82fdfeec5799 118
dapi08 2:82fdfeec5799 119
dapi08 2:82fdfeec5799 120 // VARIABLES GENERALES
dapi08 2:82fdfeec5799 121 float ana_velocidad = 0.0;
dapi08 2:82fdfeec5799 122 float ana_torque = 0.0;
dapi08 2:82fdfeec5799 123 bool newtime = false;
dapi08 2:82fdfeec5799 124 ntp_packet in_data; // para recibir fecha y hora del servidor
dapi08 2:82fdfeec5799 125
dapi08 2:82fdfeec5799 126 // VARIABLES DE COMUNICACION RS485
dapi08 2:82fdfeec5799 127 volatile bool f_rs485_busy = false; // comunicacion ocupada
dapi08 2:82fdfeec5799 128
dapi08 2:82fdfeec5799 129 // TIMERS
dapi08 2:82fdfeec5799 130 Timer timer;
dapi08 2:82fdfeec5799 131 Ticker millis; // Interrupcion para cuenta de milisegundos
dapi08 2:82fdfeec5799 132 Ticker tick250us; // Interrupcion de 250us para com rs485
dapi08 2:82fdfeec5799 133
dapi08 2:82fdfeec5799 134
dapi08 2:82fdfeec5799 135
dapi08 2:82fdfeec5799 136
dapi08 2:82fdfeec5799 137
dapi08 2:82fdfeec5799 138
dapi08 2:82fdfeec5799 139
dapi08 2:82fdfeec5799 140
dapi08 2:82fdfeec5799 141 // RUTINAS
dapi08 2:82fdfeec5799 142
dapi08 2:82fdfeec5799 143 // CUENTA MILISEGUNDOS DESDE RESET
dapi08 2:82fdfeec5799 144 void cuenta_ms() {
dapi08 2:82fdfeec5799 145 tiempo_ms++;
dapi08 2:82fdfeec5799 146 posicion_servo(); // AJUSTA POSICION SERVO SI ES NECESARIO
dapi08 2:82fdfeec5799 147 f_ms = true; // se pone en cada interrupcion de ms
dapi08 1:da6afd392792 148 }
dapi08 1:da6afd392792 149
dapi08 1:da6afd392792 150
dapi08 1:da6afd392792 151
dapi08 1:da6afd392792 152
dapi08 1:da6afd392792 153 /*
dapi08 1:da6afd392792 154 /////////////////////////////////////////////////////////
dapi08 1:da6afd392792 155 // PROCESA RECEPCION DESDE SERIAL SERVO
dapi08 1:da6afd392792 156 void onSerialServo(void){ // Procesa recepcion SERVO
dapi08 1:da6afd392792 157
dapi08 1:da6afd392792 158 while (serSERVO.readable()) {
dapi08 1:da6afd392792 159 char c = serSERVO.getc();
dapi08 2:82fdfeec5799 160 // pc.putc(c);
dapi08 2:82fdfeec5799 161 }
dapi08 2:82fdfeec5799 162 }
dapi08 2:82fdfeec5799 163 */
dapi08 2:82fdfeec5799 164
dapi08 2:82fdfeec5799 165
dapi08 2:82fdfeec5799 166
dapi08 2:82fdfeec5799 167
dapi08 2:82fdfeec5799 168
dapi08 2:82fdfeec5799 169 #define FACTOR_INC_RUMBO_BABOR 0.015
dapi08 2:82fdfeec5799 170 #define FACTOR_INC_RUMBO_ESTRIBOR 0.015
dapi08 2:82fdfeec5799 171
dapi08 2:82fdfeec5799 172 // PARA SIMULACION
dapi08 2:82fdfeec5799 173 // Pocesa rumbo_GPS, llamada cada 250ms
dapi08 2:82fdfeec5799 174 void procesa_rumbo_GPS(void){
dapi08 2:82fdfeec5799 175
dapi08 2:82fdfeec5799 176 datos_servo.rumbo -= datos_servo.timon_babor * FACTOR_INC_RUMBO_BABOR;
dapi08 2:82fdfeec5799 177 datos_servo.rumbo += datos_servo.timon_estribor * FACTOR_INC_RUMBO_ESTRIBOR;
dapi08 2:82fdfeec5799 178 // datos_servo.rumbo = flimit_decimales(datos_servo.rumbo, 2);
dapi08 2:82fdfeec5799 179 if(datos_servo.rumbo>360.0){
dapi08 2:82fdfeec5799 180 datos_servo.rumbo -= 360.0;
dapi08 2:82fdfeec5799 181 }
dapi08 2:82fdfeec5799 182 else if(datos_servo.rumbo<0.0){
dapi08 2:82fdfeec5799 183 datos_servo.rumbo += 360.0;
dapi08 1:da6afd392792 184 }
dapi08 1:da6afd392792 185 }
dapi08 1:da6afd392792 186
dapi08 1:da6afd392792 187
dapi08 1:da6afd392792 188
dapi08 1:da6afd392792 189 /////////////////////////////////////////////////////////
dapi08 2:82fdfeec5799 190 // PROGRAMA PRINCIPAL
dapi08 2:82fdfeec5799 191 int main() {
dapi08 2:82fdfeec5799 192 int nc=0;
dapi08 2:82fdfeec5799 193 char out_buffer_2[50];
dapi08 2:82fdfeec5799 194 static int posicion_mando_old = 0;
dapi08 1:da6afd392792 195
dapi08 1:da6afd392792 196
deepikabhavnani 0:cf516d904427 197 // Bring up the ethernet interface
dapi08 2:82fdfeec5799 198 pc.printf("\r\n\r\n");
dapi08 2:82fdfeec5799 199 pc.printf("RESET\r\n\r\n");
dapi08 1:da6afd392792 200 pc.printf("PROGRAMA CONTROL SERVO V0.1\r\n");
dapi08 1:da6afd392792 201 pc.printf("PRUEBAS DE COMUNICACION POR UDP\r\n");
dapi08 1:da6afd392792 202
dapi08 2:82fdfeec5799 203 // Open Ethernet connection
dapi08 2:82fdfeec5799 204 int c=0;
dapi08 2:82fdfeec5799 205 do{
dapi08 2:82fdfeec5799 206 net.disconnect();
dapi08 2:82fdfeec5799 207 wait(2.0); // espera de 1s
dapi08 2:82fdfeec5799 208 int j = net.set_network(IP, MASK, GATEWAY);
dapi08 2:82fdfeec5799 209 printf("set IP status: %i\r\n", j);
dapi08 1:da6afd392792 210
dapi08 2:82fdfeec5799 211 c=net.connect();
dapi08 2:82fdfeec5799 212 if(0 != c) {
dapi08 2:82fdfeec5799 213 printf("Error connecting\r\n");
dapi08 2:82fdfeec5799 214 // return -1;
dapi08 2:82fdfeec5799 215 }
dapi08 2:82fdfeec5799 216 }while(c != 0);
deepikabhavnani 0:cf516d904427 217
deepikabhavnani 0:cf516d904427 218 // Show the network address
deepikabhavnani 0:cf516d904427 219 const char *ip = net.get_ip_address();
dapi08 1:da6afd392792 220 printf("IP address is: %s\r\n", ip ? ip : "No IP");
dapi08 2:82fdfeec5799 221
dapi08 2:82fdfeec5799 222 Thread t; // can pass in the stack size here if you run out of memory
dapi08 2:82fdfeec5799 223 t.start(&udp_main);
dapi08 2:82fdfeec5799 224
dapi08 2:82fdfeec5799 225
dapi08 2:82fdfeec5799 226 // Inicializa datos_servo ESTRUCTURA DE VARIABLES DE ESTADO DEL SERVO DE DIRECCION
dapi08 2:82fdfeec5799 227 datos_servo.n_servo = SEL0.read();
dapi08 2:82fdfeec5799 228 datos_servo.estado = 0;
dapi08 2:82fdfeec5799 229 datos_servo.latitud = 0.0;
dapi08 2:82fdfeec5799 230 datos_servo.longitud = 0.0;
dapi08 2:82fdfeec5799 231 datos_servo.fecha_hora = 0;
dapi08 2:82fdfeec5799 232 datos_servo.velocidad = 0.0; // MNPH
dapi08 2:82fdfeec5799 233 datos_servo.rumbo = 0.0;
dapi08 2:82fdfeec5799 234 datos_servo.ch_radio = 0;
dapi08 2:82fdfeec5799 235 datos_servo.trim_timon_bab = 0;
dapi08 2:82fdfeec5799 236 datos_servo.trim_trans_bab = 6;
dapi08 2:82fdfeec5799 237 datos_servo.trim_timon_estr = 0;
dapi08 2:82fdfeec5799 238 datos_servo.trim_trans_estr = 6;
dapi08 2:82fdfeec5799 239 datos_servo.timon_babor = 0; // %de timon babor bajado, para 100% 5s, 1% = 50ms
dapi08 2:82fdfeec5799 240 datos_servo.timon_estribor = 0; // %de timon estribor bajado, para 100% 5s
dapi08 2:82fdfeec5799 241 datos_servo.rumbo_fijado = 0.0; // Rumbo fijado al pulsar botón para RUMBO FIJO
dapi08 2:82fdfeec5799 242 datos_servo.rumbo_piloto_auto = 0.0; // Rumbo fijado por piloto automático
dapi08 2:82fdfeec5799 243
dapi08 2:82fdfeec5799 244 // Set handler to be called when UDP socket event occurrs.
dapi08 2:82fdfeec5799 245 // sock.attach(&onUDPSocketEvent);
dapi08 1:da6afd392792 246
dapi08 1:da6afd392792 247 timer.start();
dapi08 2:82fdfeec5799 248 millis.attach(&cuenta_ms, 0.001); // the address of the function to be attached (cuenta_ms) and the interval (1 miliseconds)
dapi08 2:82fdfeec5799 249 tick250us.attach(&int250us, 0.0001); // Interrupcion de 250us para comunicaciones por RS485 con mando
dapi08 2:82fdfeec5799 250 led1 = led2 = led3 =1;
dapi08 1:da6afd392792 251 wait(0.5);
dapi08 2:82fdfeec5799 252 led1 = led2 = led3 =0;
dapi08 2:82fdfeec5799 253
dapi08 2:82fdfeec5799 254 // serSERVO.attach(&onSerialServo); // Interrupcion de serial Servo
dapi08 2:82fdfeec5799 255 // serRS485.attach(&onSerialRxRS485, RxIrq); // Interrupcion de RX serial RS485 (MANDOS)
dapi08 2:82fdfeec5799 256 // serRS485.attach(&onSerialTxRS485, Serial::TxIrq); // Interrupcion de TX serial RS485 (MANDOS)
dapi08 2:82fdfeec5799 257
dapi08 2:82fdfeec5799 258 serGPS.attach(&onSerialGPS); // Interrupcion de serial GPS
dapi08 1:da6afd392792 259
dapi08 1:da6afd392792 260 RS485_OE = 1; // habilita conversor 3.3V a 5V para RS485
dapi08 1:da6afd392792 261
dapi08 2:82fdfeec5799 262 /*
dapi08 1:da6afd392792 263 SRV_C_TRQ_P.period(0.001f); // 1 kHz or 1 ms
dapi08 1:da6afd392792 264 SRV_C_TRQ_N.period(0.001f); // 1 kHz or 1 ms
dapi08 1:da6afd392792 265 SRV_C_TRQ_P=0;
dapi08 1:da6afd392792 266 SRV_C_TRQ_N=0;
dapi08 2:82fdfeec5799 267 */
dapi08 2:82fdfeec5799 268
dapi08 2:82fdfeec5799 269 SERVO_ON = 1; // Pone servo en ON
dapi08 2:82fdfeec5799 270
dapi08 2:82fdfeec5799 271 // uint8_t i=0;
dapi08 2:82fdfeec5799 272
dapi08 2:82fdfeec5799 273 // SetDateTime(2020, 4, 25, 10, 00, 0); // Actualiza hora del RTC
dapi08 2:82fdfeec5799 274 // ShowDateTime();
deepikabhavnani 0:cf516d904427 275
dapi08 1:da6afd392792 276 while(1){
dapi08 1:da6afd392792 277
dapi08 2:82fdfeec5799 278 while(f_ms!=true); // espera interrupcion de 1 ms
dapi08 2:82fdfeec5799 279 f_ms = false;
dapi08 2:82fdfeec5799 280
dapi08 2:82fdfeec5799 281 procesaGPS(); // Comprueba trama pendiente de GPS y la procesa
dapi08 1:da6afd392792 282
dapi08 2:82fdfeec5799 283 if(datos_servo.estado == DIR_MASTER || datos_servo.estado == DIR_REPOSO)
dapi08 2:82fdfeec5799 284 datos_servo.posicion_mando = desviacion_servo;
dapi08 2:82fdfeec5799 285 else
dapi08 2:82fdfeec5799 286 datos_servo.posicion_mando = pos_objetivo_servo; // PARA PILOTO AUTOMATICO
dapi08 2:82fdfeec5799 287
dapi08 2:82fdfeec5799 288 if(datos_servo.posicion_mando != posicion_mando_old){ // Si cambia la posicion del mando envia trama
dapi08 2:82fdfeec5799 289 if(abs(desviacion_servo) >= 50 && datos_servo.estado == DIR_REPOSO && estado_otro_servo == DIR_REPOSO){
dapi08 2:82fdfeec5799 290 datos_servo.estado = DIR_MASTER;
dapi08 1:da6afd392792 291 }
dapi08 2:82fdfeec5799 292
dapi08 2:82fdfeec5799 293 if(datos_servo.estado == DIR_MASTER || datos_servo.estado == DIR_RUMBO || datos_servo.estado == DIR_PILOTO)
dapi08 2:82fdfeec5799 294 envia_posicion_mando(datos_servo.posicion_mando);
dapi08 2:82fdfeec5799 295 posicion_mando_old = datos_servo.posicion_mando;
dapi08 2:82fdfeec5799 296 }
dapi08 2:82fdfeec5799 297
dapi08 2:82fdfeec5799 298 // PROCESA CADA SEGUNDO
dapi08 2:82fdfeec5799 299 if(((tiempo_ms+500)%1000)==0){ // Envia cada segundo
dapi08 2:82fdfeec5799 300
dapi08 2:82fdfeec5799 301 // getTime();
dapi08 2:82fdfeec5799 302
dapi08 2:82fdfeec5799 303 // SetDateTime(2020, 4, 25, 10, 00, 0); // Actualiza hora del RTC
dapi08 2:82fdfeec5799 304 // ShowDateTime();
dapi08 2:82fdfeec5799 305 // pc.printf("tiempo_ms:%d\r\n", tiempo_ms);
dapi08 2:82fdfeec5799 306
dapi08 2:82fdfeec5799 307 // pc.printf("RDY:%u AL:%u POS:%u TORQ_L:%u Z_SPEED:%u \r\n", SERVO_RDY_IN.read(), SERVO_AL_IN.read(), SERVO_POS_IN.read(), SERVO_TORQ_L_IN.read(), SERVO_Z_SPEED_IN.read());
dapi08 2:82fdfeec5799 308 // pc.printf("velocidad:%3.3f torque:%3.3f fix:%d satelites:%s\r\n", ana_velocidad, ana_torque, gps.have_fix, gps.NmeaGpsData.NmeaSatelliteTracked);
dapi08 2:82fdfeec5799 309
dapi08 2:82fdfeec5799 310 // procesa_servo(); // lee estado del servo, procesa torque y actualiza
dapi08 2:82fdfeec5799 311 // envia_posicion_mando(datos_servo.posicion_mando);
dapi08 2:82fdfeec5799 312
dapi08 2:82fdfeec5799 313 // printf("tiempo_ms=%d pos_objetivo_servo=%d SEL0=%d ESTADO=%d\r\n", tiempo_ms, pos_objetivo_servo, SEL0.read(), datos_servo.estado);
dapi08 2:82fdfeec5799 314 }
dapi08 1:da6afd392792 315
dapi08 2:82fdfeec5799 316 /*
dapi08 2:82fdfeec5799 317 //PROCESO CADA 10ms
dapi08 2:82fdfeec5799 318 if((tiempo_ms%10) == 0){
dapi08 2:82fdfeec5799 319 ana_velocidad = SRV_VEL.read(); // 1.0=VCC, lee entradas analogicas
dapi08 2:82fdfeec5799 320 ana_torque = SRV_TRQ.read();
dapi08 2:82fdfeec5799 321 SRV_C_TRQ_P.pulsewidth(ana_velocidad*0.001f); // Ajusta PWM de salida DAC
dapi08 2:82fdfeec5799 322 SRV_C_TRQ_N.pulsewidth(ana_torque*0.001f);
dapi08 2:82fdfeec5799 323 }
dapi08 2:82fdfeec5799 324 */
dapi08 2:82fdfeec5799 325 //PROCESO CADA 100ms
dapi08 2:82fdfeec5799 326 if((tiempo_ms%100) == 0){
dapi08 2:82fdfeec5799 327 // procesa_rumbo_GPS(); // SIMULA RUMBO SEGUN TIMON PARA GPS
dapi08 2:82fdfeec5799 328 // procesa_posicion_timones(); // Pocesa activación y posición timones, llamada cada 100ms
dapi08 2:82fdfeec5799 329 }
dapi08 1:da6afd392792 330
dapi08 2:82fdfeec5799 331 //PROCESO CADA 250ms
dapi08 2:82fdfeec5799 332 if((tiempo_ms%250) == 0){
dapi08 2:82fdfeec5799 333 procesa_servo(); // lee estado del servo, procesa torque y actualiza
dapi08 2:82fdfeec5799 334 procesa_posicion_timones(); // Pocesa activación y posición timones, llamada cada 250ms
dapi08 2:82fdfeec5799 335 actualiza_timones(); // ACTUALIZA TIMONES
dapi08 2:82fdfeec5799 336 procesa_rumbo_GPS(); // SIMULA RUMBO SEGUN TIMON PARA GPS
dapi08 2:82fdfeec5799 337 envia_estado_mando(); // cada 250ms
dapi08 2:82fdfeec5799 338 }
dapi08 1:da6afd392792 339
dapi08 1:da6afd392792 340
dapi08 1:da6afd392792 341 // control_PWR_servo = (pulsador.read() == 1)?0:1;
dapi08 1:da6afd392792 342 control_PWR_servo = 0; // encendido
dapi08 2:82fdfeec5799 343
dapi08 2:82fdfeec5799 344 // PROCESO CADA 10 SEGUNDOS
dapi08 2:82fdfeec5799 345 if((tiempo_ms%10000)==0){
dapi08 1:da6afd392792 346
dapi08 2:82fdfeec5799 347 /*
dapi08 2:82fdfeec5799 348 if(pos_objetivo_servo == 0){
dapi08 2:82fdfeec5799 349 pos_objetivo_servo = 200;
dapi08 2:82fdfeec5799 350 escribe_parametro_servo(0, 13, TORQUE_MAXIMO);
dapi08 2:82fdfeec5799 351 }
dapi08 2:82fdfeec5799 352 else if(pos_objetivo_servo == 200){
dapi08 2:82fdfeec5799 353 pos_objetivo_servo = -200;
dapi08 2:82fdfeec5799 354 escribe_parametro_servo(0, 13, TORQUE_MAXIMO);
dapi08 2:82fdfeec5799 355 }
dapi08 2:82fdfeec5799 356 else if(pos_objetivo_servo == -200){
dapi08 2:82fdfeec5799 357 pos_objetivo_servo = 0;
dapi08 2:82fdfeec5799 358 escribe_parametro_servo(0, 13, TORQUE_MINIMO);
dapi08 2:82fdfeec5799 359 }
dapi08 2:82fdfeec5799 360 // printf("\r\n\r\npos_objetivo_servo=%d\r\n\r\n",pos_objetivo_servo);
dapi08 2:82fdfeec5799 361 */
dapi08 1:da6afd392792 362 }
dapi08 1:da6afd392792 363
dapi08 1:da6afd392792 364 // Thread::wait(10000);
dapi08 1:da6afd392792 365 }
dapi08 1:da6afd392792 366
deepikabhavnani 0:cf516d904427 367 return 0;
dapi08 1:da6afd392792 368 }