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

display.cpp

Committer:
okini3939
Date:
2012-03-16
Revision:
8:bed0b81794ba
Parent:
2:a3e5edf84f74

File content as of revision 8:bed0b81794ba:

/*
 * Weather Station - mbed Weather Platform
 * Copyright (c) 2011 Hiroshi Suga
 * Released under the MIT License: http://mbed.org/license/mit
 */

/** @file
 * @brief Weather Station
 */

#include "mbed.h"
#include "weather.h"
#ifdef USE_DISPLAY
#include "I2CLEDDisp.h"
#include "I2CLCD.h"

static I2CLEDDisp *leddisp;
static I2CLCD *lcd;
static volatile int leddisp_freq = 0, leddisp_pos = -4;
static char leddisp_buf[FORMAT_STR_SIZE];
#endif

void update_display () {
#ifdef USE_DISPLAY
    char buf[FORMAT_STR_SIZE];

    if (conf.leddisp_mesg[0]) {
        format_str(conf.leddisp_mesg, leddisp_buf, sizeof_1(leddisp_buf));
    }

    if (conf.lcd_mesg[0]) {
        format_str(conf.lcd_mesg, buf, sizeof_1(buf));
        lcd->cls();
        lcd->puts(buf);
    }
#endif
}

void pool_display () {
#ifdef USE_DISPLAY
    int i, addr, len;

    // LED Display scroll
    if (conf.leddisp_mesg[0]) {
        leddisp_freq ++;
        if (leddisp_freq > LED_FREQ) {

            len = strlen(leddisp_buf);
            leddisp->locate(0, 0);
            for (i = 0; i < 4; i ++) {
                addr = leddisp_pos + i;
                if (addr >= 0 && addr < len) {
                    leddisp->putc(leddisp_buf[addr]);
                } else {
                    leddisp->putc(' ');
                }
            }

            leddisp_pos ++;
            if (leddisp_pos >= len + 4) {
                leddisp_pos = -4;
            }

            leddisp_freq = 0;
        }
    }
#endif
}

int init_display () {
#ifdef USE_DISPLAY

    if (conf.lcd_mesg[0]) {
        lcd = new I2CLCD(i2c, I2CLCD_ADDR, conf.lcdtype, conf.lcdconf);
#ifdef DEBUG
        printf("LCD: %s\r\n", conf.lcd_mesg);
#endif
    }

    if (conf.leddisp_mesg[0]) {
        leddisp = new I2CLEDDisp(i2c);
        strncpy(leddisp_buf, VERSION, sizeof_1(leddisp_buf));
#ifdef DEBUG
        printf("LED disp: %s\r\n", conf.leddisp_mesg);
#endif
    }

#endif
    return 0;
}