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
EAOLED.cpp@1:37f2341e763b, 2010-06-16 (annotated)
- Committer:
- tyger23
- Date:
- Wed Jun 16 16:08:29 2010 +0000
- Revision:
- 1:37f2341e763b
- Parent:
- 0:e05fd3c9c4b3
Who changed what in which revision?
User | Revision | Line number | New 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 |