Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ADS1115 BME280 CronoDot SDFileSystem mbed
Fork of Outdoor_UPAS_v1_2_Tboard by
Revision 27:922f53fa649c, committed 2016-04-21
- Comitter:
- caseyquinn
- Date:
- Thu Apr 21 18:22:47 2016 +0000
- Parent:
- 26:6aa294d83af4
- Child:
- 28:42932d3b105d
- Child:
- 31:aea6bfaefa0f
- Commit message:
- Fixed distance calculations to determine if at home or work/school. This version doesn't have the pumps turning on, and no flow control.
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Apr 20 16:47:28 2016 +0000
+++ b/main.cpp Thu Apr 21 18:22:47 2016 +0000
@@ -93,7 +93,7 @@
/////////////////////////////////////////////
char filename[] = "/sd/XXXX0000LOG000000000000---------------.txt";
SDFileSystem sd(PB_5, PB_4, PB_3, PB_6, "sd");//(D4, D5, D3, D10, "sd"); // (MOSI, MISO, SCK, SEL)
-DigitalIn sdCD(PA_11);
+DigitalIn sdCD(PA_11, PullUp);
/////////////////////////////////////////////
//Callbacks
@@ -166,18 +166,12 @@
int dutyUp;
int dutyDown;
-float flat = 0;
-float flon = 0;
-
bool gpsFix;
uint8_t gpssatellites = 0;
double gpsspeed = 0.0;
double gpslatitude = 0.0;
double gpslongitude = 0.0;
float gpsaltitude = 0.0;
-char gpslat = 'W';
-char gpslon = 'N';
-
float home_lat = 40.00000; //40.580508;
float home_lon = -105.000000; //-105.081823;
@@ -317,6 +311,7 @@
void sendData(){
+ //First byte is designator for the App
uint8_t sampleTimePassValues[13] = {0x01,0x00,0x00,0x0A,0x01,0x01,0x10,0x00,0x00,0x0A,0x01,0x01,0x10};
uint8_t subjectLabelOriginal[9] = {0x02,0x52,0x45,0x53,0x45,0x54,0x5F,0x5F,0x5f};
uint8_t dataLogOriginal[2] = {0x03,0x0A,};
@@ -376,31 +371,11 @@
}
//////////////////////////////////////////////////////////////
-// GPS: Degree-minute format to decimal-degrees
-//////////////////////////////////////////////////////////////
-double convertDegMinToDecDeg (float degMin)
-{
- double min = 0.0;
- double decDeg = 0.0;
-
- //get the minutes, fmod() requires double
- min = fmod((double)degMin, 100.0);
-
- //rebuild coordinates in decimal degrees
- degMin = (int) ( degMin / 100 );
- decDeg = degMin + ( min / 60 );
-
- return decDeg;
-}
-
-//////////////////////////////////////////////////////////////
// GPS: Calculate distance from target location
//////////////////////////////////////////////////////////////
double GPSdistanceCalc (float tlat, float tlon)
{
-
-
float tlatrad, flatrad;
float sdlong, cdlong;
float sflat, cflat;
@@ -408,10 +383,10 @@
float delta, denom;
double distance;
- delta = (flon-tlon)*0.0174532925;
+ delta = (gpslongitude-tlon)*0.0174532925;
sdlong = sin(delta);
cdlong = cos(delta);
- flatrad = (flat)*0.0174532925;
+ flatrad = (gpslatitude)*0.0174532925;
tlatrad = (tlat)*0.0174532925;
sflat = sin(flatrad);
cflat = cos(flatrad);
@@ -457,8 +432,6 @@
RTC_UPAS.get_time();
-
-
press = bmesensor.getPressure();
temp = bmesensor.getTemperature()-5.0;
rh = bmesensor.getHumidity();
@@ -477,10 +450,10 @@
vInReading = ads.readADC_SingleEnded(1, 0xD583); // read channel 0
if(vInReading > 5950 && amps > 8191) {
- pumps = 0;
+ //pumps = 0;
wait(1);
} else if(pumps == 0 && amps < 8191) {
- pumps = 1;
+ //pumps = 1;
}
amps = gasG.getAmps();
@@ -512,79 +485,36 @@
}
//if(gpsEN ==1){
- /*
- if(gpsFix){
- RGB_LED.set_led(1,1,1);
- }else{
- RGB_LED.set_led(1,0,0);
- }
- */
+
gpsFix = gps.read(1);
- //RGB_LED.set_led(1,1,0);
gpsspeed = gps.speed;
gpssatellites = gps.satellites;
gpslatitude = gps.lat;
- // gpslat = 'N'; //gps.lat; need to fix this (if statement?)
gpslongitude = gps.lon;
- // gpslon = 'W'; //gps.lon; need to fix this (if statement?)
gpsaltitude = gps.altitude;
-
- /*
- if (abs(gpslatitude) > 0 && abs(gpslongitude) > 0) {
- if(gpslat == 'S')
- {
- flat = convertDegMinToDecDeg (gpslatitude) * -1;
- }
- else
- {
- flat = convertDegMinToDecDeg (gpslatitude);
- }
-
- if(gpslon == 'W')
- {
- flon = convertDegMinToDecDeg (gpslongitude) * -1;
- }
- else
- {
- flon = convertDegMinToDecDeg (gpslongitude);
- }
-
- workDistance = GPSdistanceCalc (work_lat, work_lon);
- homeDistance = GPSdistanceCalc (home_lat, home_lon);
- }
-
- if (homeDistance == 99999 && workDistance == 99999) {
- // digitalWrite (work_yellow_led, HIGH);
- // digitalWrite (home_green_led, HIGH);
- // digitalWrite (travel_red_led, HIGH);
+ if(gpsFix){
+ workDistance = GPSdistanceCalc (work_lat, work_lon);
+ homeDistance = GPSdistanceCalc (home_lat, home_lon);
+
+ if(workDistance < 50) {
+ location = 1;
+ RGB_LED.set_led(0,1,1);
+ }else if(homeDistance < 20) { // 25 or 30 m instead?
+ location = 2;
+ RGB_LED.set_led(1,0,1);
+ }else{
+ location = 3;
+ RGB_LED.set_led(1,1,1);
+ }
+
+ }else if(homeDistance == 99999 && workDistance == 99999){
location = 0;
- }
-
- else if (workDistance < 30) {
- // digitalWrite (work_yellow_led, HIGH);
- // digitalWrite (home_green_led, LOW);
- // digitalWrite (travel_red_led, LOW);
- location = 1;
- }
-
- else if (homeDistance < 20) {
- // digitalWrite (work_yellow_led, LOW);
- // digitalWrite (home_green_led, HIGH);
- // digitalWrite (travel_red_led, LOW);
- location = 2;
- }
-
- else {
- // digitalWrite (work_yellow_led, LOW);
- // digitalWrite (home_green_led, LOW);
- // digitalWrite (travel_red_led, HIGH);
- location = 3;
- }
-
-
-}
-*/
+ RGB_LED.set_led(1,1,0);
+ }
+
+//}
+
FILE *fp = fopen(filename, "a");
fprintf(fp, "%02d,%02d,%02d,%02d,%02d,%02d,",RTC_UPAS.year, RTC_UPAS.month,RTC_UPAS.date,RTC_UPAS.hour,RTC_UPAS.minutes,RTC_UPAS.seconds);
@@ -594,7 +524,9 @@
fprintf(fp, "%.1f,%.1f,%.1f,%.3f,%.3f,%.3f,%.1f,", angle_x,angle_y,angle_z,mag_x, mag_y, mag_z,compass);
fprintf(fp, "%d,%d,%d,%d,%d,%d," ,uv,omronReading, vInReading, vBlowerReading, omronDiff,amps);
fprintf(fp, "%d,%d,%d,%1.3f,%1.3f,", bVolt, bFuel,digital_pot_set, deltaMflow, deltaVflow);
- fprintf(fp, "%f,%f,%06d,%06d,%f,%d,%f,%d,%d\r\n", gpslatitude, gpslongitude, (long)gps.date, (long)gps.utc, gpsspeed, gpssatellites, gpsaltitude, gpsFix, pumps == 1); // test and add in speed, etc that Josh added in to match the adafruit GPS
+ fprintf(fp, "%f,%f,%06d,%06d,", gpslatitude, gpslongitude, (long)gps.date, (long)gps.utc);
+ fprintf(fp, "%f,%d,%f,%d,", gpsspeed, gpssatellites, gpsaltitude, gpsFix);
+ fprintf(fp, "%f,%f,%d,%d\r\n", homeDistance, workDistance, location, pumps == 1); // test and add in speed, etc that Josh added in to match the adafruit GPS
fclose(fp);
free(fp);
@@ -677,10 +609,20 @@
//Main Function
//////////////////////////////////////////////////////////////
int main(){
-
+
RGB_LED.set_led(0,0,1);
-
+ /*
+ while(1){
+ if(sdCD == 0){
+ RGB_LED.set_led(0,1,0);
+ }else{
+ RGB_LED.set_led(1,0,0);
+ }
+
+ wait(10);
+ }
+*/
/*
motor1.getFault();
wait(1);
@@ -837,7 +779,7 @@
DigPot.writeRegister(digital_pot_setpoint);
wait(1);
- pumps = 1;
+ //pumps = 1;
//pumpOn = 1;
uint8_t subjectLabelOriginal[8] = {0,};
