Last active
August 29, 2015 14:23
-
-
Save pingud98/2d2a513e943614f4e9b9 to your computer and use it in GitHub Desktop.
Cosmic Pi readout version 1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Adafruit_GPS.h> | |
#include <Adafruit_Sensor.h> | |
#include <Adafruit_L3GD20_U.h> | |
#include <Adafruit_BMP085_U.h> | |
#include <Adafruit_LSM303_U.h> | |
#include <Adafruit_10DOF.h> | |
#include <Adafruit_HTU21DF.h> | |
#include <Wire.h> | |
#define mySerial Serial1 | |
#define GPSECHO true | |
const int timeresetpin = 50; | |
Adafruit_10DOF dof = Adafruit_10DOF(); | |
Adafruit_LSM303_Accel_Unified accel = Adafruit_LSM303_Accel_Unified(30301); | |
Adafruit_LSM303_Mag_Unified mag = Adafruit_LSM303_Mag_Unified(30302); | |
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(18001); | |
Adafruit_HTU21DF htu = Adafruit_HTU21DF(); | |
Adafruit_GPS GPS(&mySerial); | |
char gpstext[ ] = ""; | |
String gpstalk; | |
String inputString = ""; // a string to hold incoming data | |
boolean stringComplete = false; // whether the string is complete | |
boolean eventhappened = false; //has an event been detected? | |
String lastgpsread; | |
int energy1 = random(10000, 20000); | |
int energy2 = random(10050, 19950); | |
int deviceid = random(1, 10000); | |
float temperature; | |
double temperatureh=0; | |
double humidity = 0; | |
double baroaltitude = 0; | |
double accelx = 0; | |
double accely = 0; | |
double accelz = 0; | |
double magx = 0; | |
double magy = 0; | |
double magz = 0; | |
int timereset = 0; | |
int exacttime =0; | |
int uptime = 0; | |
/* Update this with the correct SLP for accurate altitude measurements */ | |
float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA; | |
void setup() | |
{ | |
initSensors(); | |
// connect at 115200 so we can read the GPS fast enough and echo without dropping chars | |
// also spit it out | |
Serial.begin(115200); | |
// 9600 NMEA is the default baud rate for Adafruit MTK GPS's- some use 4800 | |
GPS.begin(9600); | |
mySerial.begin(9600); | |
GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY); | |
GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz update rate | |
delay(1000); | |
Serial.println("GPS online"); | |
inputString.reserve(200); | |
pinMode(timeresetpin, INPUT); | |
attachInterrupt(50, beep, RISING); | |
} | |
void loop() // run over and over again | |
{ | |
exacttime++; | |
if (stringComplete) { | |
lastgpsread = inputString; | |
lastgpsread.trim(); | |
//Serial.println(inputString); | |
// clear the string: | |
inputString = ""; | |
stringComplete = false; | |
} | |
if (eventhappened) { | |
Serial.println("Beep"); | |
eventhappened = false; | |
sensorreadout(); | |
printdatajson(); | |
exacttime = 0; | |
} | |
// timereset = digitalRead(timeresetpin); | |
// exacttime++; | |
// if (timereset != digitalRead(timeresetpin)) | |
// { | |
// if (digitalRead(timeresetpin) == HIGH ) | |
// { | |
// exacttime = 0; | |
// } | |
// } | |
// } | |
//delay(100); | |
} | |
void printdatajson() | |
{ | |
//start the data output on in json format | |
Serial.print("{ "); | |
Serial.print(" \"gps\":"); | |
Serial.print(" \""); | |
Serial.print(lastgpsread); | |
Serial.print("\""); | |
Serial.print(" ,"); | |
Serial.print(" \"timing\": "); | |
Serial.print(exacttime); | |
Serial.print(','); | |
Serial.print(" \"energy\": {"); | |
Serial.print(" \"channel1\": "); | |
Serial.print(energy1); | |
Serial.print(','); | |
Serial.print(" \"channel2\": "); | |
Serial.print(energy2); | |
Serial.print(" },"); | |
Serial.print(" \"altitude\": "); | |
Serial.print(baroaltitude); | |
Serial.print(","); | |
Serial.print(" \"humidity\": "); | |
Serial.print(humidity); | |
Serial.print(","); | |
Serial.print(" \"gravitationalOrientation\": {"); | |
Serial.print(" \"x\": "); | |
Serial.print(accelx); | |
Serial.print(","); | |
Serial.print(" \"y\": "); | |
Serial.print(accely); | |
Serial.print(","); | |
Serial.print(" \"z\": "); | |
Serial.print(accelz); | |
Serial.print(" },"); | |
Serial.print(" \"magneticOrientation\": {"); | |
Serial.print(" \"x\": "); | |
Serial.print(magx); | |
Serial.print(","); | |
Serial.print(" \"y\": "); | |
Serial.print(magy); | |
Serial.print(","); | |
Serial.print(" \"z\": "); | |
Serial.print(magz); | |
Serial.print(" },"); | |
Serial.print(" \"temperature\": {"); | |
Serial.print(" \"value1\": "); | |
Serial.print(temperatureh); //val1 is from the humidity sensor | |
Serial.print(","); | |
Serial.print(" \"value2\": "); | |
Serial.print(temperature); | |
Serial.print(" },"); | |
Serial.print(" \"uptime\": "); | |
Serial.print(uptime); | |
Serial.print(","); | |
Serial.print(" \"id\": "); | |
Serial.print(deviceid); | |
Serial.println("}"); | |
} | |
void serialEvent1() { | |
while (Serial1.available()) { | |
// get the new byte: | |
char inChar = (char)Serial1.read(); | |
// add it to the inputString: | |
if (inChar != char(10)) | |
{ | |
inputString += inChar; | |
} | |
// if the incoming character is a newline, set a flag | |
// so the main loop can do something about it: | |
if (inChar == '\n') { | |
stringComplete = true; | |
} | |
} | |
} | |
void serialEventRun(void) | |
{ | |
if (Serial1.available()) | |
serialEvent1(); | |
} | |
void initSensors() | |
{ | |
if (!accel.begin()) | |
{ | |
/* There was a problem detecting the LSM303 ... check your connections */ | |
Serial.println(F("Ooops, no LSM303 detected ... Check your wiring!")); | |
while (1); | |
} | |
if (!mag.begin()) | |
{ | |
/* There was a problem detecting the LSM303 ... check your connections */ | |
Serial.println("Ooops, no LSM303 detected ... Check your wiring!"); | |
while (1); | |
} | |
if (!bmp.begin()) | |
{ | |
/* There was a problem detecting the BMP180 ... check your connections */ | |
Serial.println("Ooops, no BMP180 detected ... Check your wiring!"); | |
while (1); | |
} | |
if (!htu.begin()) { | |
Serial.println("Couldn't find HTU21DF sensor!"); | |
while (1); | |
} | |
} | |
void sensorreadout() | |
{ | |
sensors_event_t accel_event; | |
sensors_event_t mag_event; | |
sensors_event_t bmp_event; | |
sensors_vec_t orientation; | |
/* Calculate pitch and roll from the raw accelerometer data */ | |
accel.getEvent(&accel_event); | |
if (dof.accelGetOrientation(&accel_event, &orientation)) | |
{ | |
accelx = (accel_event.acceleration.x); | |
accely = (accel_event.acceleration.y); | |
accelz = (accel_event.acceleration.z); | |
} | |
/* Calculate the heading using the magnetometer */ | |
mag.getEvent(&mag_event); | |
if (dof.magGetOrientation(SENSOR_AXIS_Z, &mag_event, &orientation)) | |
{ | |
magx = (mag_event.magnetic.x); | |
magy = (mag_event.magnetic.y); | |
magz = (mag_event.magnetic.z); | |
} | |
/* Calculate the altitude using the barometric pressure sensor */ | |
bmp.getEvent(&bmp_event); | |
if (bmp_event.pressure) | |
{ | |
/* Get ambient temperature in C */ | |
bmp.getTemperature(&temperature); | |
/* Convert atmospheric pressure, SLP and temp to altitude */ | |
baroaltitude = (bmp.pressureToAltitude(seaLevelPressure,bmp_event.pressure,temperature)); | |
temperatureh = (htu.readTemperature()); | |
humidity = (htu.readHumidity()); | |
} | |
energy1= energy1 + random(-100,100); | |
energy2= energy2 + random(-100,100); | |
uptime++; | |
} | |
void beep() | |
{ | |
eventhappened = true; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment