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:
Mon May 02 11:24:17 2016 +0000
Revision:
0:414a9e6fed37
Child:
2:efef4231b922
Opening commit, currently program is for Arduino not MBED

Who changed what in which revision?

UserRevisionLine numberNew contents of line
oliverb 0:414a9e6fed37 1 #include <SPI.h>
oliverb 0:414a9e6fed37 2 #include "Adafruit_GFX.h"
oliverb 0:414a9e6fed37 3 #include "Adafruit_GP9002.h"
oliverb 0:414a9e6fed37 4
oliverb 0:414a9e6fed37 5 #define _MISO 12 // VFD PIN#8
oliverb 0:414a9e6fed37 6 #define _CLK 13 // VFD PIN#11
oliverb 0:414a9e6fed37 7 #define _MOSI 11 // VFD PIN#12
oliverb 0:414a9e6fed37 8 #define _CS 10 // VFD PIN#13
oliverb 0:414a9e6fed37 9 #define _DC 9 // VFD PIN#14
oliverb 0:414a9e6fed37 10 // connect VFD #15, #16, #17 to 5V
oliverb 0:414a9e6fed37 11 // connect VFD #9 #18 #19 #20 to ground
oliverb 0:414a9e6fed37 12
oliverb 0:414a9e6fed37 13 Adafruit_GP9002 display = Adafruit_GP9002(_CLK, _MISO, _MOSI, _CS, _DC);
oliverb 0:414a9e6fed37 14
oliverb 0:414a9e6fed37 15 // if using hardware SPI on an UNO or other classic Arduino, the pinouts are the same as
oliverb 0:414a9e6fed37 16 // above.
oliverb 0:414a9e6fed37 17 //Adafruit_GP9002 display = Adafruit_GP9002(_CS, _DC);
oliverb 0:414a9e6fed37 18
oliverb 0:414a9e6fed37 19
oliverb 0:414a9e6fed37 20 #define NUMFLAKES 10
oliverb 0:414a9e6fed37 21 #define XPOS 0
oliverb 0:414a9e6fed37 22 #define YPOS 1
oliverb 0:414a9e6fed37 23 #define DELTAY 2
oliverb 0:414a9e6fed37 24
oliverb 0:414a9e6fed37 25
oliverb 0:414a9e6fed37 26 #define LOGO16_GLCD_HEIGHT 16
oliverb 0:414a9e6fed37 27 #define LOGO16_GLCD_WIDTH 16
oliverb 0:414a9e6fed37 28 static unsigned char PROGMEM logo16_glcd_bmp[] =
oliverb 0:414a9e6fed37 29 { B00000000, B11000000,
oliverb 0:414a9e6fed37 30 B00000001, B11000000,
oliverb 0:414a9e6fed37 31 B00000001, B11000000,
oliverb 0:414a9e6fed37 32 B00000011, B11100000,
oliverb 0:414a9e6fed37 33 B11110011, B11100000,
oliverb 0:414a9e6fed37 34 B11111110, B11111000,
oliverb 0:414a9e6fed37 35 B01111110, B11111111,
oliverb 0:414a9e6fed37 36 B00110011, B10011111,
oliverb 0:414a9e6fed37 37 B00011111, B11111100,
oliverb 0:414a9e6fed37 38 B00001101, B01110000,
oliverb 0:414a9e6fed37 39 B00011011, B10100000,
oliverb 0:414a9e6fed37 40 B00111111, B11100000,
oliverb 0:414a9e6fed37 41 B00111111, B11110000,
oliverb 0:414a9e6fed37 42 B01111100, B11110000,
oliverb 0:414a9e6fed37 43 B01110000, B01110000,
oliverb 0:414a9e6fed37 44 B00000000, B00110000 };
oliverb 0:414a9e6fed37 45
oliverb 0:414a9e6fed37 46 #include "adabmp.c"
oliverb 0:414a9e6fed37 47
oliverb 0:414a9e6fed37 48 void setup() {
oliverb 0:414a9e6fed37 49 Serial.begin(9600);
oliverb 0:414a9e6fed37 50
oliverb 0:414a9e6fed37 51 display.begin();
oliverb 0:414a9e6fed37 52 // init done
oliverb 0:414a9e6fed37 53
oliverb 0:414a9e6fed37 54 delay(2000);
oliverb 0:414a9e6fed37 55 display.clearDisplay(); // clears the screen and buffer
oliverb 0:414a9e6fed37 56 /*
oliverb 0:414a9e6fed37 57 display.drawPixel(20, 20, WHITE);
oliverb 0:414a9e6fed37 58
oliverb 0:414a9e6fed37 59 display.clearDisplay();
oliverb 0:414a9e6fed37 60
oliverb 0:414a9e6fed37 61 // draw many lines
oliverb 0:414a9e6fed37 62 testdrawline();
oliverb 0:414a9e6fed37 63 delay(2000);
oliverb 0:414a9e6fed37 64 display.clearDisplay();
oliverb 0:414a9e6fed37 65 // draw rectangles
oliverb 0:414a9e6fed37 66 testdrawrect();
oliverb 0:414a9e6fed37 67 delay(2000);
oliverb 0:414a9e6fed37 68 display.clearDisplay();
oliverb 0:414a9e6fed37 69
oliverb 0:414a9e6fed37 70 // draw multiple rectangles
oliverb 0:414a9e6fed37 71 testfillrect();
oliverb 0:414a9e6fed37 72 delay(2000);
oliverb 0:414a9e6fed37 73 display.clearDisplay();
oliverb 0:414a9e6fed37 74
oliverb 0:414a9e6fed37 75 // draw mulitple circles
oliverb 0:414a9e6fed37 76 testdrawcircle();
oliverb 0:414a9e6fed37 77 delay(2000);
oliverb 0:414a9e6fed37 78 display.clearDisplay();
oliverb 0:414a9e6fed37 79 */
oliverb 0:414a9e6fed37 80
oliverb 0:414a9e6fed37 81 // draw a circle, 10 pixel radius
oliverb 0:414a9e6fed37 82 display.fillCircle(20, 20, 20, WHITE);
oliverb 0:414a9e6fed37 83 delay(2000);
oliverb 0:414a9e6fed37 84
oliverb 0:414a9e6fed37 85 display.clearDisplay();
oliverb 0:414a9e6fed37 86 testdrawroundrect();
oliverb 0:414a9e6fed37 87 delay(2000);
oliverb 0:414a9e6fed37 88 display.clearDisplay();
oliverb 0:414a9e6fed37 89
oliverb 0:414a9e6fed37 90 testfillroundrect();
oliverb 0:414a9e6fed37 91 delay(2000);
oliverb 0:414a9e6fed37 92 display.clearDisplay();
oliverb 0:414a9e6fed37 93
oliverb 0:414a9e6fed37 94 testdrawtriangle();
oliverb 0:414a9e6fed37 95 delay(2000);
oliverb 0:414a9e6fed37 96 display.clearDisplay();
oliverb 0:414a9e6fed37 97
oliverb 0:414a9e6fed37 98 testfilltriangle();
oliverb 0:414a9e6fed37 99 delay(2000);
oliverb 0:414a9e6fed37 100 display.clearDisplay();
oliverb 0:414a9e6fed37 101
oliverb 0:414a9e6fed37 102 // draw the first ~12 characters in the font
oliverb 0:414a9e6fed37 103 testdrawchar();
oliverb 0:414a9e6fed37 104 delay(2000);
oliverb 0:414a9e6fed37 105 display.clearDisplay();
oliverb 0:414a9e6fed37 106
oliverb 0:414a9e6fed37 107 // text display tests
oliverb 0:414a9e6fed37 108 display.setTextSize(1);
oliverb 0:414a9e6fed37 109 display.setTextColor(WHITE);
oliverb 0:414a9e6fed37 110 display.setCursor(0,0);
oliverb 0:414a9e6fed37 111 display.println("Hello, world!");
oliverb 0:414a9e6fed37 112 display.setTextColor(BLACK, WHITE); // 'inverted' text
oliverb 0:414a9e6fed37 113 display.println(3.141592);
oliverb 0:414a9e6fed37 114 display.setTextSize(2);
oliverb 0:414a9e6fed37 115 display.setTextColor(WHITE);
oliverb 0:414a9e6fed37 116 display.print("0x"); display.println(0xDEADBEEF, HEX);
oliverb 0:414a9e6fed37 117 delay(2000);
oliverb 0:414a9e6fed37 118
oliverb 0:414a9e6fed37 119 // miniature bitmap display
oliverb 0:414a9e6fed37 120 display.clearDisplay();
oliverb 0:414a9e6fed37 121 display.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1);
oliverb 0:414a9e6fed37 122
oliverb 0:414a9e6fed37 123 delay(1000);
oliverb 0:414a9e6fed37 124 display.clearDisplay();
oliverb 0:414a9e6fed37 125 display.drawBitmap(0, 0, adabmp, 128, 64, 1);
oliverb 0:414a9e6fed37 126
oliverb 0:414a9e6fed37 127 }
oliverb 0:414a9e6fed37 128
oliverb 0:414a9e6fed37 129
oliverb 0:414a9e6fed37 130 void loop() {
oliverb 0:414a9e6fed37 131
oliverb 0:414a9e6fed37 132 }
oliverb 0:414a9e6fed37 133
oliverb 0:414a9e6fed37 134
oliverb 0:414a9e6fed37 135 void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
oliverb 0:414a9e6fed37 136 uint8_t icons[NUMFLAKES][3];
oliverb 0:414a9e6fed37 137 srandom(666); // whatever seed
oliverb 0:414a9e6fed37 138
oliverb 0:414a9e6fed37 139 // initialize
oliverb 0:414a9e6fed37 140 for (uint8_t f=0; f< NUMFLAKES; f++) {
oliverb 0:414a9e6fed37 141 icons[f][XPOS] = random() % display.width();
oliverb 0:414a9e6fed37 142 icons[f][YPOS] = 0;
oliverb 0:414a9e6fed37 143 icons[f][DELTAY] = random() % 5 + 1;
oliverb 0:414a9e6fed37 144
oliverb 0:414a9e6fed37 145 Serial.print("x: ");
oliverb 0:414a9e6fed37 146 Serial.print(icons[f][XPOS], DEC);
oliverb 0:414a9e6fed37 147 Serial.print(" y: ");
oliverb 0:414a9e6fed37 148 Serial.print(icons[f][YPOS], DEC);
oliverb 0:414a9e6fed37 149 Serial.print(" dy: ");
oliverb 0:414a9e6fed37 150 Serial.println(icons[f][DELTAY], DEC);
oliverb 0:414a9e6fed37 151 }
oliverb 0:414a9e6fed37 152
oliverb 0:414a9e6fed37 153 while (1) {
oliverb 0:414a9e6fed37 154 // draw each icon
oliverb 0:414a9e6fed37 155 for (uint8_t f=0; f< NUMFLAKES; f++) {
oliverb 0:414a9e6fed37 156 display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE);
oliverb 0:414a9e6fed37 157 }
oliverb 0:414a9e6fed37 158 delay(200);
oliverb 0:414a9e6fed37 159
oliverb 0:414a9e6fed37 160 // then erase it + move it
oliverb 0:414a9e6fed37 161 for (uint8_t f=0; f< NUMFLAKES; f++) {
oliverb 0:414a9e6fed37 162 display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK);
oliverb 0:414a9e6fed37 163 // move it
oliverb 0:414a9e6fed37 164 icons[f][YPOS] += icons[f][DELTAY];
oliverb 0:414a9e6fed37 165 // if its gone, reinit
oliverb 0:414a9e6fed37 166 if (icons[f][YPOS] > display.height()) {
oliverb 0:414a9e6fed37 167 icons[f][XPOS] = random() % display.width();
oliverb 0:414a9e6fed37 168 icons[f][YPOS] = 0;
oliverb 0:414a9e6fed37 169 icons[f][DELTAY] = random() % 5 + 1;
oliverb 0:414a9e6fed37 170 }
oliverb 0:414a9e6fed37 171 }
oliverb 0:414a9e6fed37 172 }
oliverb 0:414a9e6fed37 173 }
oliverb 0:414a9e6fed37 174
oliverb 0:414a9e6fed37 175
oliverb 0:414a9e6fed37 176 void testdrawchar(void) {
oliverb 0:414a9e6fed37 177 display.setTextSize(1);
oliverb 0:414a9e6fed37 178 display.setTextColor(WHITE);
oliverb 0:414a9e6fed37 179 display.setCursor(0,0);
oliverb 0:414a9e6fed37 180
oliverb 0:414a9e6fed37 181 for (uint8_t i=0; i < 168; i++) {
oliverb 0:414a9e6fed37 182 if (i == '\n') continue;
oliverb 0:414a9e6fed37 183 display.write(i);
oliverb 0:414a9e6fed37 184 //if ((i > 0) && (i % 14 == 0))
oliverb 0:414a9e6fed37 185 //display.println();
oliverb 0:414a9e6fed37 186 }
oliverb 0:414a9e6fed37 187 }
oliverb 0:414a9e6fed37 188
oliverb 0:414a9e6fed37 189 void testdrawcircle(void) {
oliverb 0:414a9e6fed37 190 for (uint8_t i=0; i<display.height(); i+=2) {
oliverb 0:414a9e6fed37 191 display.drawCircle(display.width()/2, display.height()/2, i, WHITE);
oliverb 0:414a9e6fed37 192 }
oliverb 0:414a9e6fed37 193 }
oliverb 0:414a9e6fed37 194
oliverb 0:414a9e6fed37 195 void testfillrect(void) {
oliverb 0:414a9e6fed37 196 uint8_t color = 1;
oliverb 0:414a9e6fed37 197 for (uint8_t i=0; i<display.height()/2; i+=3) {
oliverb 0:414a9e6fed37 198 // alternate colors
oliverb 0:414a9e6fed37 199 display.fillRect(i, i, display.width()-i*2, display.height()-i*2, color%2);
oliverb 0:414a9e6fed37 200 color++;
oliverb 0:414a9e6fed37 201 }
oliverb 0:414a9e6fed37 202 }
oliverb 0:414a9e6fed37 203
oliverb 0:414a9e6fed37 204 void testdrawtriangle(void) {
oliverb 0:414a9e6fed37 205 for (int16_t i=0; i<min(display.width(),display.height())/2; i+=5) {
oliverb 0:414a9e6fed37 206 display.drawTriangle(display.width()/2, display.height()/2-i,
oliverb 0:414a9e6fed37 207 display.width()/2-i, display.height()/2+i,
oliverb 0:414a9e6fed37 208 display.width()/2+i, display.height()/2+i, WHITE);
oliverb 0:414a9e6fed37 209 }
oliverb 0:414a9e6fed37 210 }
oliverb 0:414a9e6fed37 211
oliverb 0:414a9e6fed37 212 void testfilltriangle(void) {
oliverb 0:414a9e6fed37 213 uint8_t color = WHITE;
oliverb 0:414a9e6fed37 214 for (int16_t i=min(display.width(),display.height())/2; i>0; i-=5) {
oliverb 0:414a9e6fed37 215 display.fillTriangle(display.width()/2, display.height()/2-i,
oliverb 0:414a9e6fed37 216 display.width()/2-i, display.height()/2+i,
oliverb 0:414a9e6fed37 217 display.width()/2+i, display.height()/2+i, color);
oliverb 0:414a9e6fed37 218 if (color == BLACK) color = WHITE;
oliverb 0:414a9e6fed37 219 else color = BLACK;
oliverb 0:414a9e6fed37 220 }
oliverb 0:414a9e6fed37 221 }
oliverb 0:414a9e6fed37 222
oliverb 0:414a9e6fed37 223 void testdrawroundrect(void) {
oliverb 0:414a9e6fed37 224 for (uint8_t i=0; i<display.height()/4; i+=2) {
oliverb 0:414a9e6fed37 225 display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, WHITE);
oliverb 0:414a9e6fed37 226 }
oliverb 0:414a9e6fed37 227 }
oliverb 0:414a9e6fed37 228
oliverb 0:414a9e6fed37 229 void testfillroundrect(void) {
oliverb 0:414a9e6fed37 230 uint8_t color = WHITE;
oliverb 0:414a9e6fed37 231 for (uint8_t i=0; i<display.height()/4-2; i+=2) {
oliverb 0:414a9e6fed37 232 display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, color);
oliverb 0:414a9e6fed37 233 if (color == BLACK) color = WHITE;
oliverb 0:414a9e6fed37 234 else color = BLACK;
oliverb 0:414a9e6fed37 235 }
oliverb 0:414a9e6fed37 236 }
oliverb 0:414a9e6fed37 237
oliverb 0:414a9e6fed37 238 void testdrawrect(void) {
oliverb 0:414a9e6fed37 239 for (uint8_t i=0; i<display.height()/2; i+=2) {
oliverb 0:414a9e6fed37 240 display.drawRect(i, i, display.width()-2*i, display.height()-2*i, WHITE);
oliverb 0:414a9e6fed37 241 }
oliverb 0:414a9e6fed37 242 }
oliverb 0:414a9e6fed37 243
oliverb 0:414a9e6fed37 244 void testdrawline() {
oliverb 0:414a9e6fed37 245 for (uint8_t i=0; i<display.width(); i+=4) {
oliverb 0:414a9e6fed37 246 display.drawLine(0, 0, i, display.height()-1, WHITE);
oliverb 0:414a9e6fed37 247 }
oliverb 0:414a9e6fed37 248 for (uint8_t i=0; i<display.height(); i+=4) {
oliverb 0:414a9e6fed37 249 display.drawLine(0, 0, display.width()-1, i, WHITE);
oliverb 0:414a9e6fed37 250 }
oliverb 0:414a9e6fed37 251 delay(250);
oliverb 0:414a9e6fed37 252
oliverb 0:414a9e6fed37 253 display.clearDisplay();
oliverb 0:414a9e6fed37 254 for (uint8_t i=0; i<display.width(); i+=4) {
oliverb 0:414a9e6fed37 255 display.drawLine(0, display.height()-1, i, 0, WHITE);
oliverb 0:414a9e6fed37 256 }
oliverb 0:414a9e6fed37 257 for (int8_t i=display.height()-1; i>=0; i-=4) {
oliverb 0:414a9e6fed37 258 display.drawLine(0, display.height()-1, display.width()-1, i, WHITE);
oliverb 0:414a9e6fed37 259 }
oliverb 0:414a9e6fed37 260 delay(250);
oliverb 0:414a9e6fed37 261
oliverb 0:414a9e6fed37 262 display.clearDisplay();
oliverb 0:414a9e6fed37 263 for (int8_t i=display.width()-1; i>=0; i-=4) {
oliverb 0:414a9e6fed37 264 display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE);
oliverb 0:414a9e6fed37 265 }
oliverb 0:414a9e6fed37 266 for (int8_t i=display.height()-1; i>=0; i-=4) {
oliverb 0:414a9e6fed37 267 display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE);
oliverb 0:414a9e6fed37 268 }
oliverb 0:414a9e6fed37 269 delay(250);
oliverb 0:414a9e6fed37 270
oliverb 0:414a9e6fed37 271 display.clearDisplay();
oliverb 0:414a9e6fed37 272 for (uint8_t i=0; i<display.height(); i+=4) {
oliverb 0:414a9e6fed37 273 display.drawLine(display.width()-1, 0, 0, i, WHITE);
oliverb 0:414a9e6fed37 274 }
oliverb 0:414a9e6fed37 275 for (uint8_t i=0; i<display.width(); i+=4) {
oliverb 0:414a9e6fed37 276 display.drawLine(display.width()-1, 0, i, display.height()-1, WHITE);
oliverb 0:414a9e6fed37 277 }
oliverb 0:414a9e6fed37 278 delay(250);
oliverb 0:414a9e6fed37 279 }
oliverb 0:414a9e6fed37 280