mbed Weather Platform firmware http://mbed.org/users/okini3939/notebook/mbed-weather-platform-firmware/

Dependencies:   ChaNFSSD EthernetNetIf I2CLEDDisp Agentbed ChaNFSUSB ILinterpreter mbed BMP085 WeatherMeters ConfigFile ChaNFS I2CLCD

Committer:
okini3939
Date:
Sun Jul 10 15:36:46 2011 +0000
Revision:
1:6c7141895545
Parent:
0:bdb53686c194
Child:
2:a3e5edf84f74

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 1:6c7141895545 1 /*
okini3939 1:6c7141895545 2 * Weather Station - mbed Weather Platform
okini3939 1:6c7141895545 3 * Copyright (c) 2011 Hiroshi Suga
okini3939 1:6c7141895545 4 * Released under the MIT License: http://mbed.org/license/mit
okini3939 1:6c7141895545 5 */
okini3939 1:6c7141895545 6
okini3939 1:6c7141895545 7 /** @file
okini3939 1:6c7141895545 8 * @brief Weather Station
okini3939 1:6c7141895545 9 */
okini3939 1:6c7141895545 10
okini3939 0:bdb53686c194 11 #include "mbed.h"
okini3939 0:bdb53686c194 12 #include "weather.h"
okini3939 0:bdb53686c194 13
okini3939 0:bdb53686c194 14 const char VERSION[] = "mbed Weather Platform 0.4.0 (C) 2011 Suga koubou";
okini3939 0:bdb53686c194 15 Serial pc(USBTX, USBRX);
okini3939 0:bdb53686c194 16 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
okini3939 1:6c7141895545 17 #ifdef USE_3LED
okini3939 1:6c7141895545 18 DigitalOut led_red(p28), led_yellow(p23);
okini3939 1:6c7141895545 19 #endif
okini3939 0:bdb53686c194 20 static volatile int interval = 60;
okini3939 0:bdb53686c194 21 char csv[120];
okini3939 1:6c7141895545 22 static char csv_mesg[120] = "%y-%m-%d %h:%i:%s,%.2P,%.2T,%.2H,%.2A,%.2V,%.2R,%.2L,%.2U,%.2M,%.2p";
okini3939 0:bdb53686c194 23
okini3939 0:bdb53686c194 24
okini3939 0:bdb53686c194 25 // Interrupt 10Hz
okini3939 0:bdb53686c194 26 void isr_timer () {
okini3939 0:bdb53686c194 27
okini3939 0:bdb53686c194 28 // uptime
okini3939 0:bdb53686c194 29 locUpTime = locUpTime + 10;
okini3939 0:bdb53686c194 30
okini3939 0:bdb53686c194 31 pool_ilip();
okini3939 0:bdb53686c194 32 pool_display();
okini3939 0:bdb53686c194 33
okini3939 1:6c7141895545 34 LED_NET_ACT_OFF;
okini3939 0:bdb53686c194 35 }
okini3939 0:bdb53686c194 36
okini3939 0:bdb53686c194 37 void init () {
okini3939 0:bdb53686c194 38 char buf[128];
okini3939 0:bdb53686c194 39
okini3939 0:bdb53686c194 40 init_conf();
okini3939 0:bdb53686c194 41
okini3939 0:bdb53686c194 42 if (cfg.getValue("DIR", buf, sizeof(buf))) {
okini3939 0:bdb53686c194 43 init_ilip(buf);
okini3939 0:bdb53686c194 44 }
okini3939 0:bdb53686c194 45
okini3939 0:bdb53686c194 46 if (cfg.getValue("BAUD", buf, sizeof(buf))) {
okini3939 0:bdb53686c194 47 pc.baud(atoi(buf));
okini3939 0:bdb53686c194 48 }
okini3939 0:bdb53686c194 49
okini3939 0:bdb53686c194 50 if (cfg.getValue("CSV_MESG", csv_mesg, sizeof(csv_mesg))) {
okini3939 0:bdb53686c194 51 chop(csv_mesg);
okini3939 0:bdb53686c194 52 }
okini3939 0:bdb53686c194 53
okini3939 0:bdb53686c194 54 if (cfg.getValue("INTERVAL", buf, sizeof(buf))) {
okini3939 0:bdb53686c194 55 interval = atoi(buf);
okini3939 0:bdb53686c194 56 pc.printf("Interval: %d sec.\r\n", interval);
okini3939 0:bdb53686c194 57 }
okini3939 0:bdb53686c194 58
okini3939 0:bdb53686c194 59 init_file();
okini3939 0:bdb53686c194 60 init_display();
okini3939 0:bdb53686c194 61 init_net();
okini3939 0:bdb53686c194 62 }
okini3939 0:bdb53686c194 63
okini3939 0:bdb53686c194 64 int main() {
okini3939 0:bdb53686c194 65 Timer timer;
okini3939 0:bdb53686c194 66 Ticker ticker;
okini3939 0:bdb53686c194 67
okini3939 0:bdb53686c194 68 LED_BUSY_ON;
okini3939 0:bdb53686c194 69 init();
okini3939 0:bdb53686c194 70 LED_BUSY_OFF;
okini3939 0:bdb53686c194 71
okini3939 0:bdb53686c194 72 ticker.attach(&isr_timer, 0.1); // Interrupt 10Hz
okini3939 0:bdb53686c194 73 timer.start();
okini3939 0:bdb53686c194 74 while(1) {
okini3939 0:bdb53686c194 75 // main loop
okini3939 0:bdb53686c194 76 LED_BUSY_ON;
okini3939 0:bdb53686c194 77 pool_net();
okini3939 0:bdb53686c194 78
okini3939 0:bdb53686c194 79 __disable_irq();
okini3939 0:bdb53686c194 80 update_sensor();
okini3939 0:bdb53686c194 81 __enable_irq();
okini3939 0:bdb53686c194 82
okini3939 0:bdb53686c194 83 // create CSV
okini3939 0:bdb53686c194 84 format_str(csv_mesg, csv, sizeof(csv));
okini3939 0:bdb53686c194 85 pc.printf(csv);
okini3939 1:6c7141895545 86 pc.printf("\r\n");
okini3939 0:bdb53686c194 87 write_log(csv);
okini3939 1:6c7141895545 88 update_display();
okini3939 0:bdb53686c194 89
okini3939 0:bdb53686c194 90 // in/out
okini3939 0:bdb53686c194 91 exec_ilip(1);
okini3939 0:bdb53686c194 92
okini3939 0:bdb53686c194 93 LED_BUSY_OFF;
okini3939 0:bdb53686c194 94
okini3939 0:bdb53686c194 95 while (locUpTime % 100 != 0) {
okini3939 0:bdb53686c194 96 pool_net();
okini3939 0:bdb53686c194 97 wait_ms(100);
okini3939 0:bdb53686c194 98 }
okini3939 0:bdb53686c194 99
okini3939 0:bdb53686c194 100 // interval (wait)
okini3939 0:bdb53686c194 101 while (timer.read() < interval) {
okini3939 0:bdb53686c194 102 pool_net();
okini3939 0:bdb53686c194 103 wait_ms(100);
okini3939 0:bdb53686c194 104
okini3939 0:bdb53686c194 105 // in/out (timer) 1s
okini3939 0:bdb53686c194 106 if (locUpTime % 100 == 0) {
okini3939 0:bdb53686c194 107 exec_ilip(0);
okini3939 0:bdb53686c194 108 }
okini3939 0:bdb53686c194 109
okini3939 0:bdb53686c194 110 // for debug
okini3939 0:bdb53686c194 111 if (pc.readable()) {
okini3939 0:bdb53686c194 112 int i;
okini3939 0:bdb53686c194 113 i = pc.getc();
okini3939 0:bdb53686c194 114 if (i == ' ') {
okini3939 0:bdb53686c194 115 break;
okini3939 0:bdb53686c194 116 } else {
okini3939 0:bdb53686c194 117 pc.printf("( %d )\r\n", (int)timer.read());
okini3939 0:bdb53686c194 118 }
okini3939 0:bdb53686c194 119 }
okini3939 0:bdb53686c194 120 }
okini3939 0:bdb53686c194 121 timer.reset();
okini3939 0:bdb53686c194 122 }
okini3939 0:bdb53686c194 123 }