test

Revision:
4:7564d0ffd595
Parent:
3:55227f9877e0
Child:
5:420cb56093d3
diff -r 55227f9877e0 -r 7564d0ffd595 main.cpp
--- a/main.cpp	Wed May 27 09:41:53 2020 +0000
+++ b/main.cpp	Thu Jun 18 07:31:09 2020 +0000
@@ -70,6 +70,7 @@
 // VARIABLES DE SISTEMA
 volatile unsigned long tiempo_ms = 0;
 volatile bool f_ms = false;             // se pone en cada interrupcion de ms
+int babor_estribor = 0;                 // si 0=control servo babor, si 1=control servo estribor
 
 
 long t_ult_recepcion;   // guarda tiempo ultima recepción
@@ -92,6 +93,7 @@
 volatile bool trama_estado_valida;
 volatile bool trama_posicion_valida;
 
+
 // VARIABLE CONTROL SERVO
 enEstadoServo estado_servo;
 int16_t velocidad_servo;
@@ -113,6 +115,7 @@
 st_datos_GPS datos_GPS;           // ESTRUCTURA DE DATOS DE ESTADO DEL GPS
 
 
+
 // VARIABLES CONFIGURACION DESDE ORDENADOR
 int cfg_hora = 7200;  // Suma dos horas a UTC
 
@@ -127,10 +130,16 @@
 volatile bool f_rs485_busy = false;             // comunicacion ocupada
 volatile bool recibidoEstadoServo = false;      //Si ha recibido estado del otro servo se pone a true para sincronizacion
 
+// VARIABLES RECIBIDAS DESDE MANDO
+int estado_mando = 0;
+byte pulsadores = 0;    // Estado pulsadores del mando
+
+byte estado_old = DIR_REPOSO;  // ultimo estado enviado
+
 
 // TIMERS
 Timer timer;
-Ticker millis;          // Interrupcion para cuenta de milisegundos
+Ticker tick_millis;     // Interrupcion para cuenta de milisegundos
 Ticker tickRS485us;     // Interrupcion de 100us para com rs485
 Timer timerRS485;       // Timer para sincronizacion por rs485 de los mandos
 
@@ -139,7 +148,6 @@
 
 
 
-
 // RUTINAS
 
 // CUENTA MILISEGUNDOS DESDE RESET
@@ -150,6 +158,12 @@
 }
 
 
+// devuelve cuenta de tiempo en ms
+unsigned long millis(void){     // devuelve cuenta de tiempo en ms
+    return tiempo_ms;
+}
+
+
 
 
 /*
@@ -201,7 +215,8 @@
     pc.printf("RESET\r\n\r\n");
     pc.printf("PROGRAMA CONTROL SERVO V0.1\r\n");
     pc.printf("CONTROL DE SERVO DE ");
-    if(SEL0.read()==0)  // Si es servo de babor = 0
+    babor_estribor = SEL0.read();
+    if(babor_estribor == 0)  // Si es servo de babor = 0
         pc.printf("BABOR\r\n");
     else
         pc.printf("ESTRIBOR\r\n");
@@ -232,7 +247,7 @@
 
      
     // Inicializa datos_servo ESTRUCTURA DE VARIABLES DE ESTADO DEL SERVO DE DIRECCION
-    datos_servo.n_servo = SEL0.read();
+    datos_servo.n_servo = babor_estribor;
     datos_servo.estado = 0;
     datos_servo.latitud = 0.0;
     datos_servo.longitud = 0.0;
@@ -253,7 +268,7 @@
     // sock.attach(&onUDPSocketEvent);
 
     timer.start();
-    millis.attach(&cuenta_ms, 0.001);               // the address of the function to be attached (cuenta_ms) and the interval (1 miliseconds)
+    tick_millis.attach(&cuenta_ms, 0.001);          // the address of the function to be attached (cuenta_ms) and the interval (1 miliseconds)
     tickRS485us.attach(&SerialTxRS485, 0.0001);     // Interrupcion de 100us para comunicaciones por RS485 con mando
     timerRS485.start();                             // Timer para sincronizacion desde recepcion del otro control servo
 
@@ -262,7 +277,7 @@
     led1 = led2 = led3 =0;
 
 //    serSERVO.attach(&onSerialServo);  // Interrupcion de serial Servo
-//    serRS485.attach(&onSerialRxRS485, RxIrq);  // Interrupcion de RX serial RS485 (MANDOS)
+    serRS485.attach(&onSerialRxRS485, Serial::RxIrq);  // Interrupcion de RX serial RS485 (MANDOS)
 //    serRS485.attach(&onSerialTxRS485, Serial::TxIrq);  // Interrupcion de TX serial RS485 (MANDOS)
 
     serGPS.attach(&onSerialGPS);      // Interrupcion de serial GPS
@@ -320,7 +335,7 @@
 //            procesa_servo();                       // lee estado del servo, procesa torque y actualiza
 //            envia_posicion_mando(datos_servo.posicion_mando);
 
-//            printf("tiempo_ms=%d pos_objetivo_servo=%d SEL0=%d ESTADO=%d\r\n", tiempo_ms, pos_objetivo_servo, SEL0.read(), datos_servo.estado);
+//            printf("tiempo_ms=%d pos_objetivo_servo=%d SEL0=%d ESTADO=%d\r\n", tiempo_ms, pos_objetivo_servo, babor_estribor, datos_servo.estado);
         }
 
 /*
@@ -341,6 +356,8 @@
         //PROCESO CADA 250ms
         if((tiempo_ms%250) == 0){
             procesa_servo();                // lee estado del servo, procesa torque y actualiza
+            procesa_estado();               // PROCESA CAMBIO DE ESTADO
+            procesa_piloto_automatico();    // procesa piloto automático
             procesa_posicion_timones();     // Pocesa activación y posición timones, llamada cada 250ms
             actualiza_timones();            // ACTUALIZA TIMONES
             procesa_rumbo_GPS();            // SIMULA RUMBO SEGUN TIMON PARA GPS
@@ -354,7 +371,7 @@
             }
         }
         else{
-            int espera = (SEL0.read()==0)? 240 :260;
+            int espera = (babor_estribor==0)? 240 :260;
             if(timerRS485.read_ms()>=espera){      // Si es servo de babor = 240ms, estribor = 260ms, evita colision
                 envia_estado_mando();
                 timerRS485.reset();