Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/08/2014, 12:50
fgarbu3
 
Fecha de Ingreso: agosto-2014
Mensajes: 2
Antigüedad: 9 años, 9 meses
Puntos: 0
Codigo para comparar valores

Buenas tardes a todos:
Es mi primer comentario en estos foros y aprovecho esta oportunidad para saludar a usuarios y moderadores y aradecer este espacio Web de programación.
Jubilado tras muchos años de trabajar en “hardware”, siempre he querido dedicar un tiempo a las cuestiones de “software” pero solo ahora dispongo de tiempo para ello.
Mi primer intento es elaborar un dispositivo que me ayude a la navegación a vela a la que soy aficionado.
Para ello he adquirido el hardware necesario (placa Arduino Mega y un sensor de Magnetismo y Aceleración). Los parámetros de funcionamiento del sensor (magnetismo+aceleración) ya los tengo en mi poder y he logrado modificar rutinas en C++ para presentar en el puerto COM el dato de RUMBO (diferencia en grados entre el Norte Magnetico y la posición del sensor.
El código de la rutina es el siguiente:
Código:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_LSM303_U.h>

/* Compatibilizacion Unificada de identidad de sensores */
Adafruit_LSM303_Accel_Unified accel = Adafruit_LSM303_Accel_Unified(54321);
Adafruit_LSM303_Mag_Unified mag = Adafruit_LSM303_Mag_Unified(12345);

void setup(void) 
{
  Serial.begin(9600);
  
  /* Inicializacion de sensores*/
  if(!mag.begin())
  {
    /* Comprobacion de cableado */
    Serial.println("Bueno… :No detecto el sensor...Comprobar cables !");
    while(1);
  }
}

void loop(void) 
{
  /* Detectar evento del sensor*/ 
  sensors_event_t event; 
  mag.getEvent(&event);
  
  float Pi = 3.14159;
  
  // Calcular angulo de vectores X,Y
  int heading = (atan2(event.magnetic.y,event.magnetic.x) * 180) / Pi;
  
  // Normalizar angulo de 0-360
  if (heading < 0)
  {
    heading = 360 + heading;
  }
  Serial.print("RUMBO: ");

  Serial.println(heading);
  delay(500);
}
Mi propósito el de ampliar la rutina anterior de modo que accionando en cualquier momento un pulsador, se pueda retener el valor de rumbo existente, y de lugar a una comparación de los valores siguientes con el almacenado. Si el valor retenido fuese por ejemplo de 170º , si el rumbo (real) aumentase/disminuyese un valor establecido de Xº quisiera llevarlo a un generador PWM capaz mover un motor DC en un sentido u otro para corregir el desvío (o diferencia) entre el valor retenido y el existente posteriormente.
Obviamente y para reducir al máximo los componentes de hardware, una segunda pulsacion del pulsador pretendo que "borre" el valor guardado y quedar listo para una nueva secuencia.
En las librerías de Arduino he leido casi todo lo referente control de robotica pero apenas hay nada dedicado a lo que he explicado mas arriba.
Un saludo a todos y gracias de antemano por cualquier sugerencia de cómo acometer mi pequeño proyecto.