Pedro Campos
/
SERVOS_V0_3
test
Diff: main.cpp
- Revision:
- 6:c21017e969af
- Parent:
- 5:420cb56093d3
- Child:
- 7:60d157ef1134
diff -r 420cb56093d3 -r c21017e969af main.cpp --- a/main.cpp Fri Jun 19 10:47:30 2020 +0000 +++ b/main.cpp Wed Jul 01 11:43:45 2020 +0000 @@ -87,9 +87,6 @@ volatile int timon_estribor; volatile enEstadoDireccion estado_direccion; volatile byte EstadoAnteriorServo; //Guarda estado anterior del servo para salir de piloto-automatico o rumbo -volatile byte estado_otro_servo; // Estado del otro servo -volatile int posicion_otro_servo; // Posicion del otro servo -volatile float rumbo_otro_servo; // Rumbo del otro servo volatile int retardoActualizacion; // para no visualizar estado durante este tiempo en ms volatile bool act_display; // flag para actualizar display volatile bool trama_estado_valida; @@ -115,6 +112,7 @@ st_datos_servo datos_servo; // ESTRUCTURA DE VARIABLES DE ESTADO DEL SERVO DE DIRECCION st_datos_GPS datos_GPS; // ESTRUCTURA DE DATOS DE ESTADO DEL GPS +volatile st_datos_servo datos_otro_servo; // ESTRUCTURA DE VARIABLES DE ESTADO DEL OTRO SERVO DE DIRECCION @@ -210,7 +208,7 @@ int nc=0; char out_buffer_2[50]; static int posicion_mando_old = 0; - +static bool f_envia_trama_modbus = false; // Bring up the ethernet interface pc.printf("\r\n\r\n"); @@ -313,7 +311,7 @@ datos_servo.posicion_mando = pos_objetivo_servo; // PARA PILOTO AUTOMATICO if(datos_servo.posicion_mando != posicion_mando_old){ // Si cambia la posicion del mando envia trama - if(abs(desviacion_servo) >= 50 && datos_servo.estado == DIR_REPOSO && estado_otro_servo == DIR_REPOSO){ + if(abs(desviacion_servo) >= 50 && datos_servo.estado == DIR_REPOSO && datos_otro_servo.estado == DIR_REPOSO){ datos_servo.estado = DIR_MASTER; } @@ -325,6 +323,7 @@ // PROCESA CADA SEGUNDO if(((tiempo_ms+500)%1000)==0){ // Envia cada segundo +// test_modbus(); // TEST PARA TRAMA MODBUS // getTime(); // SetDateTime(2020, 4, 25, 10, 00, 0); // Actualiza hora del RTC @@ -367,19 +366,31 @@ } if(recibidoEstadoServo==true){ //Si ha recibido estado del otro servo está a true para sincronizacion + if(timerRS485.read_ms()>60 && f_envia_trama_modbus == true){ + envia_trama_modbus(); // ENVIA TRAMA MODBUS RS485 + f_envia_trama_modbus = false; + } if(timerRS485.read_ms()>=120){ envia_estado_mando(); recibidoEstadoServo = false; + f_envia_trama_modbus = true; timerRS485.reset(); } } else{ int espera = (babor_estribor==0)? 240 :260; - if(timerRS485.read_ms()>=espera){ // Si es servo de babor = 240ms, estribor = 260ms, evita colision + if(timerRS485.read_ms()>espera){ // Si es servo de babor = 240ms, estribor = 260ms, evita colision envia_estado_mando(); recibidoEstadoServo = false; + f_envia_trama_modbus = true; timerRS485.reset(); } + else{ + if(timerRS485.read_ms()>(espera-60) && f_envia_trama_modbus == true){ + envia_trama_modbus(); // ENVIA TRAMA MODBUS RS485 + f_envia_trama_modbus = false; + } + } } // control_PWR_servo = (pulsador.read() == 1)?0:1;