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.
Diff: main.cpp
- Revision:
- 0:ce142971b8b9
diff -r 000000000000 -r ce142971b8b9 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Fri Sep 14 07:57:04 2012 +0000
@@ -0,0 +1,182 @@
+#include "mbed.h"
+
+//#define SD_FS
+
+#include "EthernetNetIf.h"
+#include "HTTPServer.h"
+#include "HTTPClient.h"
+#ifdef SD_FS
+#include "SDFileSystem.h"
+#endif
+#include "GPS.h"
+#include "NTPClient.h"
+
+#include "SCP1000.h"
+#include "PachubeClient.h"
+#include "main.h"
+
+/***********
+ * I/O *
+ ***********/
+DigitalOut listenStatus(LED1); // Blink when HTTP server is listening
+DigitalOut ipStatus(LED2); // Set when IP address acquired
+DigitalOut pollStatus(LED3); // Reserved
+DigitalOut errorStatus(LED4); // Blink when error condition occurs; read other LEDs for code.
+
+AnalogIn humiditySensor(p17); //
+//AnalogIn tempSensor(p16); // Temp sensor.
+
+SCP1000 scp1000(p5,p6,p7,p8); // Temp & pressure.
+
+
+GPS gps(p9, p10);
+
+#ifdef SD_FS
+SDFileSystem sd(p5, p6, p7, p8, "fs"); // the pinout on the mbed Cool Components workshop board
+#else
+LocalFileSystem local("fs");
+#endif
+
+NTPClient ntp;
+
+/**
+ * Blink the error LED and place the error code on the other LEDs.
+ * WARNING: Never returns!
+ *
+ */
+void ledError(ErrorCode code) {
+ listenStatus = code & 1;
+ ipStatus = (code >> 1) & 1;
+ pollStatus = (code >> 2) & 1;
+
+ while (true) {
+ errorStatus = !errorStatus;
+ wait(BLINK_RATE);
+ }
+}
+
+/**
+ * Read sensor data and write it to file.
+ */
+void pollSensors() {
+ int locked = 0;
+ float temp = 0;
+ //float tempB = 0;
+
+ float lat = 0;
+ float lng = 0;
+ float pressure = 0;
+ float humidity = 0;
+
+ char * timeStr;
+ time_t ctTime;
+
+ pollStatus = !pollStatus;
+
+ FILE* fp = fopen("/fs/sensors.htm", "w");
+ if (fp == NULL) {
+ ledError(ERR_FILE);
+ }
+
+ // Temp
+ // (SensorValue/4) - 50
+ //temp = tempSensor * 160 - 50; // Analog to deg C
+ //temp = 1.8 * temp + 32; // deg C to F.
+
+ temp = scp1000.readTemperature();
+ temp = 1.8 * temp + 32; // deg C to F
+
+ // Pressure
+ unsigned long ulPressure = scp1000.readPressure();
+ pressure = ((float) ulPressure) / 1000.0; // Pa to kPa
+
+ // Humidity
+ // RH (%) = (SensorValue x 0.1906) - 40.2
+
+ // This might be wrong.
+ humidity = (1000 * humiditySensor * 0.1906) - 40.2;
+
+ ctTime = time(NULL);
+ ctTime -= 60 * 60 * 4; // Account for timezone offset.
+ timeStr = ctime(&ctTime);
+
+ int i = 0;
+ while (timeStr[i] != '\0') {
+ if (timeStr[i] == '\n') {
+ timeStr[i] = ' ';
+ }
+ i++;
+ }
+
+
+ // True if GPS is locked.
+ //if (gps.sample()) {
+ //locked = 1;
+ //lat = gps.latitude;
+ //lng = gps.longitude;
+ //}
+
+ fprintf(fp, "{\n\t\"gpsLocked\": %d,\n", locked);
+ fprintf(fp, "\t\"latitude\": %f,\n", lat);
+ fprintf(fp, "\t\"longitude\": %f,\n", lng);
+ fprintf(fp, "\t\"temperature\": %4.2f,\n", temp);
+ fprintf(fp, "\t\"pressure\": %5.2f,\n", pressure);
+ fprintf(fp, "\t\"time\": \"%s ET\",\n", timeStr);
+ fprintf(fp, "\t\"humidity\": %5.2f\n}", humidity);
+
+ //postFeed(pressure, humidity, temp);
+
+ fclose(fp);
+}
+
+/**
+ * Flip listening status LED.
+ */
+void flipLed() {
+ listenStatus = !listenStatus;
+}
+
+/**
+ * Entry point
+ */
+int main() {
+ EthernetNetIf eth;
+ HTTPServer server;
+
+ ipStatus = 0;
+ listenStatus = 0;
+ pollStatus = 0;
+
+ EthernetErr ethErr = eth.setup();
+ if(ethErr) {
+ ledError(ERR_ETHERNET);
+ }
+
+ Host ntpServer(IpAddr(), 123, "nist1.columbiacountyga.gov");
+ ntp.setTime(ntpServer);
+
+ ipStatus = 1;
+
+ // Web root directory
+ FSHandler::mount("/fs", "/");
+
+ // Bind the filesystem handler for all requests
+ server.addHandler("/"); // "/" matches every URL
+ server.bind(80); // listen port
+
+ Ticker ledTicker;
+ ledTicker.attach(&flipLed, BLINK_RATE);
+
+ pollSensors();
+
+ Ticker pollTicker;
+ pollTicker.attach(&pollSensors, SENSOR_POLL_RATE);
+
+ // Listen indefinitely
+ while(true)
+ {
+ Net::poll();
+ }
+
+ return 0;
+}
\ No newline at end of file