Demo of GP9002 VFD in grayscale mode

Dependencies:   Adafruit-GFX-Library-master Adafruit-GP9002-Grayscale-VFD-Library mbed

Fork of GP9002adafruit by Oliver Broad

Committer:
oliverb
Date:
Mon May 09 09:30:06 2016 +0000
Revision:
9:206446cc934e
Parent:
8:3de7c8c0207a
Moved the bit reverse LUT into a library of its own

Who changed what in which revision?

UserRevisionLine numberNew contents of line
oliverb 2:efef4231b922 1 #include <SPI.h>
oliverb 2:efef4231b922 2 #include "Adafruit_GFX.h"
oliverb 2:efef4231b922 3 #include "Adafruit_GP9002.h"
oliverb 2:efef4231b922 4
oliverb 2:efef4231b922 5 #define _MOSI p5 // VFD PIN#12
oliverb 2:efef4231b922 6 #define _MISO p6 // VFD PIN#8
oliverb 2:efef4231b922 7 #define _CLK p7 // VFD PIN#11
oliverb 2:efef4231b922 8 #define _CS p8 // VFD PIN#13
oliverb 2:efef4231b922 9 #define _DC p22 // VFD PIN#14
oliverb 2:efef4231b922 10 // connect VFD #15, #16, #17 to 5V
oliverb 2:efef4231b922 11 // connect VFD #9 #18 #19 #20 to ground
oliverb 2:efef4231b922 12 SPI SPIport(_MOSI,_MISO,_CLK);
oliverb 2:efef4231b922 13 Adafruit_GP9002 display = Adafruit_GP9002(SPIport, _CS, _DC);
oliverb 2:efef4231b922 14
oliverb 2:efef4231b922 15 // if using hardware SPI on an UNO or other classic Arduino, the pinouts are the same as
oliverb 2:efef4231b922 16 // above.
oliverb 2:efef4231b922 17 //Adafruit_GP9002 display = Adafruit_GP9002(_CS, _DC);
oliverb 2:efef4231b922 18
oliverb 2:efef4231b922 19 #ifndef min
oliverb 2:efef4231b922 20 #define min(a,b) ((a)<(b)?(a):(b))
oliverb 2:efef4231b922 21 #endif
oliverb 2:efef4231b922 22 #ifndef max
oliverb 2:efef4231b922 23 #define max(a,b) ((a)>(b)?(a):(b))
oliverb 2:efef4231b922 24 #endif
oliverb 2:efef4231b922 25
oliverb 2:efef4231b922 26
oliverb 2:efef4231b922 27 #define NUMFLAKES 10
oliverb 2:efef4231b922 28 #define XPOS 0
oliverb 2:efef4231b922 29 #define YPOS 1
oliverb 2:efef4231b922 30 #define DELTAY 2
oliverb 2:efef4231b922 31
oliverb 2:efef4231b922 32
oliverb 2:efef4231b922 33 #define LOGO16_GLCD_HEIGHT 16
oliverb 2:efef4231b922 34 #define LOGO16_GLCD_WIDTH 16
oliverb 2:efef4231b922 35 const unsigned char logo16_glcd_bmp[] =
oliverb 2:efef4231b922 36 { 0b00000000, 0b11000000,
oliverb 2:efef4231b922 37 0b00000001, 0b11000000,
oliverb 2:efef4231b922 38 0b00000001, 0b11000000,
oliverb 2:efef4231b922 39 0b00000011, 0b11100000,
oliverb 2:efef4231b922 40 0b11110011, 0b11100000,
oliverb 2:efef4231b922 41 0b11111110, 0b11111000,
oliverb 2:efef4231b922 42 0b01111110, 0b11111111,
oliverb 2:efef4231b922 43 0b00110011, 0b10011111,
oliverb 2:efef4231b922 44 0b00011111, 0b11111100,
oliverb 2:efef4231b922 45 0b00001101, 0b01110000,
oliverb 2:efef4231b922 46 0b00011011, 0b10100000,
oliverb 2:efef4231b922 47 0b00111111, 0b11100000,
oliverb 2:efef4231b922 48 0b00111111, 0b11110000,
oliverb 2:efef4231b922 49 0b01111100, 0b11110000,
oliverb 2:efef4231b922 50 0b01110000, 0b01110000,
oliverb 2:efef4231b922 51 0b00000000, 0b00110000 };
oliverb 2:efef4231b922 52
oliverb 2:efef4231b922 53 #include "adabmp.c"
oliverb 2:efef4231b922 54
oliverb 3:db1141757323 55 extern const unsigned char BitReverseTable256[];
oliverb 2:efef4231b922 56
oliverb 2:efef4231b922 57
oliverb 2:efef4231b922 58 void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
oliverb 2:efef4231b922 59 uint8_t icons[NUMFLAKES][3];
oliverb 2:efef4231b922 60 srand(666); // whatever seed
oliverb 2:efef4231b922 61
oliverb 2:efef4231b922 62 // initialize
oliverb 2:efef4231b922 63 for (uint8_t f=0; f< NUMFLAKES; f++) {
oliverb 2:efef4231b922 64 icons[f][XPOS] = rand() % display.width();
oliverb 2:efef4231b922 65 icons[f][YPOS] = 0;
oliverb 2:efef4231b922 66 icons[f][DELTAY] = rand() % 5 + 1;
oliverb 2:efef4231b922 67
oliverb 2:efef4231b922 68 /* Serial.print("x: ");
oliverb 2:efef4231b922 69 Serial.print(icons[f][XPOS], DEC);
oliverb 2:efef4231b922 70 Serial.print(" y: ");
oliverb 2:efef4231b922 71 Serial.print(icons[f][YPOS], DEC);
oliverb 2:efef4231b922 72 Serial.print(" dy: ");
oliverb 2:efef4231b922 73 Serial.println(icons[f][DELTAY], DEC);
oliverb 2:efef4231b922 74 */ }
oliverb 2:efef4231b922 75
oliverb 2:efef4231b922 76 while (1) {
oliverb 2:efef4231b922 77 // draw each icon
oliverb 2:efef4231b922 78 for (uint8_t f=0; f< NUMFLAKES; f++) {
oliverb 2:efef4231b922 79 display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE);
oliverb 2:efef4231b922 80 }
oliverb 2:efef4231b922 81 wait_ms(200);
oliverb 2:efef4231b922 82
oliverb 2:efef4231b922 83 // then erase it + move it
oliverb 2:efef4231b922 84 for (uint8_t f=0; f< NUMFLAKES; f++) {
oliverb 2:efef4231b922 85 display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK);
oliverb 2:efef4231b922 86 // move it
oliverb 2:efef4231b922 87 icons[f][YPOS] += icons[f][DELTAY];
oliverb 2:efef4231b922 88 // if its gone, reinit
oliverb 2:efef4231b922 89 if (icons[f][YPOS] > display.height()) {
oliverb 2:efef4231b922 90 icons[f][XPOS] = rand() % display.width();
oliverb 2:efef4231b922 91 icons[f][YPOS] = 0;
oliverb 2:efef4231b922 92 icons[f][DELTAY] = rand() % 5 + 1;
oliverb 2:efef4231b922 93 }
oliverb 2:efef4231b922 94 }
oliverb 2:efef4231b922 95 }
oliverb 2:efef4231b922 96 }
oliverb 2:efef4231b922 97
oliverb 2:efef4231b922 98
oliverb 2:efef4231b922 99 void testdrawchar(void) {
oliverb 2:efef4231b922 100 display.setTextSize(1);
oliverb 2:efef4231b922 101 display.setTextColor(WHITE);
oliverb 2:efef4231b922 102 display.setCursor(0,0);
oliverb 2:efef4231b922 103
oliverb 2:efef4231b922 104 for (uint8_t i=0; i < 168; i++) {
oliverb 2:efef4231b922 105 if (i == '\n') continue;
oliverb 2:efef4231b922 106 display.putc(i);
oliverb 2:efef4231b922 107 //if ((i > 0) && (i % 14 == 0))
oliverb 2:efef4231b922 108 //display.println();
oliverb 2:efef4231b922 109 }
oliverb 2:efef4231b922 110 }
oliverb 2:efef4231b922 111
oliverb 2:efef4231b922 112 void testdrawcircle(void) {
oliverb 2:efef4231b922 113 for (uint8_t i=0; i<display.height(); i+=2) {
oliverb 2:efef4231b922 114 display.drawCircle(display.width()/2, display.height()/2, i, WHITE);
oliverb 2:efef4231b922 115 }
oliverb 2:efef4231b922 116 }
oliverb 2:efef4231b922 117
oliverb 2:efef4231b922 118 void testfillrect(void) {
oliverb 2:efef4231b922 119 uint8_t color = 1;
oliverb 2:efef4231b922 120 for (uint8_t i=0; i<display.height()/2; i+=3) {
oliverb 2:efef4231b922 121 // alternate colors
oliverb 6:d576976977a5 122 display.fillRect(i, i, display.width()-i*2, display.height()-i*2, color%4);
oliverb 2:efef4231b922 123 color++;
oliverb 2:efef4231b922 124 }
oliverb 2:efef4231b922 125 }
oliverb 2:efef4231b922 126
oliverb 2:efef4231b922 127 void testdrawtriangle(void) {
oliverb 2:efef4231b922 128 for (int16_t i=0; i<min(display.width(),display.height())/2; i+=5) {
oliverb 2:efef4231b922 129 display.drawTriangle(display.width()/2, display.height()/2-i,
oliverb 2:efef4231b922 130 display.width()/2-i, display.height()/2+i,
oliverb 2:efef4231b922 131 display.width()/2+i, display.height()/2+i, WHITE);
oliverb 2:efef4231b922 132 }
oliverb 2:efef4231b922 133 }
oliverb 2:efef4231b922 134
oliverb 2:efef4231b922 135 void testfilltriangle(void) {
oliverb 6:d576976977a5 136 uint8_t color = 3;
oliverb 2:efef4231b922 137 for (int16_t i=min(display.width(),display.height())/2; i>0; i-=5) {
oliverb 2:efef4231b922 138 display.fillTriangle(display.width()/2, display.height()/2-i,
oliverb 2:efef4231b922 139 display.width()/2-i, display.height()/2+i,
oliverb 2:efef4231b922 140 display.width()/2+i, display.height()/2+i, color);
oliverb 6:d576976977a5 141 if (color) color--;
oliverb 6:d576976977a5 142 else color = 3;
oliverb 2:efef4231b922 143 }
oliverb 2:efef4231b922 144 }
oliverb 0:414a9e6fed37 145
oliverb 2:efef4231b922 146 void testdrawroundrect(void) {
oliverb 3:db1141757323 147 for (uint8_t i=2; i<display.height()/4; i+=2) {
oliverb 6:d576976977a5 148 display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, 3);
oliverb 2:efef4231b922 149 }
oliverb 2:efef4231b922 150 }
oliverb 2:efef4231b922 151
oliverb 2:efef4231b922 152 void testfillroundrect(void) {
oliverb 2:efef4231b922 153 uint8_t color = WHITE;
oliverb 2:efef4231b922 154 for (uint8_t i=0; i<display.height()/4-2; i+=2) {
oliverb 2:efef4231b922 155 display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, color);
oliverb 6:d576976977a5 156 if (color) color--;
oliverb 6:d576976977a5 157 else color = 3;
oliverb 2:efef4231b922 158 }
oliverb 2:efef4231b922 159 }
oliverb 2:efef4231b922 160
oliverb 2:efef4231b922 161 void testdrawrect(void) {
oliverb 2:efef4231b922 162 for (uint8_t i=0; i<display.height()/2; i+=2) {
oliverb 2:efef4231b922 163 display.drawRect(i, i, display.width()-2*i, display.height()-2*i, WHITE);
oliverb 2:efef4231b922 164 }
oliverb 2:efef4231b922 165 }
oliverb 2:efef4231b922 166
oliverb 2:efef4231b922 167 void testdrawline() {
oliverb 2:efef4231b922 168 for (uint8_t i=0; i<display.width(); i+=4) {
oliverb 2:efef4231b922 169 display.drawLine(0, 0, i, display.height()-1, WHITE);
oliverb 2:efef4231b922 170 }
oliverb 2:efef4231b922 171 for (uint8_t i=0; i<display.height(); i+=4) {
oliverb 2:efef4231b922 172 display.drawLine(0, 0, display.width()-1, i, WHITE);
oliverb 2:efef4231b922 173 }
oliverb 2:efef4231b922 174 wait_ms(250);
oliverb 2:efef4231b922 175
oliverb 2:efef4231b922 176 display.clearDisplay();
oliverb 2:efef4231b922 177 for (uint8_t i=0; i<display.width(); i+=4) {
oliverb 2:efef4231b922 178 display.drawLine(0, display.height()-1, i, 0, WHITE);
oliverb 2:efef4231b922 179 }
oliverb 2:efef4231b922 180 for (int8_t i=display.height()-1; i>=0; i-=4) {
oliverb 2:efef4231b922 181 display.drawLine(0, display.height()-1, display.width()-1, i, WHITE);
oliverb 2:efef4231b922 182 }
oliverb 2:efef4231b922 183 wait_ms(250);
oliverb 2:efef4231b922 184
oliverb 2:efef4231b922 185 display.clearDisplay();
oliverb 2:efef4231b922 186 for (int8_t i=display.width()-1; i>=0; i-=4) {
oliverb 2:efef4231b922 187 display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE);
oliverb 2:efef4231b922 188 }
oliverb 2:efef4231b922 189 for (int8_t i=display.height()-1; i>=0; i-=4) {
oliverb 2:efef4231b922 190 display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE);
oliverb 2:efef4231b922 191 }
oliverb 2:efef4231b922 192 wait_ms(250);
oliverb 2:efef4231b922 193
oliverb 2:efef4231b922 194 display.clearDisplay();
oliverb 2:efef4231b922 195 for (uint8_t i=0; i<display.height(); i+=4) {
oliverb 2:efef4231b922 196 display.drawLine(display.width()-1, 0, 0, i, WHITE);
oliverb 2:efef4231b922 197 }
oliverb 2:efef4231b922 198 for (uint8_t i=0; i<display.width(); i+=4) {
oliverb 2:efef4231b922 199 display.drawLine(display.width()-1, 0, i, display.height()-1, WHITE);
oliverb 2:efef4231b922 200 }
oliverb 2:efef4231b922 201 wait_ms(250);
oliverb 2:efef4231b922 202 }
oliverb 2:efef4231b922 203
oliverb 2:efef4231b922 204 int main() {
oliverb 2:efef4231b922 205 // Serial.begin(9600);
oliverb 2:efef4231b922 206
oliverb 2:efef4231b922 207 display.begin();
oliverb 2:efef4231b922 208 // init done
oliverb 2:efef4231b922 209
oliverb 3:db1141757323 210 // wait_ms(2000);
oliverb 6:d576976977a5 211 // display.clearDisplay(); // clears the screen and buffer redundant
oliverb 2:efef4231b922 212 /*
oliverb 3:db1141757323 213 display.drawPixel(10, 10, WHITE);
oliverb 2:efef4231b922 214 display.drawPixel(20, 20, WHITE);
oliverb 3:db1141757323 215 wait_ms(2000);
oliverb 2:efef4231b922 216
oliverb 2:efef4231b922 217 display.clearDisplay();
oliverb 2:efef4231b922 218
oliverb 2:efef4231b922 219 // draw many lines
oliverb 2:efef4231b922 220 testdrawline();
oliverb 2:efef4231b922 221 delay(2000);
oliverb 2:efef4231b922 222 display.clearDisplay();
oliverb 2:efef4231b922 223 // draw rectangles
oliverb 2:efef4231b922 224 testdrawrect();
oliverb 2:efef4231b922 225 delay(2000);
oliverb 2:efef4231b922 226 display.clearDisplay();
oliverb 2:efef4231b922 227
oliverb 2:efef4231b922 228 // draw multiple rectangles
oliverb 2:efef4231b922 229 testfillrect();
oliverb 2:efef4231b922 230 delay(2000);
oliverb 2:efef4231b922 231 display.clearDisplay();
oliverb 2:efef4231b922 232
oliverb 2:efef4231b922 233 // draw mulitple circles
oliverb 2:efef4231b922 234 testdrawcircle();
oliverb 2:efef4231b922 235 delay(2000);
oliverb 2:efef4231b922 236 display.clearDisplay();
oliverb 2:efef4231b922 237 */
oliverb 2:efef4231b922 238
oliverb 2:efef4231b922 239 // draw a circle, 10 pixel radius
oliverb 2:efef4231b922 240 display.fillCircle(20, 20, 20, WHITE);
oliverb 2:efef4231b922 241 wait_ms(2000);
oliverb 2:efef4231b922 242
oliverb 2:efef4231b922 243 display.clearDisplay();
oliverb 2:efef4231b922 244 testdrawroundrect();
oliverb 2:efef4231b922 245 wait_ms(2000);
oliverb 2:efef4231b922 246 display.clearDisplay();
oliverb 2:efef4231b922 247
oliverb 2:efef4231b922 248 testfillroundrect();
oliverb 2:efef4231b922 249 wait_ms(2000);
oliverb 2:efef4231b922 250 display.clearDisplay();
oliverb 2:efef4231b922 251
oliverb 2:efef4231b922 252 testdrawtriangle();
oliverb 2:efef4231b922 253 wait_ms(2000);
oliverb 2:efef4231b922 254 display.clearDisplay();
oliverb 2:efef4231b922 255
oliverb 2:efef4231b922 256 testfilltriangle();
oliverb 2:efef4231b922 257 wait_ms(2000);
oliverb 2:efef4231b922 258 display.clearDisplay();
oliverb 2:efef4231b922 259
oliverb 2:efef4231b922 260 // draw the first ~12 characters in the font
oliverb 2:efef4231b922 261 testdrawchar();
oliverb 2:efef4231b922 262 wait_ms(2000);
oliverb 2:efef4231b922 263 display.clearDisplay();
oliverb 2:efef4231b922 264
oliverb 2:efef4231b922 265 // text display tests
oliverb 2:efef4231b922 266 display.setTextSize(1);
oliverb 2:efef4231b922 267 display.setTextColor(WHITE);
oliverb 2:efef4231b922 268 display.setCursor(0,0);
oliverb 3:db1141757323 269 display.printf("Hello, world!\n");
oliverb 2:efef4231b922 270 display.setTextColor(BLACK, WHITE); // 'inverted' text
oliverb 2:efef4231b922 271 display.printf("%f",3.141592);
oliverb 2:efef4231b922 272 display.setTextSize(2);
oliverb 2:efef4231b922 273 display.setTextColor(WHITE);
oliverb 2:efef4231b922 274 display.printf("0x%8x",0xDEADBEEF);
oliverb 2:efef4231b922 275 wait_ms(2000);
oliverb 2:efef4231b922 276
oliverb 2:efef4231b922 277 // miniature bitmap display
oliverb 2:efef4231b922 278 display.clearDisplay();
oliverb 2:efef4231b922 279 display.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1);
oliverb 2:efef4231b922 280
oliverb 2:efef4231b922 281 wait_ms(2000);
oliverb 8:3de7c8c0207a 282 display.clearDisplay();
oliverb 8:3de7c8c0207a 283 /* display.command(GP9002_ADDRINCR);
oliverb 3:db1141757323 284 display.command(GP9002_ADDRL);
oliverb 3:db1141757323 285 display.dataWrite(0x00);
oliverb 3:db1141757323 286 display.command(GP9002_ADDRH);
oliverb 3:db1141757323 287 display.dataWrite(0x00);
oliverb 3:db1141757323 288 display.command(GP9002_DATAWRITE);
oliverb 8:3de7c8c0207a 289 */
oliverb 8:3de7c8c0207a 290 int x=0;
oliverb 8:3de7c8c0207a 291 int y;
oliverb 8:3de7c8c0207a 292 int byte;
oliverb 8:3de7c8c0207a 293 for(uint32_t count2=0; count2<128; count2++) {
oliverb 8:3de7c8c0207a 294 y=0;
oliverb 8:3de7c8c0207a 295 for(uint32_t count=count2; count<0x400; count+=128) {
oliverb 8:3de7c8c0207a 296 byte=adabmp[count];
oliverb 8:3de7c8c0207a 297 for(int count3=0; count3<8;count3++) {
oliverb 8:3de7c8c0207a 298 if (byte & 0x01) display.drawPixel(x,y,WHITE);
oliverb 8:3de7c8c0207a 299 byte >>=1;
oliverb 8:3de7c8c0207a 300 y++;
oliverb 8:3de7c8c0207a 301 }
oliverb 8:3de7c8c0207a 302 }
oliverb 8:3de7c8c0207a 303 x++;
oliverb 8:3de7c8c0207a 304 }
oliverb 8:3de7c8c0207a 305
oliverb 2:efef4231b922 306 }
oliverb 2:efef4231b922 307
oliverb 2:efef4231b922 308
oliverb 2:efef4231b922 309 void loop() {
oliverb 2:efef4231b922 310
oliverb 2:efef4231b922 311 }