Buenas, estoy trabajando en un proyecto en el cual. Necesito tener leer un estado alto en un boton y una inclicacion mas de 50°. En ese caso se deberá enviar un mensaje de texto con las coordenadas en que se encuentra el dispositivo.
Hasta ahora este es mi codigo.
#include <SoftwareSerial.h> //incluimos SoftwareSerial
#include <TinyGPS.h> //incluimos TinyGPS
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"
softwareSerial Serial(4,3), SerialSMS(Tx,Rx);
const int buttonPin = 5; //variables
int buttonState = 0;
MPU6050 sensor; // Declaro el objeto MPU6050
int ax, ay, az;
int gx, gy, gz;
long tiempo_prev;
float dt;
float ang_x, ang_y;
float ang_x_prev, ang_y_prev;
TinyGPS gps; // Declaro el objeto gps
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long chars;
unsigned short sentences, failed_checksum; //Declaro la variables para la obtención de datos
void setup()
{
pinMode(buttonPin, INPUT); //boton como entrada
Wire.begin(); //Iniciando I2C
sensor.initialize(); //Iniciando el sensor acelerometro
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH)
sensor.getAcceleration(&ax, &ay, &az); // Leer las aceleraciones y velocidades angulares
sensor.getRotation(&gx, &gy, &gz);
dt = (millis()-tiempo_prev)/1000.0;
tiempo_prev=millis();
float accel_ang_x=atan(ay/sqrt(pow(ax,2) + pow(az,2)))*(180.0/3.14); //Calcular los ángulos con acelerometro
float accel_ang_y=atan(-ax/sqrt(pow(ay,2) + pow(az,2)))*(180.0/3.14);
ang_x = 0.98*(ang_x_prev+(gx/131)*dt) + 0.02*accel_ang_x; //Calcular angulo de rotación con giroscopio y filtro complemento
ang_y = 0.98*(ang_y_prev+(gy/131)*dt) + 0.02*accel_ang_y;
ang_x_prev=ang_x;
ang_y_prev=ang_y;
{
if (ang_x < 50.0) //si inclinacion supera 50°
delay(30000); //espera 30 segundos
serialgps.begin(9600); //inicia sensor gps
{
while(serialgps.available()) //CHEQUEA SI MODULO ESTA HABILITADO
{
int c=Serial.read(); //LEE MODULO GPS
if(gps.encode(c)) //DECODIFICA
{
float latitude, longitude;
gps.f_get_position(&latitude, &longitude);
Serial.print("Lat/Long: ");
Serial.print(latitude,5);
Serial.print(" , ");
Serial.println(longitude,5);
enviar(latitude,longitude);
gps.stats(&chars, &sentences,&failed-checksum);
}
}
}
void enviar(float lat, float long){
delay(500);
Serialmodule.println("AT+CMGF=1");
Serialmodule.write(byte(34));
serialmodule.print("00000000");
serialmodule.write(byte(34));
serialmodule.println();
delay(500);
serialmodule.print("lat/Long");
serialmodule.print(Lat,5);
serialmodule.print(" ");
serialmodule.write(byte(26));
delay(5000);
}
}