servo+pulsador +MPU6050

Buenas tardes,ante todo soy principiante.Tengo un proyecto de utilizar un servo para controlar un dispositivo que tiene 3 posiciones. Quiero utilizar un reed para cuando hay contacto el servo mueva 90 grados , y cuando no haya contacto vualva a valor 0. ademas queria utilizar un MPU 6050 para que cuando hay una inclinación determinada el servo vaya hasta solo los 180 grados. Por separado tengo los sketch,pero no se como unirlos. el sketch del acelerometro solo consigo que gire a la vez servo y acelerometro,pero no se como hacer que gire solo con una inclinación determinada. despues seria añadir el reed y asignarle los valores .
adjunto el sketch del acelerometro

#include <Servo.h>
#include <MPU6050.h>
MPU6050 mpu;
int16_t ax, ay, az;
int16_t gx, gy, gz;
Servo myservo;
int val;
int prevVal;
void setup()
{   pinMode(13, OUTPUT);   
    Wire.begin();
    Serial.begin(38400);
    Serial.println("Initialize MPU");
    mpu.initialize();
    Serial.println(mpu.testConnection() ? "Connected" : "Connection failed");
    myservo.attach(9);
}
void loop()
{  int n=1;
    mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
    if (n>180) n= 1;
   val = map(ay, -17000, 17000, 0, 179);
    if (val != prevVal)
    {  digitalWrite(13,HIGH);
        myservo.write(val);
        prevVal = val;
    }
    delay(50);
    digitalWrite(13,LOW);
}

el sketch del acelerometro solo consigo que gire a la vez servo y acelerometro,pero no se como hacer que gire solo con una inclinación determinada

no sabes como hacer que gire con una inclinación determinada?

El código que muestra mueve el servo cada vez que val cambia

if (val != prevVal)

Si quieres que se mueva con una inclinación primero te diría que establezcas una zona de inclinación.
Supongamos que quieres que todo ocurra a 45 grados.
Bueno, yo establecería una zona en torno a los 45 grados +- 2 grados para comenzar y ver que tan bien puedes lograr dicha inclinación.

para ello usa esto

if (abs(val-45) < 2.0)

cada vez que val tome valores entre 43.01 y 46.99 el sistema reaccionará.
Si ajustas el 2.00 y lo haces mas chico será mas fino el ajuste.
Si el sensor no te da una buena repetibilidad entonces usa un valor mayor a 2.0

muchas gracias ,esta hay delante y no lo hubiera encontrado

Perdonar el retraso ,pero me estoy documentando por el google como puedo unir dos loop, uno el anteriormente comentado y este:

[code]//zoomkat servo button toggle test 4-28-2012

#include <Servo.h>
int button = 5; //button pin, connect to ground to move servo
int press = 0;
Servo servo;
boolean toggle = true;

void setup()
{
  pinMode(button, INPUT); //arduino monitor pin state
  servo.attach(9); //pin for servo control signal
  digitalWrite(5, HIGH); //enable pullups to make pin high
}

void loop()
{
  press = digitalRead(button);
  if (press == LOW)
  {
    if(toggle)
    {
      servo.write(60);
      toggle = !toggle;
    }
    else
    {
      servo.write(20);
      toggle = !toggle;
    }
  }
  delay(100);  //delay for debounce
}

[/code]

Quiero que cuando no haya una señal del sensor hall, mueva por ejemplo 60 grados el servo,y si vuelve haber señal regrese a 0. pero aparte que cuando haya una inclinacion de 45 grados , el servo vaya a 120 grados (por poner un ejemplo) tanto si el servo esta posicionado en 0 como en 60 grados. Gracias de antemano una vez mas

prueba_hall.ino (617 Bytes)