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:
Wed Aug 24 13:22:32 2011 +0000
Revision:
2:a3e5edf84f74
Parent:
1:6c7141895545
Child:
5:90f840432195

        

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 2:a3e5edf84f74 12 #include <new>
okini3939 0:bdb53686c194 13 #include "weather.h"
okini3939 2:a3e5edf84f74 14 #include "EthernetPowerControl.h"
okini3939 0:bdb53686c194 15
okini3939 0:bdb53686c194 16 const char VERSION[] = "mbed Weather Platform 0.4.0 (C) 2011 Suga koubou";
okini3939 0:bdb53686c194 17 Serial pc(USBTX, USBRX);
okini3939 2:a3e5edf84f74 18 PwmOut led1(LED1);
okini3939 2:a3e5edf84f74 19 DigitalOut led2(LED2), led3(LED3), led4(LED4);
okini3939 1:6c7141895545 20 #ifdef USE_3LED
okini3939 1:6c7141895545 21 DigitalOut led_red(p28), led_yellow(p23);
okini3939 1:6c7141895545 22 #endif
okini3939 2:a3e5edf84f74 23 volatile uint32_t locUpTime = 0;
okini3939 2:a3e5edf84f74 24 char csv[FORMAT_STR_SIZE];
okini3939 2:a3e5edf84f74 25
okini3939 0:bdb53686c194 26
okini3939 2:a3e5edf84f74 27 void no_memory () {
okini3939 2:a3e5edf84f74 28 printf("panic: can't allocate to memory!\r\n");
okini3939 2:a3e5edf84f74 29 exit(-1);
okini3939 2:a3e5edf84f74 30 }
okini3939 0:bdb53686c194 31
okini3939 0:bdb53686c194 32 // Interrupt 10Hz
okini3939 0:bdb53686c194 33 void isr_timer () {
okini3939 0:bdb53686c194 34
okini3939 0:bdb53686c194 35 // uptime
okini3939 0:bdb53686c194 36 locUpTime = locUpTime + 10;
okini3939 0:bdb53686c194 37
okini3939 0:bdb53686c194 38 pool_ilip();
okini3939 0:bdb53686c194 39 pool_display();
okini3939 0:bdb53686c194 40
okini3939 1:6c7141895545 41 LED_NET_ACT_OFF;
okini3939 0:bdb53686c194 42 }
okini3939 0:bdb53686c194 43
okini3939 0:bdb53686c194 44 void init () {
okini3939 0:bdb53686c194 45
okini3939 0:bdb53686c194 46 init_conf();
okini3939 0:bdb53686c194 47
okini3939 2:a3e5edf84f74 48 if (conf.baud) {
okini3939 2:a3e5edf84f74 49 pc.baud(conf.baud);
okini3939 0:bdb53686c194 50 }
okini3939 0:bdb53686c194 51
okini3939 2:a3e5edf84f74 52 init_ilip(conf.dir);
okini3939 2:a3e5edf84f74 53 init_file();
okini3939 2:a3e5edf84f74 54 init_display();
okini3939 2:a3e5edf84f74 55
okini3939 2:a3e5edf84f74 56 if (init_net()) {
okini3939 2:a3e5edf84f74 57 pc.printf("Power down: ethernet\r\n");
okini3939 2:a3e5edf84f74 58 PHY_PowerDown();
okini3939 0:bdb53686c194 59 }
okini3939 0:bdb53686c194 60
okini3939 2:a3e5edf84f74 61 pc.printf("Interval: %d sec.\r\n", conf.interval);
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 2:a3e5edf84f74 67 int ledlevel = 0, ledflg = 0;
okini3939 2:a3e5edf84f74 68
okini3939 2:a3e5edf84f74 69 set_new_handler(no_memory); // new handler function
okini3939 0:bdb53686c194 70
okini3939 0:bdb53686c194 71 LED_BUSY_ON;
okini3939 0:bdb53686c194 72 init();
okini3939 0:bdb53686c194 73 LED_BUSY_OFF;
okini3939 0:bdb53686c194 74
okini3939 0:bdb53686c194 75 ticker.attach(&isr_timer, 0.1); // Interrupt 10Hz
okini3939 0:bdb53686c194 76 timer.start();
okini3939 0:bdb53686c194 77 while(1) {
okini3939 0:bdb53686c194 78 // main loop
okini3939 0:bdb53686c194 79 LED_BUSY_ON;
okini3939 0:bdb53686c194 80 pool_net();
okini3939 0:bdb53686c194 81
okini3939 0:bdb53686c194 82 __disable_irq();
okini3939 0:bdb53686c194 83 update_sensor();
okini3939 0:bdb53686c194 84 __enable_irq();
okini3939 0:bdb53686c194 85
okini3939 0:bdb53686c194 86 // create CSV
okini3939 2:a3e5edf84f74 87 format_str(conf.csv_mesg, csv, sizeof_1(csv));
okini3939 0:bdb53686c194 88 pc.printf(csv);
okini3939 1:6c7141895545 89 pc.printf("\r\n");
okini3939 0:bdb53686c194 90 write_log(csv);
okini3939 1:6c7141895545 91 update_display();
okini3939 0:bdb53686c194 92
okini3939 0:bdb53686c194 93 // in/out
okini3939 0:bdb53686c194 94 exec_ilip(1);
okini3939 0:bdb53686c194 95
okini3939 0:bdb53686c194 96 LED_BUSY_OFF;
okini3939 0:bdb53686c194 97
okini3939 0:bdb53686c194 98 while (locUpTime % 100 != 0) {
okini3939 0:bdb53686c194 99 pool_net();
okini3939 0:bdb53686c194 100 wait_ms(100);
okini3939 0:bdb53686c194 101 }
okini3939 0:bdb53686c194 102
okini3939 0:bdb53686c194 103 // interval (wait)
okini3939 2:a3e5edf84f74 104 while (timer.read() < conf.interval) {
okini3939 2:a3e5edf84f74 105 ledlevel = ledlevel + (ledflg ? -5 : 5);
okini3939 2:a3e5edf84f74 106 if (ledlevel > 100) {
okini3939 2:a3e5edf84f74 107 ledlevel = 100;
okini3939 2:a3e5edf84f74 108 ledflg = 1;
okini3939 2:a3e5edf84f74 109 } else
okini3939 2:a3e5edf84f74 110 if (ledlevel < 0) {
okini3939 2:a3e5edf84f74 111 ledlevel = 0;
okini3939 2:a3e5edf84f74 112 ledflg = 0;
okini3939 2:a3e5edf84f74 113 }
okini3939 2:a3e5edf84f74 114 led1 = ledlevel / 100.0;
okini3939 2:a3e5edf84f74 115
okini3939 0:bdb53686c194 116 pool_net();
okini3939 0:bdb53686c194 117 wait_ms(100);
okini3939 0:bdb53686c194 118
okini3939 0:bdb53686c194 119 // in/out (timer) 1s
okini3939 0:bdb53686c194 120 if (locUpTime % 100 == 0) {
okini3939 0:bdb53686c194 121 exec_ilip(0);
okini3939 0:bdb53686c194 122 }
okini3939 0:bdb53686c194 123
okini3939 0:bdb53686c194 124 // for debug
okini3939 0:bdb53686c194 125 if (pc.readable()) {
okini3939 0:bdb53686c194 126 int i;
okini3939 0:bdb53686c194 127 i = pc.getc();
okini3939 0:bdb53686c194 128 if (i == ' ') {
okini3939 0:bdb53686c194 129 break;
okini3939 0:bdb53686c194 130 } else {
okini3939 0:bdb53686c194 131 pc.printf("( %d )\r\n", (int)timer.read());
okini3939 0:bdb53686c194 132 }
okini3939 0:bdb53686c194 133 }
okini3939 0:bdb53686c194 134 }
okini3939 0:bdb53686c194 135 timer.reset();
okini3939 0:bdb53686c194 136 }
okini3939 0:bdb53686c194 137 }