#include <Wire.
h>
#include <MPU9250_asukiaaa.h>
#include <TinyGPSPlus.h>
#include <SoftwareSerial.h>
#include <SPI.h>
#include "DHT.h"
#include <SD.h>
#include <SFE_BMP180.h>
#define seaLevelPressure_hPa 1013.25
SFE_BMP180 pressure;
//void bmpinit(void);
//float getalti(void);
//float getpr(void);
//float gettemp(void);
//void checkgps(void);
//void displayInfo();
MPU9250_asukiaaa mySensor;
TinyGPSPlus gps;
SoftwareSerial ss(8, 9);
DHT dht(2, DHT11);
SoftwareSerial xb(7,6);
//File dataFile;
float latt,lngt,galti;
unsigned int t,ct;
double baseline;
void setup()
{
xb.begin(9600);
ss.begin(9600);
Serial.begin(115200);
if (!SD.begin(10))
Serial.print('f');
xb.print('f');
mySensor.beginAccel();
mySensor.beginGyro();
dht.begin();
bmpinit();
baseline=getpr();
Serial.println(baseline);
}
void loop()
{
unsigned int t,ct;
float aX,aY,aZ,gX,gY,gZ;
ct=millis();
checkgps();
float T=gettemp();
float P=getpr();
float a=getalti();
float battery = analogRead(A1)*(25.0/1024.0);
/// IMU///////////////////////////
if (!mySensor.gyroUpdate()) {
gX = mySensor.gyroX();
gY = mySensor.gyroY();
gZ = mySensor.gyroZ();}
if (!mySensor.accelUpdate()) {
aX = mySensor.accelX();
aY = mySensor.accelY();
aZ = mySensor.accelZ();}
////////////// SERIAL MONITOR//////////////////////
Serial.print(battery); Serial.print(F(","));
Serial.print(latt, 6); Serial.print(F(","));
Serial.print(lngt, 6); Serial.print(F(","));
// Serial.print("24.860966"); Serial.print(F(","));
// Serial.print("66.990535"); Serial.print(F(","));
Serial.print(T,1);Serial.print(F(","));
Serial.print(P,1);Serial.print(F(","));
Serial.print(a);Serial.print(F(","));
Serial.print(dht.readHumidity()); Serial.print(F(","));
Serial.print(aX); Serial.print(F(","));
Serial.print(aY); Serial.print(F(","));
Serial.print(aZ); Serial.print(F(","));
Serial.print(atan2(aX, aY) * 180 / 3.142); Serial.print(F(","));
Serial.print(gX); Serial.print(F(","));
Serial.print(gY); Serial.print(F(","));
Serial.print(gZ); Serial.print(F(","));
Serial.println(ct-t);
////////////////////SD CARD/////////////////////////////////
// dataFile = SD.open("hassan.txt", FILE_WRITE);
// if(dataFile)
// {
// Serial.println("writing log: ");
// dataFile.print(battery); dataFile.print(F(","));
// dataFile.print(latt,6); dataFile.print(F(","));
// dataFile.print(lngt,6); dataFile.print(F(","));
//// dataFile.print("24.960966"); dataFile.print(F(","));
//// dataFile.print("66.996375"); dataFile.print(F(","));
// dataFile.print(T,1);dataFile.print(F(","));
// dataFile.print(P,2);dataFile.print(F(","));
// dataFile.print(a);dataFile.print(F(","));
// // dataFile.print(dht.readHumidity()); dataFile.print(F(","));
// dataFile.print(aX); dataFile.print(F(","));
// dataFile.print(aY); dataFile.print(F(","));
// dataFile.print(aZ); dataFile.print(F(","));
// //dataFile.print(atan2(aX, aY) * 180 / 3.142); dataFile.print(F(","));
// dataFile.print(gX); dataFile.print(F(","));;
// dataFile.print(gY); dataFile.print(F(","));
// dataFile.print(gZ); dataFile.print(F(","));
// dataFile.println(ct-t);
// dataFile.close();
// }
/////////////////// XBEE //////////////////////////
xb.print(battery); xb.print(F(","));
if(latt>20)
{
xb.print(latt,6); xb.print(F(","));
xb.print(lngt,6); xb.print(F(","));
}
else
{
xb.print("24.860966"); Serial.print(F(","));
xb.print("66.990535"); Serial.print(F(","));
}
xb.print(T,1); xb.print(F(","));
xb.print(P,1); xb.print(',');
xb.print(a); xb.print(F(","));
xb.print(dht.readHumidity()); xb.print(F(","));
xb.print(aX); xb.print(F(","));
xb.print(aY); xb.print(F(","));
xb.print(aZ); xb.print(F(","));
xb.print(atan2(aX, aY) * 180 / 3.142); xb.print(F(","));
xb.print(gX); xb.print(F(","));
xb.print(gY); xb.print(F(","));
xb.print(gZ); xb.print(F(","));
xb.println(ct-t);
t=ct;
delay(100);
}
//xb.print("24.860966"); xb.print(F(","));
//xb.print("66.990535"); xb.print(F(","));
///
FUNCTIONSSSSSWS////////////////////////////////////////////////////////////////////
///
void checkgps(void)
{
while (ss.available() > 0)
if (gps.encode(ss.read()))
displayInfo();
}
void displayInfo()
{
if (gps.location.isValid())
{
latt=gps.location.lat();
lngt=gps.location.lng();
galti=gps.altitude.meters();
}
else
{
Serial.print(F("INVALID"));
}
void bmpinit(void)
{
if (pressure.begin())
Serial.println("BMP180 init success");
else
{
// Oops, something went wrong, this is usually a connection problem,
// see the comments at the top of this sketch for the proper connections.
Serial.println("BMP180 init fail\n\n");
while(1); // Pause forever.
}
}
float getalti(void)
{
char status;
double T,P,p0,a;
// Serial.println();
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
status = pressure.getTemperature(T);
if (status != 0)
{
// Print out the measurement:
//Serial.print("T");
// Serial.println(T,2);
// Serial.print(" deg C, ");
// Serial.print((9.0/5.0)*T+32.0,2);
// Serial.println(" deg F");
// Start a pressure measurement:
// The parameter is the oversampling setting, from 0 to 3 (highest res,
longest wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
// Retrieve the completed pressure measurement:
// Note that the measurement is stored in the variable P.
// Note also that the function requires the previous temperature
measurement (T).
// (If temperature is stable, you can do one temperature measurement for a
number of pressure measurements.)
// Function returns 1 if successful, 0 if failure.
status = pressure.getPressure(P,T);
if (status != 0)
{
// Print out the measurement:
// Serial.print("P");
// Serial.println(P,2);
//Serial.print(" mb, ");
// Serial.print(P*0.0295333727,2);
//// Serial.println(" inHg");
a = pressure.altitude(P,baseline);
//a= a*3.28084,0;
// Serial.print("H");
//Serial.println(a,0);
// Serial.print(" meters, ");
// Serial.println(a*3.28084,0);
// Serial.println(" feet");
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}
delay(10); // Pause for 5 seconds.
return a;
}
float getpr(void)
{
char status;
double T,P,p0,a;
// Serial.println();
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
status = pressure.getTemperature(T);
if (status != 0)
{
// Print out the measurement:
//Serial.print("T");
// Serial.println(T,2);
// Serial.print(" deg C, ");
// Serial.print((9.0/5.0)*T+32.0,2);
// Serial.println(" deg F");
// Start a pressure measurement:
// The parameter is the oversampling setting, from 0 to 3 (highest res,
longest wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
// Retrieve the completed pressure measurement:
// Note that the measurement is stored in the variable P.
// Note also that the function requires the previous temperature
measurement (T).
// (If temperature is stable, you can do one temperature measurement for a
number of pressure measurements.)
// Function returns 1 if successful, 0 if failure.
status = pressure.getPressure(P,T);
if (status != 0)
{
// Print out the measurement:
// Serial.print("P");
// Serial.println(P,2);
//Serial.print(" mb, ");
// Serial.print(P*0.0295333727,2);
//// Serial.println(" inHg");
//a = pressure.altitude(P,1013.25);
// Serial.print("H");
//Serial.println(a,0);
// Serial.print(" meters, ");
// Serial.println(a*3.28084,0);
// Serial.println(" feet");
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}
delay(10); // Pause for 5 seconds.
return P;
}
float gettemp(void)
{
char status;
double T,P,p0,a;
// Serial.println();
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
status = pressure.getTemperature(T);
if (status != 0)
{
// Print out the measurement:
//Serial.print("T");
// Serial.println(T,2);
// Serial.print(" deg C, ");
// Serial.print((9.0/5.0)*T+32.0,2);
// Serial.println(" deg F");
// Start a pressure measurement:
// The parameter is the oversampling setting, from 0 to 3 (highest res,
longest wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
// Retrieve the completed pressure measurement:
// Note that the measurement is stored in the variable P.
// Note also that the function requires the previous temperature
measurement (T).
// (If temperature is stable, you can do one temperature measurement for a
number of pressure measurements.)
// Function returns 1 if successful, 0 if failure.
status = pressure.getPressure(P,T);
if (status != 0)
{
// Print out the measurement:
// Serial.print("P");
// Serial.println(P,2);
//Serial.print(" mb, ");
// Serial.print(P*0.0295333727,2);
//// Serial.println(" inHg");
// a = pressure.altitude(P,1013.25);
// Serial.print("H");
//Serial.println(a,0);
// Serial.print(" meters, ");
// Serial.println(a*3.28084,0);
// Serial.println(" feet");
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}
delay(10); // Pause for 5 seconds.
return T;
}