File content as of revision 0:e9a647f18c71:
/**
* =============================================================================
* Expansion Board One - Example application No.2 (Version 0.0.1)
* http://mbed.org/users/shintamainjp/notebook/starboard_expbrd-one_ex2_en/
* =============================================================================
* Copyright (c) 2010 Shinichiro Nakamura (CuBeatSystems)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
* =============================================================================
*/
#include "mbed.h"
#include "PachubeV2CSV.h"
#include "EthernetNetIf.h"
#include "HTTPClient.h"
#include "ThermistorMCP9701.h"
#include "TextLCD.h"
#include "appconf.h"
/*
* Definitions for a configuration file.
*/
#define CONFIG_FILENAME "/local/SBOE2.CFG"
LocalFileSystem localfs("local");
TextLCD lcd(p24, p26, p27, p28, p29, p30);
EthernetNetIf netif;
BusOut led(LED1, LED2, LED3, LED4);
ThermistorMCP9701 thermistor1(p16);
ThermistorMCP9701 thermistor2(p17);
ThermistorMCP9701 thermistor3(p18);
ThermistorMCP9701 thermistor4(p19);
ThermistorMCP9701 thermistor5(p20);
static appconf_t appconf;
/**
* Display a splash screen.
*/
void splash(void) {
lcd.cls();
lcd.locate(0, 0);
lcd.printf("StarBoard Orange");
lcd.locate(0, 1);
lcd.printf("Expansion Board ");
wait(2);
lcd.cls();
lcd.locate(0, 0);
lcd.printf("Example app No.2");
lcd.locate(0, 1);
lcd.printf(" ");
wait(2);
}
/**
* Convert double to char.
*
* @param val Value.
* @param buf A pointer to a buffer.
* @param bufsiz The buffer size.
*/
void convertDoubleToChar(double val, char *buf, size_t bufsiz) {
snprintf(buf, bufsiz, "%f", val);
}
/**
* Entry point.
*/
int main() {
/*
* Splash.
*/
splash();
/*
* Initialize ethernet interface.
*/
lcd.cls();
lcd.locate(0, 0);
lcd.printf("Initializing. ");
lcd.locate(0, 1);
lcd.printf("Ethernet: ");
EthernetErr ethErr = netif.setup();
if (ethErr) {
lcd.locate(0, 1);
lcd.printf("Ethernet:NG ");
error("Network setup failed.\n");
} else {
lcd.locate(0, 1);
lcd.printf("Ethernet:OK ");
}
wait(2);
/*
* Read configuration variables from a file.
*/
appconf_init(&appconf);
if (appconf_read(CONFIG_FILENAME, &appconf) != 0) {
lcd.cls();
lcd.locate(0, 0);
lcd.printf("ConfigFile");
lcd.locate(0, 1);
lcd.printf("Read error.");
error("Failure to read a configuration file.\n");
}
/*
* Check the interval time.
*/
if (appconf.interval < 60) {
lcd.cls();
lcd.locate(0, 0);
lcd.printf("Invalid interval");
error("Inavlid interval time found.\n");
}
/*
* Initialize objects.
*/
PachubeV2CSV web(appconf.apikey);
int cnt = 0;
do {
/*
* Sense.
*/
lcd.cls();
int v1 = 0, v2 = 0, v3 = 0, v4 = 0, v5 = 0;
for (int i = 0; i < appconf.interval; i++) {
led = 1 << (i % 4);
printf("%d/%d\n", i + 1, appconf.interval);
v1 += thermistor1.read();
v2 += thermistor2.read();
v3 += thermistor3.read();
v4 += thermistor4.read();
v5 += thermistor5.read();
lcd.locate(0, 0);
lcd.printf("| 0| 1| 2| 3| 4|");
lcd.locate(0, 1);
lcd.printf("|%-2.0f|%-2.0f|%-2.0f|%-2.0f|%-2.0f|", thermistor1.read(), thermistor2.read(), thermistor3.read(), thermistor4.read(), thermistor5.read());
wait(1);
}
v1 /= appconf.interval;
v2 /= appconf.interval;
v3 /= appconf.interval;
v4 /= appconf.interval;
v5 /= appconf.interval;
/*
* Post.
*/
lcd.cls();
lcd.locate(0, 0);
lcd.printf("Posting No.%d", ++cnt);
char val1[16];
char val2[16];
char val3[16];
char val4[16];
char val5[16];
convertDoubleToChar(v1, val1, sizeof(val1));
convertDoubleToChar(v2, val2, sizeof(val2));
convertDoubleToChar(v3, val3, sizeof(val3));
convertDoubleToChar(v4, val4, sizeof(val4));
convertDoubleToChar(v5, val5, sizeof(val5));
printf("updateDataStream(%d)\n", web.updateDataStream(atoi(appconf.feedid), "0", std::string(val1)));
printf("updateDataStream(%d)\n", web.updateDataStream(atoi(appconf.feedid), "1", std::string(val2)));
printf("updateDataStream(%d)\n", web.updateDataStream(atoi(appconf.feedid), "2", std::string(val3)));
printf("updateDataStream(%d)\n", web.updateDataStream(atoi(appconf.feedid), "3", std::string(val4)));
printf("updateDataStream(%d)\n", web.updateDataStream(atoi(appconf.feedid), "4", std::string(val5)));
} while (1);
}