Temperature Data Logger or Display. Program uses the EA LPCXpresso Board's on-board temp sensor and SD card to constantly monitor the temperature. Optionally, the temp can be displayed on the EA OLED display.

Dependencies:   mbed SDFileSystem

Committer:
tyger23
Date:
Wed Jun 16 16:08:29 2010 +0000
Revision:
1:37f2341e763b
Parent:
0:e05fd3c9c4b3

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tyger23 0:e05fd3c9c4b3 1 /* mbed Embedded Artists OLED library, as found on the LPCXpresso Baseboard
tyger23 0:e05fd3c9c4b3 2 * Copyright (c) 2010, sford
tyger23 0:e05fd3c9c4b3 3 *
tyger23 0:e05fd3c9c4b3 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
tyger23 0:e05fd3c9c4b3 5 * of this software and associated documentation files (the "Software"), to deal
tyger23 0:e05fd3c9c4b3 6 * in the Software without restriction, including without limitation the rights
tyger23 0:e05fd3c9c4b3 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
tyger23 0:e05fd3c9c4b3 8 * copies of the Software, and to permit persons to whom the Software is
tyger23 0:e05fd3c9c4b3 9 * furnished to do so, subject to the following conditions:
tyger23 0:e05fd3c9c4b3 10 *
tyger23 0:e05fd3c9c4b3 11 * The above copyright notice and this permission notice shall be included in
tyger23 0:e05fd3c9c4b3 12 * all copies or substantial portions of the Software.
tyger23 0:e05fd3c9c4b3 13 *
tyger23 0:e05fd3c9c4b3 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
tyger23 0:e05fd3c9c4b3 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
tyger23 0:e05fd3c9c4b3 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
tyger23 0:e05fd3c9c4b3 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
tyger23 0:e05fd3c9c4b3 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
tyger23 0:e05fd3c9c4b3 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
tyger23 0:e05fd3c9c4b3 20 * THE SOFTWARE.
tyger23 0:e05fd3c9c4b3 21 */
tyger23 0:e05fd3c9c4b3 22
tyger23 0:e05fd3c9c4b3 23 #include "EAOLED.h"
tyger23 0:e05fd3c9c4b3 24 #include "mbed.h"
tyger23 0:e05fd3c9c4b3 25
tyger23 0:e05fd3c9c4b3 26 EAOLED::EAOLED(PinName mosi, PinName dnc, PinName sclk, PinName cs, PinName power)
tyger23 0:e05fd3c9c4b3 27 : _spi(mosi, NC, sclk), _data(dnc), _cs(cs), _power(power) {
tyger23 0:e05fd3c9c4b3 28 reset();
tyger23 0:e05fd3c9c4b3 29 }
tyger23 0:e05fd3c9c4b3 30
tyger23 0:e05fd3c9c4b3 31 void EAOLED::command(int value) {
tyger23 0:e05fd3c9c4b3 32 _data = 0;
tyger23 0:e05fd3c9c4b3 33 _cs = 0;
tyger23 0:e05fd3c9c4b3 34 _spi.write(value);
tyger23 0:e05fd3c9c4b3 35 _cs = 1;
tyger23 0:e05fd3c9c4b3 36 }
tyger23 0:e05fd3c9c4b3 37
tyger23 0:e05fd3c9c4b3 38 void EAOLED::data(int value) {
tyger23 0:e05fd3c9c4b3 39 _data = 1;
tyger23 0:e05fd3c9c4b3 40 _cs = 0;
tyger23 0:e05fd3c9c4b3 41 _spi.write(value);
tyger23 0:e05fd3c9c4b3 42 _cs = 1;
tyger23 0:e05fd3c9c4b3 43 }
tyger23 0:e05fd3c9c4b3 44
tyger23 0:e05fd3c9c4b3 45 void EAOLED::reset() {
tyger23 0:e05fd3c9c4b3 46 _power = 0;
tyger23 0:e05fd3c9c4b3 47 _cs = 1;
tyger23 0:e05fd3c9c4b3 48
tyger23 0:e05fd3c9c4b3 49 // Startup sequence recommended by embedded artists baseboard reference code
tyger23 0:e05fd3c9c4b3 50 command(0x02); // set low column address
tyger23 0:e05fd3c9c4b3 51 command(0x12); // set high column address
tyger23 0:e05fd3c9c4b3 52 command(0x40); // display start set
tyger23 0:e05fd3c9c4b3 53 command(0x2e); // stop horzontal scroll
tyger23 0:e05fd3c9c4b3 54 command(0x81); // set contrast control register
tyger23 0:e05fd3c9c4b3 55 command(0x32); //
tyger23 0:e05fd3c9c4b3 56 command(0x82); // brightness for color banks
tyger23 0:e05fd3c9c4b3 57 command(0x80); // display on
tyger23 0:e05fd3c9c4b3 58 command(0xa1); // set segment re-map
tyger23 0:e05fd3c9c4b3 59 command(0xa6); // set normal/inverse display
tyger23 0:e05fd3c9c4b3 60 command(0xa8); // set multiplex ratio
tyger23 0:e05fd3c9c4b3 61 command(0x3F); //
tyger23 0:e05fd3c9c4b3 62 command(0xd3); // set display offset
tyger23 0:e05fd3c9c4b3 63 command(0x40); //
tyger23 0:e05fd3c9c4b3 64 command(0xad); // set dc-dc on/off
tyger23 0:e05fd3c9c4b3 65 command(0x8E); //
tyger23 0:e05fd3c9c4b3 66 command(0xc8); // set com output scan direction
tyger23 0:e05fd3c9c4b3 67 command(0xd5); // set display clock divide ratio/oscillator/frequency
tyger23 0:e05fd3c9c4b3 68 command(0xf0); //
tyger23 0:e05fd3c9c4b3 69 command(0xd8); // set area color mode on/off & low power display mode
tyger23 0:e05fd3c9c4b3 70 command(0x05); //
tyger23 0:e05fd3c9c4b3 71 command(0xd9); // set pre-charge period
tyger23 0:e05fd3c9c4b3 72 command(0xF1); //
tyger23 0:e05fd3c9c4b3 73 command(0xda); // set com pins hardware configuration
tyger23 0:e05fd3c9c4b3 74 command(0x12); //
tyger23 0:e05fd3c9c4b3 75 command(0xdb); // set vcom deselect level
tyger23 0:e05fd3c9c4b3 76 command(0x34); //
tyger23 0:e05fd3c9c4b3 77 command(0x91); // set look up table for area color
tyger23 0:e05fd3c9c4b3 78 command(0x3f); //
tyger23 0:e05fd3c9c4b3 79 command(0x3f); //
tyger23 0:e05fd3c9c4b3 80 command(0x3f); //
tyger23 0:e05fd3c9c4b3 81 command(0x3f); //
tyger23 0:e05fd3c9c4b3 82 command(0xaf); // display on
tyger23 0:e05fd3c9c4b3 83 command(0xa4); // display on
tyger23 0:e05fd3c9c4b3 84
tyger23 0:e05fd3c9c4b3 85 wait_us(10);
tyger23 0:e05fd3c9c4b3 86
tyger23 0:e05fd3c9c4b3 87 _power = 1;
tyger23 0:e05fd3c9c4b3 88 }
tyger23 0:e05fd3c9c4b3 89
tyger23 0:e05fd3c9c4b3 90 #define OLED_DISPLAY_WIDTH 96
tyger23 0:e05fd3c9c4b3 91 #define OLED_DISPLAY_HEIGHT 64
tyger23 0:e05fd3c9c4b3 92
tyger23 0:e05fd3c9c4b3 93 void EAOLED::pixel(int x, int y, int colour) {
tyger23 0:e05fd3c9c4b3 94 int page = y >> 3;
tyger23 0:e05fd3c9c4b3 95 int address = 18 + x;
tyger23 0:e05fd3c9c4b3 96
tyger23 0:e05fd3c9c4b3 97 int lo = (address >> 0) & 0x0F;
tyger23 0:e05fd3c9c4b3 98 int hi = (address >> 4) | 0x10;
tyger23 0:e05fd3c9c4b3 99 int mask = 1 << (y & 0x7);
tyger23 0:e05fd3c9c4b3 100 int byte = page * OLED_DISPLAY_WIDTH + x;
tyger23 0:e05fd3c9c4b3 101
tyger23 0:e05fd3c9c4b3 102 if(colour) {
tyger23 0:e05fd3c9c4b3 103 framebuffer[byte] |= mask;
tyger23 0:e05fd3c9c4b3 104 } else {
tyger23 0:e05fd3c9c4b3 105 framebuffer[byte] &= ~mask;
tyger23 0:e05fd3c9c4b3 106 }
tyger23 0:e05fd3c9c4b3 107
tyger23 0:e05fd3c9c4b3 108 command(0xB0 + page);
tyger23 0:e05fd3c9c4b3 109 command(lo);
tyger23 0:e05fd3c9c4b3 110 command(hi);
tyger23 0:e05fd3c9c4b3 111 data(framebuffer[byte]);
tyger23 0:e05fd3c9c4b3 112 }
tyger23 0:e05fd3c9c4b3 113
tyger23 0:e05fd3c9c4b3 114 /*void EAOLED::cls() {
tyger23 0:e05fd3c9c4b3 115 for(int y=0; y<64; y++) {
tyger23 0:e05fd3c9c4b3 116 for (int x=0; x<96; x++) {
tyger23 0:e05fd3c9c4b3 117 pixel(x, y, 0xFFFFFF);
tyger23 0:e05fd3c9c4b3 118 }
tyger23 0:e05fd3c9c4b3 119 }
tyger23 0:e05fd3c9c4b3 120 }*/
tyger23 0:e05fd3c9c4b3 121