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:
Tue May 03 08:13:05 2016 +0000
Revision:
2:efef4231b922
Parent:
0:414a9e6fed37
Child:
3:db1141757323
IT LIVES!!; Well actually this is the first time it compiled with no errors or warnings.

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 2:efef4231b922 55
oliverb 2:efef4231b922 56
oliverb 2:efef4231b922 57 void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
oliverb 2:efef4231b922 58 uint8_t icons[NUMFLAKES][3];
oliverb 2:efef4231b922 59 srand(666); // whatever seed
oliverb 2:efef4231b922 60
oliverb 2:efef4231b922 61 // initialize
oliverb 2:efef4231b922 62 for (uint8_t f=0; f< NUMFLAKES; f++) {
oliverb 2:efef4231b922 63 icons[f][XPOS] = rand() % display.width();
oliverb 2:efef4231b922 64 icons[f][YPOS] = 0;
oliverb 2:efef4231b922 65 icons[f][DELTAY] = rand() % 5 + 1;
oliverb 2:efef4231b922 66
oliverb 2:efef4231b922 67 /* Serial.print("x: ");
oliverb 2:efef4231b922 68 Serial.print(icons[f][XPOS], DEC);
oliverb 2:efef4231b922 69 Serial.print(" y: ");
oliverb 2:efef4231b922 70 Serial.print(icons[f][YPOS], DEC);
oliverb 2:efef4231b922 71 Serial.print(" dy: ");
oliverb 2:efef4231b922 72 Serial.println(icons[f][DELTAY], DEC);
oliverb 2:efef4231b922 73 */ }
oliverb 2:efef4231b922 74
oliverb 2:efef4231b922 75 while (1) {
oliverb 2:efef4231b922 76 // draw each icon
oliverb 2:efef4231b922 77 for (uint8_t f=0; f< NUMFLAKES; f++) {
oliverb 2:efef4231b922 78 display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE);
oliverb 2:efef4231b922 79 }
oliverb 2:efef4231b922 80 wait_ms(200);
oliverb 2:efef4231b922 81
oliverb 2:efef4231b922 82 // then erase it + move it
oliverb 2:efef4231b922 83 for (uint8_t f=0; f< NUMFLAKES; f++) {
oliverb 2:efef4231b922 84 display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK);
oliverb 2:efef4231b922 85 // move it
oliverb 2:efef4231b922 86 icons[f][YPOS] += icons[f][DELTAY];
oliverb 2:efef4231b922 87 // if its gone, reinit
oliverb 2:efef4231b922 88 if (icons[f][YPOS] > display.height()) {
oliverb 2:efef4231b922 89 icons[f][XPOS] = rand() % display.width();
oliverb 2:efef4231b922 90 icons[f][YPOS] = 0;
oliverb 2:efef4231b922 91 icons[f][DELTAY] = rand() % 5 + 1;
oliverb 2:efef4231b922 92 }
oliverb 2:efef4231b922 93 }
oliverb 2:efef4231b922 94 }
oliverb 2:efef4231b922 95 }
oliverb 2:efef4231b922 96
oliverb 2:efef4231b922 97
oliverb 2:efef4231b922 98 void testdrawchar(void) {
oliverb 2:efef4231b922 99 display.setTextSize(1);
oliverb 2:efef4231b922 100 display.setTextColor(WHITE);
oliverb 2:efef4231b922 101 display.setCursor(0,0);
oliverb 2:efef4231b922 102
oliverb 2:efef4231b922 103 for (uint8_t i=0; i < 168; i++) {
oliverb 2:efef4231b922 104 if (i == '\n') continue;
oliverb 2:efef4231b922 105 display.putc(i);
oliverb 2:efef4231b922 106 //if ((i > 0) && (i % 14 == 0))
oliverb 2:efef4231b922 107 //display.println();
oliverb 2:efef4231b922 108 }
oliverb 2:efef4231b922 109 }
oliverb 2:efef4231b922 110
oliverb 2:efef4231b922 111 void testdrawcircle(void) {
oliverb 2:efef4231b922 112 for (uint8_t i=0; i<display.height(); i+=2) {
oliverb 2:efef4231b922 113 display.drawCircle(display.width()/2, display.height()/2, i, WHITE);
oliverb 2:efef4231b922 114 }
oliverb 2:efef4231b922 115 }
oliverb 2:efef4231b922 116
oliverb 2:efef4231b922 117 void testfillrect(void) {
oliverb 2:efef4231b922 118 uint8_t color = 1;
oliverb 2:efef4231b922 119 for (uint8_t i=0; i<display.height()/2; i+=3) {
oliverb 2:efef4231b922 120 // alternate colors
oliverb 2:efef4231b922 121 display.fillRect(i, i, display.width()-i*2, display.height()-i*2, color%2);
oliverb 2:efef4231b922 122 color++;
oliverb 2:efef4231b922 123 }
oliverb 2:efef4231b922 124 }
oliverb 2:efef4231b922 125
oliverb 2:efef4231b922 126 void testdrawtriangle(void) {
oliverb 2:efef4231b922 127 for (int16_t i=0; i<min(display.width(),display.height())/2; i+=5) {
oliverb 2:efef4231b922 128 display.drawTriangle(display.width()/2, display.height()/2-i,
oliverb 2:efef4231b922 129 display.width()/2-i, display.height()/2+i,
oliverb 2:efef4231b922 130 display.width()/2+i, display.height()/2+i, WHITE);
oliverb 2:efef4231b922 131 }
oliverb 2:efef4231b922 132 }
oliverb 2:efef4231b922 133
oliverb 2:efef4231b922 134 void testfilltriangle(void) {
oliverb 2:efef4231b922 135 uint8_t color = WHITE;
oliverb 2:efef4231b922 136 for (int16_t i=min(display.width(),display.height())/2; i>0; i-=5) {
oliverb 2:efef4231b922 137 display.fillTriangle(display.width()/2, display.height()/2-i,
oliverb 2:efef4231b922 138 display.width()/2-i, display.height()/2+i,
oliverb 2:efef4231b922 139 display.width()/2+i, display.height()/2+i, color);
oliverb 2:efef4231b922 140 if (color == BLACK) color = WHITE;
oliverb 2:efef4231b922 141 else color = BLACK;
oliverb 2:efef4231b922 142 }
oliverb 2:efef4231b922 143 }
oliverb 0:414a9e6fed37 144
oliverb 2:efef4231b922 145 void testdrawroundrect(void) {
oliverb 2:efef4231b922 146 for (uint8_t i=0; i<display.height()/4; i+=2) {
oliverb 2:efef4231b922 147 display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, WHITE);
oliverb 2:efef4231b922 148 }
oliverb 2:efef4231b922 149 }
oliverb 2:efef4231b922 150
oliverb 2:efef4231b922 151 void testfillroundrect(void) {
oliverb 2:efef4231b922 152 uint8_t color = WHITE;
oliverb 2:efef4231b922 153 for (uint8_t i=0; i<display.height()/4-2; i+=2) {
oliverb 2:efef4231b922 154 display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, color);
oliverb 2:efef4231b922 155 if (color == BLACK) color = WHITE;
oliverb 2:efef4231b922 156 else color = BLACK;
oliverb 2:efef4231b922 157 }
oliverb 2:efef4231b922 158 }
oliverb 2:efef4231b922 159
oliverb 2:efef4231b922 160 void testdrawrect(void) {
oliverb 2:efef4231b922 161 for (uint8_t i=0; i<display.height()/2; i+=2) {
oliverb 2:efef4231b922 162 display.drawRect(i, i, display.width()-2*i, display.height()-2*i, WHITE);
oliverb 2:efef4231b922 163 }
oliverb 2:efef4231b922 164 }
oliverb 2:efef4231b922 165
oliverb 2:efef4231b922 166 void testdrawline() {
oliverb 2:efef4231b922 167 for (uint8_t i=0; i<display.width(); i+=4) {
oliverb 2:efef4231b922 168 display.drawLine(0, 0, i, display.height()-1, WHITE);
oliverb 2:efef4231b922 169 }
oliverb 2:efef4231b922 170 for (uint8_t i=0; i<display.height(); i+=4) {
oliverb 2:efef4231b922 171 display.drawLine(0, 0, display.width()-1, i, WHITE);
oliverb 2:efef4231b922 172 }
oliverb 2:efef4231b922 173 wait_ms(250);
oliverb 2:efef4231b922 174
oliverb 2:efef4231b922 175 display.clearDisplay();
oliverb 2:efef4231b922 176 for (uint8_t i=0; i<display.width(); i+=4) {
oliverb 2:efef4231b922 177 display.drawLine(0, display.height()-1, i, 0, WHITE);
oliverb 2:efef4231b922 178 }
oliverb 2:efef4231b922 179 for (int8_t i=display.height()-1; i>=0; i-=4) {
oliverb 2:efef4231b922 180 display.drawLine(0, display.height()-1, display.width()-1, i, WHITE);
oliverb 2:efef4231b922 181 }
oliverb 2:efef4231b922 182 wait_ms(250);
oliverb 2:efef4231b922 183
oliverb 2:efef4231b922 184 display.clearDisplay();
oliverb 2:efef4231b922 185 for (int8_t i=display.width()-1; i>=0; i-=4) {
oliverb 2:efef4231b922 186 display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE);
oliverb 2:efef4231b922 187 }
oliverb 2:efef4231b922 188 for (int8_t i=display.height()-1; i>=0; i-=4) {
oliverb 2:efef4231b922 189 display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE);
oliverb 2:efef4231b922 190 }
oliverb 2:efef4231b922 191 wait_ms(250);
oliverb 2:efef4231b922 192
oliverb 2:efef4231b922 193 display.clearDisplay();
oliverb 2:efef4231b922 194 for (uint8_t i=0; i<display.height(); i+=4) {
oliverb 2:efef4231b922 195 display.drawLine(display.width()-1, 0, 0, i, WHITE);
oliverb 2:efef4231b922 196 }
oliverb 2:efef4231b922 197 for (uint8_t i=0; i<display.width(); i+=4) {
oliverb 2:efef4231b922 198 display.drawLine(display.width()-1, 0, i, display.height()-1, WHITE);
oliverb 2:efef4231b922 199 }
oliverb 2:efef4231b922 200 wait_ms(250);
oliverb 2:efef4231b922 201 }
oliverb 2:efef4231b922 202
oliverb 2:efef4231b922 203 int main() {
oliverb 2:efef4231b922 204 // Serial.begin(9600);
oliverb 2:efef4231b922 205
oliverb 2:efef4231b922 206 display.begin();
oliverb 2:efef4231b922 207 // init done
oliverb 2:efef4231b922 208
oliverb 2:efef4231b922 209 wait_ms(2000);
oliverb 2:efef4231b922 210 display.clearDisplay(); // clears the screen and buffer
oliverb 2:efef4231b922 211 /*
oliverb 2:efef4231b922 212 display.drawPixel(20, 20, WHITE);
oliverb 2:efef4231b922 213
oliverb 2:efef4231b922 214 display.clearDisplay();
oliverb 2:efef4231b922 215
oliverb 2:efef4231b922 216 // draw many lines
oliverb 2:efef4231b922 217 testdrawline();
oliverb 2:efef4231b922 218 delay(2000);
oliverb 2:efef4231b922 219 display.clearDisplay();
oliverb 2:efef4231b922 220 // draw rectangles
oliverb 2:efef4231b922 221 testdrawrect();
oliverb 2:efef4231b922 222 delay(2000);
oliverb 2:efef4231b922 223 display.clearDisplay();
oliverb 2:efef4231b922 224
oliverb 2:efef4231b922 225 // draw multiple rectangles
oliverb 2:efef4231b922 226 testfillrect();
oliverb 2:efef4231b922 227 delay(2000);
oliverb 2:efef4231b922 228 display.clearDisplay();
oliverb 2:efef4231b922 229
oliverb 2:efef4231b922 230 // draw mulitple circles
oliverb 2:efef4231b922 231 testdrawcircle();
oliverb 2:efef4231b922 232 delay(2000);
oliverb 2:efef4231b922 233 display.clearDisplay();
oliverb 2:efef4231b922 234 */
oliverb 2:efef4231b922 235
oliverb 2:efef4231b922 236 // draw a circle, 10 pixel radius
oliverb 2:efef4231b922 237 display.fillCircle(20, 20, 20, WHITE);
oliverb 2:efef4231b922 238 wait_ms(2000);
oliverb 2:efef4231b922 239
oliverb 2:efef4231b922 240 display.clearDisplay();
oliverb 2:efef4231b922 241 testdrawroundrect();
oliverb 2:efef4231b922 242 wait_ms(2000);
oliverb 2:efef4231b922 243 display.clearDisplay();
oliverb 2:efef4231b922 244
oliverb 2:efef4231b922 245 testfillroundrect();
oliverb 2:efef4231b922 246 wait_ms(2000);
oliverb 2:efef4231b922 247 display.clearDisplay();
oliverb 2:efef4231b922 248
oliverb 2:efef4231b922 249 testdrawtriangle();
oliverb 2:efef4231b922 250 wait_ms(2000);
oliverb 2:efef4231b922 251 display.clearDisplay();
oliverb 2:efef4231b922 252
oliverb 2:efef4231b922 253 testfilltriangle();
oliverb 2:efef4231b922 254 wait_ms(2000);
oliverb 2:efef4231b922 255 display.clearDisplay();
oliverb 2:efef4231b922 256
oliverb 2:efef4231b922 257 // draw the first ~12 characters in the font
oliverb 2:efef4231b922 258 testdrawchar();
oliverb 2:efef4231b922 259 wait_ms(2000);
oliverb 2:efef4231b922 260 display.clearDisplay();
oliverb 2:efef4231b922 261
oliverb 2:efef4231b922 262 // text display tests
oliverb 2:efef4231b922 263 display.setTextSize(1);
oliverb 2:efef4231b922 264 display.setTextColor(WHITE);
oliverb 2:efef4231b922 265 display.setCursor(0,0);
oliverb 2:efef4231b922 266 display.printf("Hello, world!/n");
oliverb 2:efef4231b922 267 display.setTextColor(BLACK, WHITE); // 'inverted' text
oliverb 2:efef4231b922 268 display.printf("%f",3.141592);
oliverb 2:efef4231b922 269 display.setTextSize(2);
oliverb 2:efef4231b922 270 display.setTextColor(WHITE);
oliverb 2:efef4231b922 271 display.printf("0x%8x",0xDEADBEEF);
oliverb 2:efef4231b922 272 wait_ms(2000);
oliverb 2:efef4231b922 273
oliverb 2:efef4231b922 274 // miniature bitmap display
oliverb 2:efef4231b922 275 display.clearDisplay();
oliverb 2:efef4231b922 276 display.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1);
oliverb 2:efef4231b922 277
oliverb 2:efef4231b922 278 wait_ms(2000);
oliverb 2:efef4231b922 279 display.clearDisplay();
oliverb 2:efef4231b922 280 display.drawBitmap(0, 0, adabmp, 128, 64, 1);
oliverb 2:efef4231b922 281
oliverb 2:efef4231b922 282 }
oliverb 2:efef4231b922 283
oliverb 2:efef4231b922 284
oliverb 2:efef4231b922 285 void loop() {
oliverb 2:efef4231b922 286
oliverb 2:efef4231b922 287 }