4Dsystems Oled library
OLED32028P1T.cpp@0:0e93e95bab96, 2015-01-08 (annotated)
- Committer:
- star297
- Date:
- Thu Jan 08 12:01:58 2015 +0000
- Revision:
- 0:0e93e95bab96
Update baud rate defines
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
star297 | 0:0e93e95bab96 | 1 | // mbed library for 4DSystems uOLED-32028-P1T |
star297 | 0:0e93e95bab96 | 2 | #include "mbed.h" |
star297 | 0:0e93e95bab96 | 3 | #include "OLED32028P1T.h" |
star297 | 0:0e93e95bab96 | 4 | |
star297 | 0:0e93e95bab96 | 5 | OLED32028P1T::OLED32028P1T(PinName serialTx, PinName serialRx, PinName resetPin) : s(serialTx, serialRx), reset(resetPin){ |
star297 | 0:0e93e95bab96 | 6 | s.baud(BAUDRATE); |
star297 | 0:0e93e95bab96 | 7 | while (s.readable()) { |
star297 | 0:0e93e95bab96 | 8 | s.getc(); |
star297 | 0:0e93e95bab96 | 9 | } } |
star297 | 0:0e93e95bab96 | 10 | // Initialise OLED display and redifine baud faster baud rate. |
star297 | 0:0e93e95bab96 | 11 | void OLED32028P1T::init(){ |
star297 | 0:0e93e95bab96 | 12 | resetDisplay(); |
star297 | 0:0e93e95bab96 | 13 | s.putc(0x55); // send byte for OLED to autodetect baudrate |
star297 | 0:0e93e95bab96 | 14 | getResponse(); |
star297 | 0:0e93e95bab96 | 15 | s.putc (0x51); // send code to display to change baud rate |
star297 | 0:0e93e95bab96 | 16 | #if defined(TARGET_KL05Z) |
star297 | 0:0e93e95bab96 | 17 | s.putc (0x0E); // send new display baud rate from list below, upto 128k |
star297 | 0:0e93e95bab96 | 18 | #elif defined(TARGET_KL25Z) |
star297 | 0:0e93e95bab96 | 19 | s.putc (0x0E); // send new display baud rate from list below, upto 128k |
star297 | 0:0e93e95bab96 | 20 | #else |
star297 | 0:0e93e95bab96 | 21 | s.putc (0x0F); // send new display baud rate from list below, maximun 282353 |
star297 | 0:0e93e95bab96 | 22 | #endif |
star297 | 0:0e93e95bab96 | 23 | /* |
star297 | 0:0e93e95bab96 | 24 | 00hex : 110 Baud |
star297 | 0:0e93e95bab96 | 25 | 01hex : 300 Baud |
star297 | 0:0e93e95bab96 | 26 | 02hex : 600 Baud |
star297 | 0:0e93e95bab96 | 27 | 03hex : 1200 Baud |
star297 | 0:0e93e95bab96 | 28 | 04hex : 2400 Baud |
star297 | 0:0e93e95bab96 | 29 | 05hex : 4800 Baud |
star297 | 0:0e93e95bab96 | 30 | 06hex : 9600 Baud |
star297 | 0:0e93e95bab96 | 31 | 07hex : 14400 Baud |
star297 | 0:0e93e95bab96 | 32 | 08hex : 19200 Baud |
star297 | 0:0e93e95bab96 | 33 | 09hex : 31250 Baud |
star297 | 0:0e93e95bab96 | 34 | 0Ahex : 38400 Baud |
star297 | 0:0e93e95bab96 | 35 | 0Bhex : 56000 Baud |
star297 | 0:0e93e95bab96 | 36 | 0Chex : 57600 Baud |
star297 | 0:0e93e95bab96 | 37 | 0Dhex : 115200 Baud |
star297 | 0:0e93e95bab96 | 38 | 0Ehex : 128000 Baud (It is actually 129032Baud) |
star297 | 0:0e93e95bab96 | 39 | 0Fhex : 256000 Baud (It is actually 282353Baud) |
star297 | 0:0e93e95bab96 | 40 | 10hex : 128000 Baud |
star297 | 0:0e93e95bab96 | 41 | 11hex : 256000 Baud |
star297 | 0:0e93e95bab96 | 42 | */ |
star297 | 0:0e93e95bab96 | 43 | wait_ms(10); |
star297 | 0:0e93e95bab96 | 44 | #undef BAUDRATE |
star297 | 0:0e93e95bab96 | 45 | #if defined(TARGET_KL05Z) |
star297 | 0:0e93e95bab96 | 46 | #define BAUDRATE 129032 // ***** set matching new display baud rate, upto 128k ***** |
star297 | 0:0e93e95bab96 | 47 | #elif defined(TARGET_KL25Z) |
star297 | 0:0e93e95bab96 | 48 | #define BAUDRATE 129032 // ***** set matching new display baud rate, upto 128k ***** |
star297 | 0:0e93e95bab96 | 49 | # else |
star297 | 0:0e93e95bab96 | 50 | #define BAUDRATE 282353 // ***** set matching new display baud rate, maximum 282353 ***** |
star297 | 0:0e93e95bab96 | 51 | #endif |
star297 | 0:0e93e95bab96 | 52 | s.baud(BAUDRATE); |
star297 | 0:0e93e95bab96 | 53 | while (s.readable()) { |
star297 | 0:0e93e95bab96 | 54 | s.getc(); |
star297 | 0:0e93e95bab96 | 55 | } } |
star297 | 0:0e93e95bab96 | 56 | void OLED32028P1T::resetDisplay(){ |
star297 | 0:0e93e95bab96 | 57 | reset = 0; |
star297 | 0:0e93e95bab96 | 58 | wait_ms(200); |
star297 | 0:0e93e95bab96 | 59 | reset = 1; |
star297 | 0:0e93e95bab96 | 60 | wait_ms(1000); |
star297 | 0:0e93e95bab96 | 61 | } |
star297 | 0:0e93e95bab96 | 62 | void OLED32028P1T::displayControl(int mode, int value){ |
star297 | 0:0e93e95bab96 | 63 | s.putc(0x59); |
star297 | 0:0e93e95bab96 | 64 | s.putc(mode); |
star297 | 0:0e93e95bab96 | 65 | s.putc(value); |
star297 | 0:0e93e95bab96 | 66 | getResponse(); |
star297 | 0:0e93e95bab96 | 67 | } |
star297 | 0:0e93e95bab96 | 68 | void OLED32028P1T::displayOff(){ |
star297 | 0:0e93e95bab96 | 69 | s.putc(0x59); |
star297 | 0:0e93e95bab96 | 70 | s.putc(0x01); |
star297 | 0:0e93e95bab96 | 71 | s.putc(0x00); |
star297 | 0:0e93e95bab96 | 72 | getResponse(); |
star297 | 0:0e93e95bab96 | 73 | } |
star297 | 0:0e93e95bab96 | 74 | void OLED32028P1T::displayOn(){ |
star297 | 0:0e93e95bab96 | 75 | s.putc(0x59); |
star297 | 0:0e93e95bab96 | 76 | s.putc(0x01); |
star297 | 0:0e93e95bab96 | 77 | s.putc(0x01); |
star297 | 0:0e93e95bab96 | 78 | getResponse(); |
star297 | 0:0e93e95bab96 | 79 | } |
star297 | 0:0e93e95bab96 | 80 | void OLED32028P1T::displaySleep(){ |
star297 | 0:0e93e95bab96 | 81 | s.putc(0x5A); |
star297 | 0:0e93e95bab96 | 82 | s.putc(0x02); |
star297 | 0:0e93e95bab96 | 83 | s.putc(0xFF); |
star297 | 0:0e93e95bab96 | 84 | while (!s.readable()){} |
star297 | 0:0e93e95bab96 | 85 | |
star297 | 0:0e93e95bab96 | 86 | } |
star297 | 0:0e93e95bab96 | 87 | void OLED32028P1T::getResponse(){ |
star297 | 0:0e93e95bab96 | 88 | char response = 0x15; |
star297 | 0:0e93e95bab96 | 89 | lastCount = 0; |
star297 | 0:0e93e95bab96 | 90 | NAKCount = 0; |
star297 | 0:0e93e95bab96 | 91 | while (!s.readable() || response == 0x15) { |
star297 | 0:0e93e95bab96 | 92 | wait_ms(1); |
star297 | 0:0e93e95bab96 | 93 | lastCount++; |
star297 | 0:0e93e95bab96 | 94 | if (s.readable()) { |
star297 | 0:0e93e95bab96 | 95 | response = s.getc(); // Read response |
star297 | 0:0e93e95bab96 | 96 | if (response == 0x06) { |
star297 | 0:0e93e95bab96 | 97 | return; |
star297 | 0:0e93e95bab96 | 98 | } else if (response == 0x15) { |
star297 | 0:0e93e95bab96 | 99 | NAKCount++; |
star297 | 0:0e93e95bab96 | 100 | } } } } |
star297 | 0:0e93e95bab96 | 101 | int OLED32028P1T::toRGB(int red, int green, int blue){ |
star297 | 0:0e93e95bab96 | 102 | int outR = ((red * 31) / 255); |
star297 | 0:0e93e95bab96 | 103 | int outG = ((green * 63) / 255); |
star297 | 0:0e93e95bab96 | 104 | int outB = ((blue * 31) / 255); |
star297 | 0:0e93e95bab96 | 105 | return (outR << 11) | (outG << 5) | outB; |
star297 | 0:0e93e95bab96 | 106 | } |
star297 | 0:0e93e95bab96 | 107 | void OLED32028P1T::clear(){ |
star297 | 0:0e93e95bab96 | 108 | s.putc(0x45); |
star297 | 0:0e93e95bab96 | 109 | getResponse(); |
star297 | 0:0e93e95bab96 | 110 | _row = 0; |
star297 | 0:0e93e95bab96 | 111 | _column = 0; |
star297 | 0:0e93e95bab96 | 112 | } |
star297 | 0:0e93e95bab96 | 113 | void OLED32028P1T::drawPixel(int x, int y, int color){ |
star297 | 0:0e93e95bab96 | 114 | s.putc(0x50); |
star297 | 0:0e93e95bab96 | 115 | s.putc(x >> 8); |
star297 | 0:0e93e95bab96 | 116 | s.putc(x & 0xFF); |
star297 | 0:0e93e95bab96 | 117 | s.putc(y >> 8); |
star297 | 0:0e93e95bab96 | 118 | s.putc(y & 0xFF); |
star297 | 0:0e93e95bab96 | 119 | s.putc(color >> 8); // MSB |
star297 | 0:0e93e95bab96 | 120 | s.putc(color & 0xFF); // LSB |
star297 | 0:0e93e95bab96 | 121 | getResponse(); |
star297 | 0:0e93e95bab96 | 122 | } |
star297 | 0:0e93e95bab96 | 123 | void OLED32028P1T::drawLine(int x1, int y1, int x2, int y2, int color){ |
star297 | 0:0e93e95bab96 | 124 | s.putc(0x4C); // Line |
star297 | 0:0e93e95bab96 | 125 | s.putc(x1 >> 8); |
star297 | 0:0e93e95bab96 | 126 | s.putc(x1 & 0xFF); |
star297 | 0:0e93e95bab96 | 127 | s.putc(y1 >> 8); |
star297 | 0:0e93e95bab96 | 128 | s.putc(y1 & 0xFF); |
star297 | 0:0e93e95bab96 | 129 | s.putc(x2 >> 8); |
star297 | 0:0e93e95bab96 | 130 | s.putc(x2 & 0xFF); |
star297 | 0:0e93e95bab96 | 131 | s.putc(y2 >> 8); |
star297 | 0:0e93e95bab96 | 132 | s.putc(y2 & 0xFF); |
star297 | 0:0e93e95bab96 | 133 | s.putc(color >> 8); // MSB |
star297 | 0:0e93e95bab96 | 134 | s.putc(color & 0xFF); // LSB |
star297 | 0:0e93e95bab96 | 135 | getResponse(); |
star297 | 0:0e93e95bab96 | 136 | } |
star297 | 0:0e93e95bab96 | 137 | void OLED32028P1T::drawRectangle(int x, int y, int width, int height, int color){ |
star297 | 0:0e93e95bab96 | 138 | s.putc(0x72); |
star297 | 0:0e93e95bab96 | 139 | s.putc(x >> 8); |
star297 | 0:0e93e95bab96 | 140 | s.putc(x & 0xFF); |
star297 | 0:0e93e95bab96 | 141 | s.putc(y >> 8); |
star297 | 0:0e93e95bab96 | 142 | s.putc(y & 0xFF); |
star297 | 0:0e93e95bab96 | 143 | s.putc(x+width >> 8); |
star297 | 0:0e93e95bab96 | 144 | s.putc(x+width & 0xFF); |
star297 | 0:0e93e95bab96 | 145 | s.putc(y+height >> 8); |
star297 | 0:0e93e95bab96 | 146 | s.putc(y+height & 0xFF); |
star297 | 0:0e93e95bab96 | 147 | s.putc(color >> 8); // MSB |
star297 | 0:0e93e95bab96 | 148 | s.putc(color & 0xFF); // LSB |
star297 | 0:0e93e95bab96 | 149 | getResponse(); |
star297 | 0:0e93e95bab96 | 150 | } |
star297 | 0:0e93e95bab96 | 151 | void OLED32028P1T::drawCircle(int x, int y, int radius, int color){ |
star297 | 0:0e93e95bab96 | 152 | s.putc(0x43); |
star297 | 0:0e93e95bab96 | 153 | s.putc(0); |
star297 | 0:0e93e95bab96 | 154 | s.putc(x); |
star297 | 0:0e93e95bab96 | 155 | s.putc(0); |
star297 | 0:0e93e95bab96 | 156 | s.putc(y); |
star297 | 0:0e93e95bab96 | 157 | s.putc(0); |
star297 | 0:0e93e95bab96 | 158 | s.putc(radius); |
star297 | 0:0e93e95bab96 | 159 | s.putc(color >> 8); // MSB |
star297 | 0:0e93e95bab96 | 160 | s.putc(color & 0xFF); // LSB |
star297 | 0:0e93e95bab96 | 161 | getResponse(); |
star297 | 0:0e93e95bab96 | 162 | } |
star297 | 0:0e93e95bab96 | 163 | void OLED32028P1T::setFontSize(int fontSize){ |
star297 | 0:0e93e95bab96 | 164 | s.putc(0x46); |
star297 | 0:0e93e95bab96 | 165 | s.putc(fontSize); |
star297 | 0:0e93e95bab96 | 166 | _fontSize = fontSize; |
star297 | 0:0e93e95bab96 | 167 | getResponse(); |
star297 | 0:0e93e95bab96 | 168 | } |
star297 | 0:0e93e95bab96 | 169 | void OLED32028P1T::setFontColor(int fontColor){ |
star297 | 0:0e93e95bab96 | 170 | _fontColor = fontColor; |
star297 | 0:0e93e95bab96 | 171 | } |
star297 | 0:0e93e95bab96 | 172 | void OLED32028P1T::setPenSize(int penSize){ |
star297 | 0:0e93e95bab96 | 173 | s.putc(0x70); |
star297 | 0:0e93e95bab96 | 174 | s.putc(penSize); |
star297 | 0:0e93e95bab96 | 175 | _penSize = penSize; |
star297 | 0:0e93e95bab96 | 176 | getResponse(); |
star297 | 0:0e93e95bab96 | 177 | } |
star297 | 0:0e93e95bab96 | 178 | void OLED32028P1T::setTextBackgroundType(int textBackgroundType){ |
star297 | 0:0e93e95bab96 | 179 | s.putc(0x4F); |
star297 | 0:0e93e95bab96 | 180 | s.putc(textBackgroundType); |
star297 | 0:0e93e95bab96 | 181 | getResponse(); |
star297 | 0:0e93e95bab96 | 182 | } |
star297 | 0:0e93e95bab96 | 183 | void OLED32028P1T::setBackgroundColor(int color){ |
star297 | 0:0e93e95bab96 | 184 | s.putc(0x42); |
star297 | 0:0e93e95bab96 | 185 | s.putc(color >> 8); // MSB |
star297 | 0:0e93e95bab96 | 186 | s.putc(color & 0xFF); // LSB |
star297 | 0:0e93e95bab96 | 187 | getResponse(); |
star297 | 0:0e93e95bab96 | 188 | } |
star297 | 0:0e93e95bab96 | 189 | void OLED32028P1T::drawText(int column, int row, int font_size, char *mytext, int color){ |
star297 | 0:0e93e95bab96 | 190 | s.putc(0x73); |
star297 | 0:0e93e95bab96 | 191 | // Adjust to center of the screen (26 Columns at font size 0) |
star297 | 0:0e93e95bab96 | 192 | //int newCol = 13 - (strlen(mytext)/2); |
star297 | 0:0e93e95bab96 | 193 | //printByte(newCol); // column |
star297 | 0:0e93e95bab96 | 194 | s.putc(column); // column |
star297 | 0:0e93e95bab96 | 195 | s.putc(row); // row |
star297 | 0:0e93e95bab96 | 196 | s.putc(font_size); // font size (0 = 5x7 font, 1 = 8x8 font, 2 = 8x12 font, 3 = 12x16) |
star297 | 0:0e93e95bab96 | 197 | s.putc(color >> 8); // MSB |
star297 | 0:0e93e95bab96 | 198 | s.putc(color & 0xFF); // LSB |
star297 | 0:0e93e95bab96 | 199 | for (int i = 0; i < strlen(mytext); i++) { |
star297 | 0:0e93e95bab96 | 200 | s.putc(mytext[i]); // character to write |
star297 | 0:0e93e95bab96 | 201 | } |
star297 | 0:0e93e95bab96 | 202 | s.putc(0x00); // string terminator (always 0x00) |
star297 | 0:0e93e95bab96 | 203 | getResponse(); |
star297 | 0:0e93e95bab96 | 204 | } |
star297 | 0:0e93e95bab96 | 205 | void OLED32028P1T::drawTextGraphic(int x, int y, int font_size, char *mytext, int width, int height, int color){ |
star297 | 0:0e93e95bab96 | 206 | s.putc(0x53); |
star297 | 0:0e93e95bab96 | 207 | s.putc(x >> 8); //MSB |
star297 | 0:0e93e95bab96 | 208 | s.putc(x & 0xFF); //LSB |
star297 | 0:0e93e95bab96 | 209 | s.putc(y >> 8); // MSB |
star297 | 0:0e93e95bab96 | 210 | s.putc(y & 0xFF); //LSB |
star297 | 0:0e93e95bab96 | 211 | s.putc(font_size); // font size (0 = 5x7 font, 1 = 8x8 font, 2 = 8x12 font, 3 = 12x16) |
star297 | 0:0e93e95bab96 | 212 | s.putc(color >> 8); // MSB |
star297 | 0:0e93e95bab96 | 213 | s.putc(color & 0xFF); // LSB |
star297 | 0:0e93e95bab96 | 214 | s.putc(width); // character width |
star297 | 0:0e93e95bab96 | 215 | s.putc(height); // character height |
star297 | 0:0e93e95bab96 | 216 | for (int i = 0; i < strlen(mytext); i++) { |
star297 | 0:0e93e95bab96 | 217 | s.putc(mytext[i]); // character to write |
star297 | 0:0e93e95bab96 | 218 | } |
star297 | 0:0e93e95bab96 | 219 | s.putc(0x00); // string terminator (always 0x00) |
star297 | 0:0e93e95bab96 | 220 | getResponse(); |
star297 | 0:0e93e95bab96 | 221 | } |
star297 | 0:0e93e95bab96 | 222 | void OLED32028P1T::drawSingleChar(int column, int row, int theChar, int color){ |
star297 | 0:0e93e95bab96 | 223 | s.putc(0x54); |
star297 | 0:0e93e95bab96 | 224 | s.putc(theChar); |
star297 | 0:0e93e95bab96 | 225 | s.putc(column); |
star297 | 0:0e93e95bab96 | 226 | s.putc(row); |
star297 | 0:0e93e95bab96 | 227 | s.putc(color >> 8); // MSB |
star297 | 0:0e93e95bab96 | 228 | s.putc(color & 0xFF); // LSB |
star297 | 0:0e93e95bab96 | 229 | getResponse(); |
star297 | 0:0e93e95bab96 | 230 | } |
star297 | 0:0e93e95bab96 | 231 | char OLED32028P1T::getPenSize(){ |
star297 | 0:0e93e95bab96 | 232 | return _penSize; |
star297 | 0:0e93e95bab96 | 233 | } |
star297 | 0:0e93e95bab96 | 234 | void OLED32028P1T::drawTextButton(int up_down, int x, int y, int button_colour, int font, int string_colour, int width, int height, char *mytext){ |
star297 | 0:0e93e95bab96 | 235 | s.putc(0x62); |
star297 | 0:0e93e95bab96 | 236 | s.putc(up_down); |
star297 | 0:0e93e95bab96 | 237 | s.putc(x >> 8); |
star297 | 0:0e93e95bab96 | 238 | s.putc(x & 0xFF); |
star297 | 0:0e93e95bab96 | 239 | s.putc(y >> 8); |
star297 | 0:0e93e95bab96 | 240 | s.putc(y & 0xFF); |
star297 | 0:0e93e95bab96 | 241 | s.putc(button_colour >> 8); |
star297 | 0:0e93e95bab96 | 242 | s.putc(button_colour & 0xFF); |
star297 | 0:0e93e95bab96 | 243 | s.putc(font); |
star297 | 0:0e93e95bab96 | 244 | s.putc(string_colour >> 8); |
star297 | 0:0e93e95bab96 | 245 | s.putc(string_colour & 0xFF); |
star297 | 0:0e93e95bab96 | 246 | s.putc(width); |
star297 | 0:0e93e95bab96 | 247 | s.putc(height); |
star297 | 0:0e93e95bab96 | 248 | for (int i = 0; i < strlen(mytext); i++) { |
star297 | 0:0e93e95bab96 | 249 | s.putc(mytext[i]); // characters to write |
star297 | 0:0e93e95bab96 | 250 | } |
star297 | 0:0e93e95bab96 | 251 | s.putc(0x00); |
star297 | 0:0e93e95bab96 | 252 | getResponse(); |
star297 | 0:0e93e95bab96 | 253 | } |
star297 | 0:0e93e95bab96 | 254 | void OLED32028P1T::enableTouch(){ |
star297 | 0:0e93e95bab96 | 255 | s.putc(0x59); // display control command |
star297 | 0:0e93e95bab96 | 256 | s.putc(0x05); // Touch Control |
star297 | 0:0e93e95bab96 | 257 | s.putc(0x00); // enable Touch |
star297 | 0:0e93e95bab96 | 258 | getResponse(); |
star297 | 0:0e93e95bab96 | 259 | } |
star297 | 0:0e93e95bab96 | 260 | void OLED32028P1T::disableTouch(){ |
star297 | 0:0e93e95bab96 | 261 | s.putc(0x59); // display control command |
star297 | 0:0e93e95bab96 | 262 | s.putc(0x05); // Touch Control |
star297 | 0:0e93e95bab96 | 263 | s.putc(0x01); // disable Touch |
star297 | 0:0e93e95bab96 | 264 | getResponse(); |
star297 | 0:0e93e95bab96 | 265 | } |
star297 | 0:0e93e95bab96 | 266 | unsigned char OLED32028P1T::getTouch(int *xbuffer, int *ybuffer){ //Touch Press on the screen, if return=1, touch coordinates are stored on the buffer[] |
star297 | 0:0e93e95bab96 | 267 | |
star297 | 0:0e93e95bab96 | 268 | //xbuffer=0;ybuffer=0; |
star297 | 0:0e93e95bab96 | 269 | s.putc(0x6F); |
star297 | 0:0e93e95bab96 | 270 | s.putc(0x04); |
star297 | 0:0e93e95bab96 | 271 | xbuffer[0]=s.getc(); |
star297 | 0:0e93e95bab96 | 272 | xbuffer[0]=xbuffer[0]<<8; |
star297 | 0:0e93e95bab96 | 273 | xbuffer[0]|=s.getc(); |
star297 | 0:0e93e95bab96 | 274 | ybuffer[0]=s.getc(); |
star297 | 0:0e93e95bab96 | 275 | ybuffer[0]=ybuffer[0]<<8; |
star297 | 0:0e93e95bab96 | 276 | ybuffer[0]|=s.getc(); |
star297 | 0:0e93e95bab96 | 277 | |
star297 | 0:0e93e95bab96 | 278 | if(xbuffer[0] != 0){ |
star297 | 0:0e93e95bab96 | 279 | s.putc(0x6F); |
star297 | 0:0e93e95bab96 | 280 | s.putc(0x05); |
star297 | 0:0e93e95bab96 | 281 | xbuffer[0]=s.getc(); |
star297 | 0:0e93e95bab96 | 282 | xbuffer[0]=xbuffer[0]<<8; |
star297 | 0:0e93e95bab96 | 283 | xbuffer[0]|=s.getc(); |
star297 | 0:0e93e95bab96 | 284 | ybuffer[0]=s.getc(); |
star297 | 0:0e93e95bab96 | 285 | ybuffer[0]=ybuffer[0]<<8; |
star297 | 0:0e93e95bab96 | 286 | ybuffer[0]|=s.getc(); |
star297 | 0:0e93e95bab96 | 287 | return 1; |
star297 | 0:0e93e95bab96 | 288 | }else{ |
star297 | 0:0e93e95bab96 | 289 | return 0; |
star297 | 0:0e93e95bab96 | 290 | } |
star297 | 0:0e93e95bab96 | 291 | } |
star297 | 0:0e93e95bab96 | 292 | unsigned char OLED32028P1T::getTouchPress(int *xbuffer, int *ybuffer){ //Touch Release on the screen, if return=1, touch coordinates are stored on the buffer[] |
star297 | 0:0e93e95bab96 | 293 | s.putc(0x6F); |
star297 | 0:0e93e95bab96 | 294 | s.putc(0x01); |
star297 | 0:0e93e95bab96 | 295 | xbuffer[0]=s.getc(); |
star297 | 0:0e93e95bab96 | 296 | xbuffer[0]=xbuffer[0]<<8; |
star297 | 0:0e93e95bab96 | 297 | xbuffer[0]|=s.getc(); |
star297 | 0:0e93e95bab96 | 298 | ybuffer[0]=s.getc(); |
star297 | 0:0e93e95bab96 | 299 | ybuffer[0]=ybuffer[0]<<8; |
star297 | 0:0e93e95bab96 | 300 | ybuffer[0]|=s.getc(); |
star297 | 0:0e93e95bab96 | 301 | |
star297 | 0:0e93e95bab96 | 302 | if(xbuffer[0] != 0){ |
star297 | 0:0e93e95bab96 | 303 | s.putc(0x6F); |
star297 | 0:0e93e95bab96 | 304 | s.putc(0x05); |
star297 | 0:0e93e95bab96 | 305 | xbuffer[0]=s.getc(); |
star297 | 0:0e93e95bab96 | 306 | xbuffer[0]=xbuffer[0]<<8; |
star297 | 0:0e93e95bab96 | 307 | xbuffer[0]|=s.getc(); |
star297 | 0:0e93e95bab96 | 308 | ybuffer[0]=s.getc(); |
star297 | 0:0e93e95bab96 | 309 | ybuffer[0]=ybuffer[0]<<8; |
star297 | 0:0e93e95bab96 | 310 | ybuffer[0]|=s.getc(); |
star297 | 0:0e93e95bab96 | 311 | return 1; |
star297 | 0:0e93e95bab96 | 312 | }else{ |
star297 | 0:0e93e95bab96 | 313 | return 0; |
star297 | 0:0e93e95bab96 | 314 | } |
star297 | 0:0e93e95bab96 | 315 | } |
star297 | 0:0e93e95bab96 | 316 | unsigned char OLED32028P1T::getTouchRelease(int *xbuffer, int *ybuffer){ //Touch Release on the screen, if return=1, touch coordinates are stored on the buffer[] |
star297 | 0:0e93e95bab96 | 317 | s.putc(0x6F); |
star297 | 0:0e93e95bab96 | 318 | s.putc(0x02); |
star297 | 0:0e93e95bab96 | 319 | xbuffer[0]=s.getc(); |
star297 | 0:0e93e95bab96 | 320 | xbuffer[0]=xbuffer[0]<<8; |
star297 | 0:0e93e95bab96 | 321 | xbuffer[0]|=s.getc(); |
star297 | 0:0e93e95bab96 | 322 | ybuffer[0]=s.getc(); |
star297 | 0:0e93e95bab96 | 323 | ybuffer[0]=ybuffer[0]<<8; |
star297 | 0:0e93e95bab96 | 324 | ybuffer[0]|=s.getc(); |
star297 | 0:0e93e95bab96 | 325 | |
star297 | 0:0e93e95bab96 | 326 | if(xbuffer[0] != 0){ |
star297 | 0:0e93e95bab96 | 327 | s.putc(0x6F); |
star297 | 0:0e93e95bab96 | 328 | s.putc(0x05); |
star297 | 0:0e93e95bab96 | 329 | xbuffer[0]=s.getc(); |
star297 | 0:0e93e95bab96 | 330 | xbuffer[0]=xbuffer[0]<<8; |
star297 | 0:0e93e95bab96 | 331 | xbuffer[0]|=s.getc(); |
star297 | 0:0e93e95bab96 | 332 | ybuffer[0]=s.getc(); |
star297 | 0:0e93e95bab96 | 333 | ybuffer[0]=ybuffer[0]<<8; |
star297 | 0:0e93e95bab96 | 334 | ybuffer[0]|=s.getc(); |
star297 | 0:0e93e95bab96 | 335 | return 1; |
star297 | 0:0e93e95bab96 | 336 | }else{ |
star297 | 0:0e93e95bab96 | 337 | return 0; |
star297 | 0:0e93e95bab96 | 338 | } |
star297 | 0:0e93e95bab96 | 339 | } |
star297 | 0:0e93e95bab96 | 340 | void OLED32028P1T::setTouchArea(int x1, int y1 , int x2, int y2) { // define touch area |
star297 | 0:0e93e95bab96 | 341 | char command[9]= "";int i; |
star297 | 0:0e93e95bab96 | 342 | command[0] = (0x75); |
star297 | 0:0e93e95bab96 | 343 | command[1] = (x1 >> 8) & 0xFF; |
star297 | 0:0e93e95bab96 | 344 | command[2] = x1 & 0xFF; |
star297 | 0:0e93e95bab96 | 345 | command[3] = (y1 >> 8) & 0xFF; |
star297 | 0:0e93e95bab96 | 346 | command[4] = y1 & 0xFF; |
star297 | 0:0e93e95bab96 | 347 | command[5] = (x2 >> 8) & 0xFF; |
star297 | 0:0e93e95bab96 | 348 | command[6] = x2 & 0xFF; |
star297 | 0:0e93e95bab96 | 349 | command[7] = (y2 >> 8) & 0xFF; |
star297 | 0:0e93e95bab96 | 350 | command[8] = y2 & 0xFF; |
star297 | 0:0e93e95bab96 | 351 | for (i = 0; i < 9; i++) s.putc(command[i]); |
star297 | 0:0e93e95bab96 | 352 | getResponse(); |
star297 | 0:0e93e95bab96 | 353 | } |
star297 | 0:0e93e95bab96 | 354 | void OLED32028P1T::resetTouchArea(){ |
star297 | 0:0e93e95bab96 | 355 | s.putc(0x59); // display control command |
star297 | 0:0e93e95bab96 | 356 | s.putc(0x05); // Touch Control |
star297 | 0:0e93e95bab96 | 357 | s.putc(0x02); // reset Touch Area to whole screen |
star297 | 0:0e93e95bab96 | 358 | getResponse(); |
star297 | 0:0e93e95bab96 | 359 | } |
star297 | 0:0e93e95bab96 | 360 | void OLED32028P1T::waitTouch(int x){ |
star297 | 0:0e93e95bab96 | 361 | s.putc(0x77); // wait Touch command |
star297 | 0:0e93e95bab96 | 362 | s.putc(x >> 8); // MSB |
star297 | 0:0e93e95bab96 | 363 | s.putc(x & 0xFF); // LSB |
star297 | 0:0e93e95bab96 | 364 | getResponse(); |
star297 | 0:0e93e95bab96 | 365 | } |
star297 | 0:0e93e95bab96 | 366 | unsigned char OLED32028P1T::stringSD(int x1, int y1, int x2, int y2, int colour, unsigned char font, unsigned char fill, int BS, int BR, char name[]){ |
star297 | 0:0e93e95bab96 | 367 | //Draw a String from a text file contained on the micro SD card on the screen |
star297 | 0:0e93e95bab96 | 368 | unsigned char counter=0; |
star297 | 0:0e93e95bab96 | 369 | s.putc('S'); |
star297 | 0:0e93e95bab96 | 370 | s.putc('S'); //from SD |
star297 | 0:0e93e95bab96 | 371 | s.putc(x1>>8); |
star297 | 0:0e93e95bab96 | 372 | s.putc(x1); |
star297 | 0:0e93e95bab96 | 373 | s.putc(y1>>8); |
star297 | 0:0e93e95bab96 | 374 | s.putc(y1); |
star297 | 0:0e93e95bab96 | 375 | s.putc(x2>>8); |
star297 | 0:0e93e95bab96 | 376 | s.putc(x2); |
star297 | 0:0e93e95bab96 | 377 | s.putc(y2>>8); |
star297 | 0:0e93e95bab96 | 378 | s.putc(y2); |
star297 | 0:0e93e95bab96 | 379 | s.putc(colour>>8); |
star297 | 0:0e93e95bab96 | 380 | s.putc(colour); |
star297 | 0:0e93e95bab96 | 381 | s.putc(font); |
star297 | 0:0e93e95bab96 | 382 | s.putc(fill); |
star297 | 0:0e93e95bab96 | 383 | s.putc(BS>>8); |
star297 | 0:0e93e95bab96 | 384 | s.putc(BS); |
star297 | 0:0e93e95bab96 | 385 | s.putc(BR>>8); |
star297 | 0:0e93e95bab96 | 386 | s.putc(BR); |
star297 | 0:0e93e95bab96 | 387 | while(1){ |
star297 | 0:0e93e95bab96 | 388 | s.putc(name[counter]); |
star297 | 0:0e93e95bab96 | 389 | if(name[counter]==0x00){ |
star297 | 0:0e93e95bab96 | 390 | break; |
star297 | 0:0e93e95bab96 | 391 | } |
star297 | 0:0e93e95bab96 | 392 | counter++; |
star297 | 0:0e93e95bab96 | 393 | } |
star297 | 0:0e93e95bab96 | 394 | return s.getc(); |
star297 | 0:0e93e95bab96 | 395 | } |
star297 | 0:0e93e95bab96 | 396 | unsigned char OLED32028P1T::imageSD(int x, int y, char name[]){ |
star297 | 0:0e93e95bab96 | 397 | //Draw an Image contained on the micro SD card on the screen, top left corner coordinates |
star297 | 0:0e93e95bab96 | 398 | unsigned char counter=0; |
star297 | 0:0e93e95bab96 | 399 | s.putc('I'); |
star297 | 0:0e93e95bab96 | 400 | s.putc('S'); //from SD |
star297 | 0:0e93e95bab96 | 401 | s.putc(x>>8); |
star297 | 0:0e93e95bab96 | 402 | s.putc(x); |
star297 | 0:0e93e95bab96 | 403 | s.putc(y>>8); |
star297 | 0:0e93e95bab96 | 404 | s.putc(y); |
star297 | 0:0e93e95bab96 | 405 | while(1){ |
star297 | 0:0e93e95bab96 | 406 | s.putc(name[counter]); |
star297 | 0:0e93e95bab96 | 407 | if(name[counter]==0x00){ |
star297 | 0:0e93e95bab96 | 408 | break; |
star297 | 0:0e93e95bab96 | 409 | } |
star297 | 0:0e93e95bab96 | 410 | counter++; |
star297 | 0:0e93e95bab96 | 411 | } |
star297 | 0:0e93e95bab96 | 412 | return s.getc(); |
star297 | 0:0e93e95bab96 | 413 | } |
star297 | 0:0e93e95bab96 | 414 | int OLED32028P1T::_putc(int value){ |
star297 | 0:0e93e95bab96 | 415 | if (value == '\n') { |
star297 | 0:0e93e95bab96 | 416 | _column = 0; |
star297 | 0:0e93e95bab96 | 417 | _row++; |
star297 | 0:0e93e95bab96 | 418 | if(_row >= rows()) { |
star297 | 0:0e93e95bab96 | 419 | _row = 0; |
star297 | 0:0e93e95bab96 | 420 | } |
star297 | 0:0e93e95bab96 | 421 | } else { |
star297 | 0:0e93e95bab96 | 422 | drawSingleChar(_column, _row, value, _fontColor); |
star297 | 0:0e93e95bab96 | 423 | wait_ms(1); //TODO: why is this needed? |
star297 | 0:0e93e95bab96 | 424 | _column++; |
star297 | 0:0e93e95bab96 | 425 | if (_column >= columns()) { |
star297 | 0:0e93e95bab96 | 426 | _column = 0; |
star297 | 0:0e93e95bab96 | 427 | _row++; |
star297 | 0:0e93e95bab96 | 428 | if(_row >= rows()) { |
star297 | 0:0e93e95bab96 | 429 | _row = 0; |
star297 | 0:0e93e95bab96 | 430 | } } } |
star297 | 0:0e93e95bab96 | 431 | return value; |
star297 | 0:0e93e95bab96 | 432 | } |
star297 | 0:0e93e95bab96 | 433 | void OLED32028P1T::locate(int column, int row){ |
star297 | 0:0e93e95bab96 | 434 | _column = column; |
star297 | 0:0e93e95bab96 | 435 | _row = row; |
star297 | 0:0e93e95bab96 | 436 | } |
star297 | 0:0e93e95bab96 | 437 | int OLED32028P1T::rows(){ |
star297 | 0:0e93e95bab96 | 438 | return 30; |
star297 | 0:0e93e95bab96 | 439 | } |
star297 | 0:0e93e95bab96 | 440 | int OLED32028P1T::columns(){ |
star297 | 0:0e93e95bab96 | 441 | return 55; |
star297 | 0:0e93e95bab96 | 442 | } |
star297 | 0:0e93e95bab96 | 443 | int OLED32028P1T::_getc(){ |
star297 | 0:0e93e95bab96 | 444 | return -1; |
star297 | 0:0e93e95bab96 | 445 | } |