Import of the Adafruit GP9002 VFD driver, demo and GFX library Driver tweaked to use 2MHz SPI not bitbang, also display right way up? Demo tweaked to display test bitmap GFX library tweaked to speed up filled triangles Note BSD licensed-see license.txt

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

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 }