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 #ifdef USE_DISPLAY
okini3939 0:bdb53686c194 14 #include "I2CLEDDisp.h"
okini3939 0:bdb53686c194 15 #include "I2CLCD.h"
okini3939 0:bdb53686c194 16
okini3939 0:bdb53686c194 17 static I2CLEDDisp *leddisp;
okini3939 0:bdb53686c194 18 static I2CLCD *lcd;
okini3939 0:bdb53686c194 19 static volatile int lcd_flg = 0, leddisp_flg = 0;
okini3939 0:bdb53686c194 20 static volatile int leddisp_freq = 0, leddisp_pos = -4;
okini3939 0:bdb53686c194 21 static char leddisp_buf[150];
okini3939 0:bdb53686c194 22 #endif
okini3939 0:bdb53686c194 23
okini3939 0:bdb53686c194 24 void update_display () {
okini3939 0:bdb53686c194 25 #ifdef USE_DISPLAY
okini3939 0:bdb53686c194 26 char buf[128], tmp[128];
okini3939 0:bdb53686c194 27
okini3939 0:bdb53686c194 28 if (leddisp_flg && cfg.getValue("LEDDISP_MESG", tmp, sizeof(tmp))) {
okini3939 0:bdb53686c194 29 format_str(tmp, leddisp_buf, sizeof(leddisp_buf));
okini3939 0:bdb53686c194 30 }
okini3939 0:bdb53686c194 31
okini3939 0:bdb53686c194 32 if (lcd_flg && cfg.getValue("LCD_MESG", tmp, sizeof(tmp))) {
okini3939 0:bdb53686c194 33 format_str(tmp, buf, sizeof(buf));
okini3939 0:bdb53686c194 34 lcd->cls();
okini3939 0:bdb53686c194 35 lcd->puts(buf);
okini3939 0:bdb53686c194 36 }
okini3939 0:bdb53686c194 37 #endif
okini3939 0:bdb53686c194 38 }
okini3939 0:bdb53686c194 39
okini3939 0:bdb53686c194 40 void pool_display () {
okini3939 0:bdb53686c194 41 #ifdef USE_DISPLAY
okini3939 0:bdb53686c194 42 int i, addr, len;
okini3939 0:bdb53686c194 43
okini3939 0:bdb53686c194 44 // LED Display scroll
okini3939 0:bdb53686c194 45 if (leddisp_flg) {
okini3939 0:bdb53686c194 46 leddisp_freq ++;
okini3939 0:bdb53686c194 47 if (leddisp_freq > LED_FREQ) {
okini3939 0:bdb53686c194 48
okini3939 0:bdb53686c194 49 len = strlen(leddisp_buf);
okini3939 0:bdb53686c194 50 leddisp->locate(0, 0);
okini3939 0:bdb53686c194 51 for (i = 0; i < 4; i ++) {
okini3939 0:bdb53686c194 52 addr = leddisp_pos + i;
okini3939 0:bdb53686c194 53 if (addr >= 0 && addr < len) {
okini3939 0:bdb53686c194 54 leddisp->putc(leddisp_buf[addr]);
okini3939 0:bdb53686c194 55 } else {
okini3939 0:bdb53686c194 56 leddisp->putc(' ');
okini3939 0:bdb53686c194 57 }
okini3939 0:bdb53686c194 58 }
okini3939 0:bdb53686c194 59
okini3939 0:bdb53686c194 60 leddisp_pos ++;
okini3939 0:bdb53686c194 61 if (leddisp_pos >= len + 4) {
okini3939 0:bdb53686c194 62 leddisp_pos = -4;
okini3939 0:bdb53686c194 63 }
okini3939 0:bdb53686c194 64
okini3939 0:bdb53686c194 65 leddisp_freq = 0;
okini3939 0:bdb53686c194 66 }
okini3939 0:bdb53686c194 67 }
okini3939 0:bdb53686c194 68 #endif
okini3939 0:bdb53686c194 69 }
okini3939 0:bdb53686c194 70
okini3939 0:bdb53686c194 71 int init_display () {
okini3939 0:bdb53686c194 72 #ifdef USE_DISPLAY
okini3939 0:bdb53686c194 73 char buf[128];
okini3939 0:bdb53686c194 74 enum I2CLCDType lcdtype = LCD16x2;
okini3939 0:bdb53686c194 75 enum I2CLCDConfig lcdconf = LCDCFG_3V;
okini3939 0:bdb53686c194 76
okini3939 0:bdb53686c194 77 if (cfg.getValue("LCD_MESG", buf, sizeof(buf))) {
okini3939 0:bdb53686c194 78 if (cfg.getValue("LCD_TYPE", buf, sizeof(buf))) {
okini3939 0:bdb53686c194 79 lcdtype = (enum I2CLCDType)atoi(buf);
okini3939 0:bdb53686c194 80 }
okini3939 0:bdb53686c194 81 if (cfg.getValue("LCD_CONF", buf, sizeof(buf))) {
okini3939 0:bdb53686c194 82 lcdconf = (enum I2CLCDConfig)atoi(buf);
okini3939 0:bdb53686c194 83 }
okini3939 0:bdb53686c194 84 lcd = new I2CLCD(i2c, I2CLCD_ADDR, lcdtype, lcdconf);
okini3939 0:bdb53686c194 85 if (lcd == NULL) return -1;
okini3939 0:bdb53686c194 86 lcd_flg = 1;
okini3939 0:bdb53686c194 87
okini3939 1:6c7141895545 88 #ifdef DEBUG
okini3939 1:6c7141895545 89 printf("LCD: %s\r\n", buf);
okini3939 1:6c7141895545 90 #endif
okini3939 0:bdb53686c194 91 }
okini3939 0:bdb53686c194 92
okini3939 0:bdb53686c194 93 if (cfg.getValue("LEDDISP_MESG", buf, sizeof(buf))) {
okini3939 0:bdb53686c194 94 leddisp = new I2CLEDDisp(i2c);
okini3939 0:bdb53686c194 95 if (leddisp == NULL) return -1;
okini3939 0:bdb53686c194 96 leddisp_flg = 1;
okini3939 1:6c7141895545 97 strncpy(leddisp_buf, VERSION, sizeof(leddisp_buf));
okini3939 1:6c7141895545 98 #ifdef DEBUG
okini3939 1:6c7141895545 99 printf("LED disp: %s\r\n", buf);
okini3939 1:6c7141895545 100 #endif
okini3939 0:bdb53686c194 101 }
okini3939 0:bdb53686c194 102
okini3939 0:bdb53686c194 103 #endif
okini3939 0:bdb53686c194 104 return 0;
okini3939 0:bdb53686c194 105 }