//fastled based air display mini rainbow lineart GFX by marderchen (thanks to adafruit for progman bitmap and to Bresenham's for drawline algorithm base =^.^=) #define t1 PB12 #define t2 PB13 #define t3 PB14 #define t4 PB15 #define t5 PA8 #define t6 PB11 #define t7 PB10 #define t8 PB0 #define tshine PA5 #define trechts PA4 #define tlinks PA3 #define mrechts PA2 #define mlinks PA1 #define rot PB11 #define grun PB10 #define blau PB5 #define uv PB4 #define swap(a, b) { int16_t t = a; a = b; b = t; } int rainbow[510]= {0x000000,0xFF0000,0xFF0300,0xFF0600,0xFF0900,0xFF0C00,0xFF0F00,0xFF1200,0xFF1500,0xFF1800,0xFF1B00,0xFF1E00,0xFF2100,0xFF2400,0xFF2700,0xFF2A00,0xFF2D00,0xFF3000,0xFF3400,0xFF3700,0xFF3A00,0xFF3D00,0xFF4000,0xFF4300,0xFF4600,0xFF4900,0xFF4C00,0xFF4F00,0xFF5200,0xFF5500,0xFF5800,0xFF5B00,0xFF5E00,0xFF6100,0xFF6400,0xFF6800,0xFF6B00,0xFF6E00,0xFF7100,0xFF7400,0xFF7700,0xFF7A00,0xFF7D00,0xFF8000,0xFF8300,0xFF8600,0xFF8900,0xFF8C00,0xFF8F00,0xFF9200,0xFF9500,0xFF9900,0xFF9C00,0xFF9F00,0xFFA200,0xFFA500,0xFFA800,0xFFAB00,0xFFAE00,0xFFB100,0xFFB400,0xFFB700,0xFFBA00,0xFFBD00,0xFFC000,0xFFC300,0xFFC600,0xFFC900,0xFFCD00,0xFFD000,0xFFD300,0xFFD600,0xFFD900,0xFFDC00,0xFFDF00,0xFFE200,0xFFE500,0xFFE800,0xFFEB00,0xFFEE00,0xFFF100,0xFFF400,0xFFF700,0xFFFA00,0xFFFD00,0xFCFF00,0xF9FF00,0xF6FF00,0xF3FF00,0xF0FF00,0xEDFF00,0xEAFF00,0xE7FF00,0xE4FF00,0xE1FF00,0xDEFF00,0xDBFF00,0xD8FF00,0xD5FF00,0xD2FF00,0xCFFF00,0xCBFF00,0xC8FF00,0xC5FF00,0xC2FF00,0xBFFF00,0xBCFF00,0xB9FF00,0xB6FF00,0xB3FF00,0xB0FF00,0xADFF00,0xAAFF00,0xA7FF00,0xA4FF00,0xA1FF00,0x9EFF00,0x9BFF00,0x97FF00,0x94FF00,0x91FF00,0x8EFF00,0x8BFF00,0x88FF00,0x85FF00,0x82FF00,0x7FFF00,0x7CFF00,0x79FF00,0x76FF00,0x73FF00,0x70FF00,0x6DFF00,0x6AFF00,0x67FF00,0x63FF00,0x60FF00,0x5DFF00,0x5AFF00,0x57FF00,0x54FF00,0x51FF00,0x4EFF00,0x4BFF00,0x48FF00,0x45FF00,0x42FF00,0x3FFF00,0x3CFF00,0x39FF00,0x36FF00,0x32FF00,0x2FFF00,0x2CFF00,0x29FF00,0x26FF00,0x23FF00,0x20FF00,0x1DFF00,0x1AFF00,0x17FF00,0x14FF00,0x11FF00,0x0EFF00,0x0BFF00,0x08FF00,0x05FF00,0x02FF00,0x00FF01,0x00FF04,0x00FF07,0x00FF0A,0x00FF0D,0x00FF10,0x00FF13,0x00FF16,0x00FF19,0x00FF1C,0x00FF1F,0x00FF22,0x00FF25,0x00FF28,0x00FF2B,0x00FF2E,0x00FF31,0x00FF35,0x00FF38,0x00FF3B,0x00FF3E,0x00FF41,0x00FF44,0x00FF47,0x00FF4A,0x00FF4D,0x00FF50,0x00FF53,0x00FF56,0x00FF59,0x00FF5C,0x00FF5F,0x00FF62,0x00FF66,0x00FF69,0x00FF6C,0x00FF6F,0x00FF72,0x00FF75,0x00FF78,0x00FF7B,0x00FF7E,0x00FF81,0x00FF84,0x00FF87,0x00FF8A,0x00FF8D,0x00FF90,0x00FF93,0x00FF96,0x00FF9A,0x00FF9D,0x00FFA0,0x00FFA3,0x00FFA6,0x00FFA9,0x00FFAC,0x00FFAF,0x00FFB2,0x00FFB5,0x00FFB8,0x00FFBB,0x00FFBE,0x00FFC1,0x00FFC4,0x00FFC7,0x00FFCA,0x00FFCE,0x00FFD1,0x00FFD4,0x00FFD7,0x00FFDA,0x00FFDD,0x00FFE0,0x00FFE3,0x00FFE6,0x00FFE9,0x00FFEC,0x00FFEF,0x00FFF2,0x00FFF5,0x00FFF8,0x00FFFB,0x00FEFF,0x00FBFF,0x00F8FF,0x00F5FF,0x00F2FF,0x00EFFF,0x00ECFF,0x00E9FF,0x00E6FF,0x00E3FF,0x00E0FF,0x00DDFF,0x00DAFF,0x00D7FF,0x00D4FF,0x00D1FF,0x00CEFF,0x00CAFF,0x00C7FF,0x00C4FF,0x00C1FF,0x00BEFF,0x00BBFF,0x00B8FF,0x00B5FF,0x00B2FF,0x00AFFF,0x00ACFF,0x00A9FF,0x00A6FF,0x00A3FF,0x00A0FF,0x009DFF,0x009AFF,0x0096FF,0x0093FF,0x0090FF,0x008DFF,0x008AFF,0x0087FF,0x0084FF,0x0081FF,0x007EFF,0x007BFF,0x0078FF,0x0075FF,0x0072FF,0x006FFF,0x006CFF,0x0069FF,0x0065FF,0x0062FF,0x005FFF,0x005CFF,0x0059FF,0x0056FF,0x0053FF,0x0050FF,0x004DFF,0x004AFF,0x0047FF,0x0044FF,0x0041FF,0x003EFF,0x003BFF,0x0038FF,0x0035FF,0x0031FF,0x002EFF,0x002BFF,0x0028FF,0x0025FF,0x0022FF,0x001FFF,0x001CFF,0x0019FF,0x0016FF,0x0013FF,0x0010FF,0x000DFF,0x000AFF,0x0007FF,0x0004FF,0x0001FF,0x0200FF,0x0500FF,0x0800FF,0x0B00FF,0x0E00FF,0x1100FF,0x1400FF,0x1700FF,0x1A00FF,0x1D00FF,0x2000FF,0x2300FF,0x2600FF,0x2900FF,0x2C00FF,0x2F00FF,0x3200FF,0x3600FF,0x3900FF,0x3C00FF,0x3F00FF,0x4200FF,0x4500FF,0x4800FF,0x4B00FF,0x4E00FF,0x5100FF,0x5400FF,0x5700FF,0x5A00FF,0x5D00FF,0x6000FF,0x6300FF,0x6700FF,0x6A00FF,0x6D00FF,0x7000FF,0x7300FF,0x7600FF,0x7900FF,0x7C00FF,0x7F00FF,0x8200FF,0x8500FF,0x8800FF,0x8B00FF,0x8E00FF,0x9100FF,0x9400FF,0x9700FF,0x9B00FF,0x9E00FF,0xA100FF,0xA400FF,0xA700FF,0xAA00FF,0xAD00FF,0xB000FF,0xB300FF,0xB600FF,0xB900FF,0xBC00FF,0xBF00FF,0xC200FF,0xC500FF,0xC800FF,0xCC00FF,0xCF00FF,0xD200FF,0xD500FF,0xD800FF,0xDB00FF,0xDE00FF,0xE100FF,0xE400FF,0xE700FF,0xEA00FF,0xED00FF,0xF000FF,0xF300FF,0xF600FF,0xF900FF,0xFC00FF,0xFF00FD,0xFF00FA,0xFF00F7,0xFF00F4,0xFF00F1,0xFF00EE,0xFF00EB,0xFF00E8,0xFF00E5,0xFF00E2,0xFF00DF,0xFF00DC,0xFF00D9,0xFF00D6,0xFF00D3,0xFF00D0,0xFF00CD,0xFF00C9,0xFF00C6,0xFF00C3,0xFF00C0,0xFF00BD,0xFF00BA,0xFF00B7,0xFF00B4,0xFF00B1,0xFF00AE,0xFF00AB,0xFF00A8,0xFF00A5,0xFF00A2,0xFF009F,0xFF009C,0xFF0098,0xFF0095,0xFF0092,0xFF008F,0xFF008C,0xFF0089,0xFF0086,0xFF0083,0xFF0080,0xFF007D,0xFF007A,0xFF0077,0xFF0074,0xFF0071,0xFF006E,0xFF006B,0xFF0068,0xFF0064,0xFF0061,0xFF005E,0xFF005B,0xFF0058,0xFF0055,0xFF0052,0xFF004F,0xFF004C,0xFF0049,0xFF0046,0xFF0043,0xFF0040,0xFF003D,0xFF003A,0xFF0037,0xFF0034,0xFF0030,0xFF002D,0xFF002A,0xFF0027,0xFF0024,0xFF0021,0xFF001E,0xFF001B,0xFF0018,0xFF0015,0xFF0012,0xFF000F,0xFF000C,0xFF0009,0xFF0006,0xFF0003,0x000000}; uint8_t buffy[129][49]; //matrixresolution+1 (128x48px) need also changed in matrixheight and width int pixY[49]; #define matrixheight 48 int matrixwidth =128; long allfcount = micros(); long maintime = millis(); //motor int lduty =0; int rduty=0; int motor =0; int dutyc =0; //ka ob ledneed int leda=0; int ledb=0; int ver =0; uint8_t brightness = 120; int timey = 100; int onpress[17]; int zeit1 =0; int fcount1 =0; int setled =48; int ka =0; int los=0; int way =0; int colorcach; int color=0; int chaosset=0; int chaosset2=0; uint8_t colorz=0x000000; //fastled #include #define LED_PIN PB7 #define BRIGHTNESS 255 #define LED_TYPE WS2812 #define COLOR_ORDER GRB CRGB leds[matrixheight]; #define UPDATES_PER_SECOND 5000 void setup() { pinMode(t1, INPUT); pinMode(t2, INPUT); pinMode(t3, INPUT); pinMode(t4, INPUT); pinMode(t5, INPUT); pinMode(t6, INPUT); pinMode(t7, INPUT); pinMode(t8, INPUT); pinMode(tlinks, INPUT); pinMode(trechts, INPUT); pinMode(tshine, OUTPUT); pinMode(mlinks, OUTPUT); pinMode(mrechts, OUTPUT); pinMode(rot, OUTPUT); pinMode(grun, OUTPUT); pinMode(blau, OUTPUT); pinMode(uv, OUTPUT); delay( 3000 ); // power-up safety delay FastLED.addLeds(leds, matrixheight).setCorrection( TypicalLEDStrip ); FastLED.setBrightness( BRIGHTNESS ); } void loop() { zeitreise(); istinput(); testie(); driftaway(); } void istinput(void){ if (zeit1 >=1) { if (digitalRead(t1) == HIGH && onpress[0] ==0) { onpress[0] =1; } //minisound if (onpress[0] == 1) { onpress[1]++;} if (onpress[1] >= 10) { onpress[1] =0; onpress[0]=0;} if (digitalRead(t2) == HIGH && onpress[2] ==0) { onpress[2] =1; } if (onpress[2] == 1) { onpress[3]++;} if (onpress[3] >= 10) { onpress[3] =0; onpress[2]=0; } if (digitalRead(t3) == HIGH && onpress[4] ==0) { onpress[4] =1; } if (onpress[4] == 1) { onpress[5]++;} if (onpress[5] >= 10) { onpress[5] =0; onpress[4]=0; } if (digitalRead(t4) == HIGH && onpress[6] ==0) { onpress[6] =1; } if (onpress[6] == 1) { onpress[7]++;} if (onpress[7] >= 10) { onpress[7] =0; onpress[6]=0; } if (digitalRead(t5) == HIGH && onpress[8] ==0) { onpress[8] =1;} if (onpress[8] == 1) { onpress[9]++; } if (onpress[9] >= 10) { onpress[9] =0; onpress[8]=0; } if (digitalRead(t6) == HIGH && onpress[10] ==0) { onpress[10] =1; } if (onpress[10] == 1) { onpress[11]++;} if (onpress[11] >= 10) { onpress[11] =0; onpress[10]=0; } if (digitalRead(t7) == HIGH && onpress[12] ==0) { onpress[12] =1; timey-=100;} //zeitc -signal if (onpress[12] == 1) { onpress[13]++;} if (onpress[13] >= 10) { onpress[13] =0; onpress[12]=0; } if (digitalRead(t8) == HIGH && onpress[14] ==0) { onpress[14] =1; timey+=100;} if (onpress[14] == 1) { onpress[15]++;} if (onpress[15] >= 10) { onpress[15] =0; onpress[14]=0; } zeit1=0; }} void zeitreise(void){ while ((millis()- maintime) >= 10) { zeit1++; ka++; maintime = millis(); } } void driftaway(void){ if (digitalRead(trechts) == HIGH) { way =0; } if (digitalRead(tlinks) == HIGH) { way =1;} if (way == 0) {digitalWrite(mrechts, LOW); digitalWrite(mlinks, HIGH); brightness = 255; los=1;} if (way == 1) {digitalWrite(mlinks, LOW); digitalWrite(mrechts, HIGH); brightness = 200;} if (way == 2) {digitalWrite(mrechts, LOW); digitalWrite(mlinks, LOW); } } //thanks to adafruit for PROGMAN algoritm int rainbowcolor3 =0; void wuselBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint8_t colorspeed, int8_t chaos, boolean colormove) { int16_t i, j, byteWidth = (w + 7) / 8; uint8_t byte; for(j=0; j= 500) { rainbowcolor3 =1;} chaosinbuffer(x+i,y+i,chaos); if (colormove == true) { wuselpixel(chaosset2, chaosset, rainbow[rainbowcolor3]);} if (colormove == false) { wuselpixel(chaosset2, chaosset, colorspeed);} } } } void wuselfillrect(int16_t eckex, int16_t eckey,int16_t breit, int16_t hoch,uint8_t colorspeed, int8_t chaos, boolean colormove) { for( int rx = eckex; rx < (eckex+breit); rx++) { wuselline(rx,eckey,rx+breit,eckey+hoch,colorspeed,chaos,colormove); } } void wuselrect(int16_t eckex, int16_t eckey,int16_t breit, int16_t hoch,uint8_t colorspeed, int8_t chaos, boolean colormove) { wuselline(eckex,eckey,breit,eckey,colorspeed,chaos,colormove); wuselline(eckex+breit,eckey,eckex+breit,hoch,colorspeed,chaos,colormove); wuselline(eckex+breit,eckey+hoch,eckey,eckey+hoch,colorspeed,chaos,colormove); wuselline(eckex,eckey+hoch,eckex,eckey,colorspeed,chaos,colormove); } int rainbowcolor =0; int rainbowcolor2 =0; //Bresenham's algorithm - thx wikpedia (and adafruit) void wuselline(int16_t x0, int16_t y0,int16_t x1, int16_t y1,uint8_t colorspeed, int8_t chaos, boolean colormove) { //if colormove =false, colorspeed = color ( 0xFF205B etc.) int16_t steep = abs(y1 - y0) > abs(x1 - x0); if (steep) { swap(x0, y0); swap(x1, y1); } if (x0 > x1) { swap(x0, x1); swap(y0, y1); } int16_t dx, dy; dx = x1 - x0; dy = abs(y1 - y0); int16_t x10=x0; int16_t err = dx / 2; int16_t err2 = dx / 2; int y10 =y0; int16_t ystep; if (y0 < y1) { ystep = 1; } else { ystep = -1; } for (; x0<=x1; x0++) { rainbowcolor +=colorspeed; if (rainbowcolor >= (500-colorspeed)) { rainbowcolor =1;} if (steep) { if (colormove == true) { wuselpixel(y0, x0, rainbow[rainbowcolor]);} if (colormove == false) { wuselpixel(y0, x0, colorspeed);} } else { if (colormove == true) { wuselpixel(x0, y0, rainbow[rainbowcolor]);} if (colormove == false) { wuselpixel(x0, y0, colorspeed);} } err -= dy; if (err < 0) { y0 += ystep; err += dx; } } for (; x10<=x1; x10++) { rainbowcolor2 +=chaos; if (rainbowcolor2 >= (500-chaos)) { rainbowcolor2 =1;} chaosinbuffer(x10,y10,chaos); if (steep) { if (colormove == true) { wuselpixel(chaosset2,chaosset, rainbow[rainbowcolor2]); } if (colormove == false) { wuselpixel(chaosset2, chaosset, colorspeed); } } else { if (colormove == true) { wuselpixel(chaosset2, chaosset, rainbow[rainbowcolor2]);} if (colormove == false) { wuselpixel(chaosset2, chaosset,colorspeed);} } err2 -= dy; if (err2 < 0) { y10 += ystep; err2 += dx; } } } void chaosinbuffer(int16_t wooooo,int16_t woooo,int16_t chaos) { //caused chaos chould not over array length if ((woooo + chaos) < matrixheight) { chaosset=woooo+random(-chaos,chaos);} //no else! if ((woooo + chaos) >= matrixheight) { chaosset=woooo+random(-chaos,0);} if ((wooooo + chaos) < matrixwidth) { chaosset2=wooooo+random(-chaos,chaos);} if ((wooooo + chaos) >= matrixwidth) { chaosset2=wooooo+random(-chaos,0);} if ((woooo - chaos) > 0) { chaosset=woooo+random(-chaos,chaos);} if ((woooo - chaos) <= 0) { chaosset=woooo+random(0,chaos);} if ((wooooo - chaos) > 0) { chaosset2=wooooo+random(-chaos,chaos);} if ((wooooo - chaos) <= 0) { chaosset2=wooooo+random(0,chaos);} } void wuselpixel(int16_t posx, int16_t posy, uint8_t color) { buffy[posx][posy] = color; //the for example 0xff205b is not storret in array.. its just blue or black .. somthink like 0x0000FF or 0x000000 } void scratchbufferdata(uint8_t color,boolean colors, boolean total) { //total false = some random colorixel, true = full colorpixelchaos for( int cx = 0; cx < matrixwidth; cx++) { for( int cy = 0; cy < matrixheight; cy++) { if (colors == false) { if (cy== random(0,matrixheight) && total == false) {wuselpixel(cx,cy,rainbow[random(0,500)]);} if (total == true) {wuselpixel(cx,cy,rainbow[random(0,500)]);} } if (colors ==true) { if (cy== random(0,matrixheight) && total == false) {wuselpixel(cx,cy,color);} if (total == true) {wuselpixel(cx,cy,color);} }}} } void fitscreen(uint8_t color) { // can also user to make blackscreen 0x000000 for( int cx = 0; cx < matrixwidth; cx++) { for( int cy = 0; cy < matrixheight; cy++) { wuselpixel(cx,cy,color);} } } void displayframe(void) { if (los == 1){ for( int ix = 0; ix < matrixwidth; ix++) { ver=0; leda=0; for( int iy = 0; iy < matrixheight; iy++) { if (leda ==1 ) {leds[ver] = buffy[ix][iy];} if (leda ==0 ) {leds[matrixheight-(ver+1)] = buffy[ix][iy];} leda++; if ((iy%2)==1) { ver++; leda=0;} } FastLED.show(); FastLED.delay(1000 / (timey*10)); } } los=0; way =1; } void testie(void) { fitscreen(0x000000); scratchbufferdata(0xff205b,false,false); wuselline(random(0,128),random(0,48),random(0,128),random(0,48),6,2,true); displayframe(); } //programm by marderchen =^.^= /* MMMMMMMM MMMMMMMMEEEEEEEEEEEEEEEEEEEEEE OOOOOOOOO WWWWWWWW WWWWWWWW M:::::::M M:::::::ME::::::::::::::::::::E OO:::::::::OO W::::::W W::::::W M::::::::M M::::::::ME::::::::::::::::::::E OO:::::::::::::OO W::::::W W::::::W M:::::::::M M:::::::::MEE::::::EEEEEEEEE::::EO:::::::OOO:::::::OW::::::W W::::::W M::::::::::M M::::::::::M E:::::E EEEEEEO::::::O O::::::O W:::::W WWWWW W:::::W M:::::::::::M M:::::::::::M E:::::E O:::::O O:::::O W:::::W W:::::W W:::::W M:::::::M::::M M::::M:::::::M E::::::EEEEEEEEEE O:::::O O:::::O W:::::W W:::::::W W:::::W M::::::M M::::M M::::M M::::::M E:::::::::::::::E O:::::O O:::::O W:::::W W:::::::::W W:::::W M::::::M M::::M::::M M::::::M E:::::::::::::::E O:::::O O:::::O W:::::W W:::::W:::::W W:::::W M::::::M M:::::::M M::::::M E::::::EEEEEEEEEE O:::::O O:::::O W:::::W W:::::W W:::::W W:::::W M::::::M M:::::M M::::::M E:::::E O:::::O O:::::O W:::::W:::::W W:::::W:::::W M::::::M MMMMM M::::::M E:::::E EEEEEEO::::::O O::::::O W:::::::::W W:::::::::W M::::::M M::::::MEE::::::EEEEEEEE:::::EO:::::::OOO:::::::O W:::::::W W:::::::W M::::::M M::::::ME::::::::::::::::::::E OO:::::::::::::OO W:::::W W:::::W M::::::M M::::::ME::::::::::::::::::::E OO:::::::::OO W:::W W:::W MMMMMMMM MMMMMMMMEEEEEEEEEEEEEEEEEEEEEE OOOOOOOOO WWW WWW `..`... `...... `.. .. `........`....... `........`........ `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `...... `. `.. `...... `...... `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. `.. .. `.. `.. `..`........`........ */ //font // // Font data for Electronic Highway Sign 12pt // // Character bitmaps for Electronic Highway Sign 12pt const unsigned char PROGMEM electronicHighwaySign_12ptBitmaps[] = { // @0 '.' (3 pixels wide) 0x00, // 0x00, // 0x00, // 0x00, // 0x00, // 0x00, // 0x00, // 0x00, // 0x00, // 0xE0, // ### 0xE0, // ### 0xE0, // ### // @12 '0' (9 pixels wide) 0x7E, 0x00, // ###### 0x7E, 0x00, // ###### 0xC1, 0x80, // ## ## 0xC7, 0x80, // ## #### 0xC7, 0x80, // ## #### 0xD9, 0x80, // ## ## ## 0xD9, 0x80, // ## ## ## 0xE1, 0x80, // ### ## 0xE1, 0x80, // ### ## 0xC1, 0x80, // ## ## 0xFF, 0x80, // ######### 0x7E, 0x00, // ###### // @36 '1' (6 pixels wide) 0x30, // ## 0x30, // ## 0xF0, // #### 0xF0, // #### 0x30, // ## 0x30, // ## 0x30, // ## 0x30, // ## 0x30, // ## 0x30, // ## 0xFC, // ###### 0xFC, // ###### // @48 '2' (8 pixels wide) 0x3E, // ##### 0x3E, // ##### 0x81, // # # 0x81, // # # 0x01, // # 0x1E, // #### 0x1E, // #### 0x20, // # 0x20, // # 0x80, // # 0x00, // 0xBF, // # ###### // @60 '3' (9 pixels wide) 0x7E, 0x00, // ###### 0x7E, 0x00, // ###### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0x01, 0x80, // ## 0x1E, 0x00, // #### 0x1E, 0x00, // #### 0x01, 0x80, // ## 0x01, 0x80, // ## 0xC1, 0x80, // ## ## 0xFF, 0x80, // ######### 0x7E, 0x00, // ###### // @84 '4' (9 pixels wide) 0x06, 0x00, // ## 0x06, 0x00, // ## 0x1E, 0x00, // #### 0x7E, 0x00, // ###### 0x66, 0x00, // ## ## 0xC6, 0x00, // ## ## 0xC6, 0x00, // ## ## 0xFF, 0x80, // ######### 0xFF, 0x80, // ######### 0x06, 0x00, // ## 0x06, 0x00, // ## 0x06, 0x00, // ## // @108 '5' (9 pixels wide) 0xFF, 0x80, // ######### 0xFF, 0x80, // ######### 0xC0, 0x00, // ## 0xFE, 0x00, // ####### 0xFE, 0x00, // ####### 0x01, 0x80, // ## 0x01, 0x80, // ## 0x01, 0x80, // ## 0x01, 0x80, // ## 0xC1, 0x80, // ## ## 0xFF, 0x80, // ######### 0x7E, 0x00, // ###### // @132 '6' (9 pixels wide) 0x1E, 0x00, // #### 0x1E, 0x00, // #### 0x60, 0x00, // ## 0xE0, 0x00, // ### 0xC0, 0x00, // ## 0xFE, 0x00, // ####### 0xFE, 0x00, // ####### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xFF, 0x80, // ######### 0x7E, 0x00, // ###### // @156 '7' (9 pixels wide) 0xFF, 0x80, // ######### 0xFF, 0x80, // ######### 0x01, 0x80, // ## 0x07, 0x80, // #### 0x06, 0x00, // ## 0x18, 0x00, // ## 0x18, 0x00, // ## 0x60, 0x00, // ## 0x60, 0x00, // ## 0x60, 0x00, // ## 0x60, 0x00, // ## 0x60, 0x00, // ## // @180 '8' (9 pixels wide) 0x7E, 0x00, // ###### 0x7E, 0x00, // ###### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0x7E, 0x00, // ###### 0x7E, 0x00, // ###### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xFF, 0x80, // ######### 0x7E, 0x00, // ###### // @204 '9' (9 pixels wide) 0x7E, 0x00, // ###### 0x7E, 0x00, // ###### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0x7F, 0x80, // ######## 0x7F, 0x80, // ######## 0x01, 0x80, // ## 0x01, 0x80, // ## 0x06, 0x00, // ## 0x7E, 0x00, // ###### 0x78, 0x00, // #### // @228 ':' (3 pixels wide) 0x00, // 0x00, // 0xE0, // ### 0xE0, // ### 0xE0, // ### 0x00, // 0x00, // 0xE0, // ### 0xE0, // ### 0xE0, // ### 0xE0, // ### 0x00, // // @240 'A' (9 pixels wide) 0x18, 0x00, // ## 0x18, 0x00, // ## 0x66, 0x00, // ## ## 0xE7, 0x80, // ### #### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xFF, 0x80, // ######### 0xFF, 0x80, // ######### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## // @264 'B' (9 pixels wide) 0xFE, 0x00, // ####### 0xFE, 0x00, // ####### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xFE, 0x00, // ####### 0xFE, 0x00, // ####### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xFF, 0x80, // ######### 0xFE, 0x00, // ####### // @288 'C' (9 pixels wide) 0x7E, 0x00, // ###### 0x7E, 0x00, // ###### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC1, 0x80, // ## ## 0xFF, 0x80, // ######### 0x7E, 0x00, // ###### // @312 'D' (9 pixels wide) 0xF8, 0x00, // ##### 0xF8, 0x00, // ##### 0xC6, 0x00, // ## ## 0xC7, 0x80, // ## #### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC6, 0x00, // ## ## 0xFE, 0x00, // ####### 0xF8, 0x00, // ##### // @336 'E' (9 pixels wide) 0xFF, 0x80, // ######### 0xFF, 0x80, // ######### 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xFE, 0x00, // ####### 0xFE, 0x00, // ####### 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xFF, 0x80, // ######### 0xFF, 0x80, // ######### // @360 'F' (9 pixels wide) 0xFF, 0x80, // ######### 0xFF, 0x80, // ######### 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xFE, 0x00, // ####### 0xFE, 0x00, // ####### 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## // @384 'G' (9 pixels wide) 0x7E, 0x00, // ###### 0x7E, 0x00, // ###### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC0, 0x00, // ## 0xDF, 0x80, // ## ###### 0xDF, 0x80, // ## ###### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xFF, 0x80, // ######### 0x7F, 0x80, // ######## // @408 'H' (9 pixels wide) 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xFF, 0x80, // ######### 0xFF, 0x80, // ######### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## // @432 'I' (6 pixels wide) 0xFC, // ###### 0xFC, // ###### 0x30, // ## 0x30, // ## 0x30, // ## 0x30, // ## 0x30, // ## 0x30, // ## 0x30, // ## 0x30, // ## 0xFC, // ###### 0xFC, // ###### // @444 'J' (9 pixels wide) 0x1F, 0x80, // ###### 0x1F, 0x80, // ###### 0x06, 0x00, // ## 0x06, 0x00, // ## 0x06, 0x00, // ## 0x06, 0x00, // ## 0x06, 0x00, // ## 0x06, 0x00, // ## 0x06, 0x00, // ## 0xC6, 0x00, // ## ## 0xFE, 0x00, // ####### 0x78, 0x00, // #### // @468 'K' (9 pixels wide) 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC6, 0x00, // ## ## 0xDE, 0x00, // ## #### 0xD8, 0x00, // ## ## 0xE0, 0x00, // ### 0xE0, 0x00, // ### 0xD8, 0x00, // ## ## 0xD8, 0x00, // ## ## 0xC6, 0x00, // ## ## 0xC7, 0x80, // ## #### 0xC1, 0x80, // ## ## // @492 'L' (9 pixels wide) 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xFF, 0x80, // ######### 0xFF, 0x80, // ######### // @516 'M' (9 pixels wide) 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xE7, 0x80, // ### #### 0xFF, 0x80, // ######### 0xD9, 0x80, // ## ## ## 0xD9, 0x80, // ## ## ## 0xD9, 0x80, // ## ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## // @540 'N' (9 pixels wide) 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xE1, 0x80, // ### ## 0xE1, 0x80, // ### ## 0xD9, 0x80, // ## ## ## 0xD9, 0x80, // ## ## ## 0xC7, 0x80, // ## #### 0xC7, 0x80, // ## #### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## // @564 'O' (9 pixels wide) 0x7E, 0x00, // ###### 0x7E, 0x00, // ###### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xFF, 0x80, // ######### 0x7E, 0x00, // ###### // @588 'P' (9 pixels wide) 0xFE, 0x00, // ####### 0xFE, 0x00, // ####### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xFE, 0x00, // ####### 0xFE, 0x00, // ####### 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## 0xC0, 0x00, // ## // @612 'Q' (9 pixels wide) 0x7E, 0x00, // ###### 0x7E, 0x00, // ###### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xD9, 0x80, // ## ## ## 0xD9, 0x80, // ## ## ## 0xC6, 0x00, // ## ## 0xFF, 0x80, // ######### 0x79, 0x80, // #### ## // @636 'R' (9 pixels wide) 0xFE, 0x00, // ####### 0xFE, 0x00, // ####### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xFE, 0x00, // ####### 0xFE, 0x00, // ####### 0xD8, 0x00, // ## ## 0xD8, 0x00, // ## ## 0xC6, 0x00, // ## ## 0xC7, 0x80, // ## #### 0xC1, 0x80, // ## ## // @660 'S' (9 pixels wide) 0x7E, 0x00, // ###### 0x7E, 0x00, // ###### 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC0, 0x00, // ## 0x7E, 0x00, // ###### 0x7E, 0x00, // ###### 0x01, 0x80, // ## 0x01, 0x80, // ## 0xC1, 0x80, // ## ## 0xFF, 0x80, // ######### 0x7E, 0x00, // ###### // @684 'T' (9 pixels wide) 0xFF, 0x80, // ######### 0xFF, 0x80, // ######### 0x18, 0x00, // ## 0x18, 0x00, // ## 0x18, 0x00, // ## 0x18, 0x00, // ## 0x18, 0x00, // ## 0x18, 0x00, // ## 0x18, 0x00, // ## 0x18, 0x00, // ## 0x18, 0x00, // ## 0x18, 0x00, // ## // @708 'U' (9 pixels wide) 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xFF, 0x80, // ######### 0x7E, 0x00, // ###### // @732 'V' (9 pixels wide) 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0x66, 0x00, // ## ## 0x66, 0x00, // ## ## 0x66, 0x00, // ## ## 0x66, 0x00, // ## ## 0x18, 0x00, // ## 0x18, 0x00, // ## 0x18, 0x00, // ## // @756 'W' (9 pixels wide) 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xD9, 0x80, // ## ## ## 0xD9, 0x80, // ## ## ## 0xD9, 0x80, // ## ## ## 0xD9, 0x80, // ## ## ## 0xD9, 0x80, // ## ## ## 0xFF, 0x80, // ######### 0x66, 0x00, // ## ## // @780 'X' (9 pixels wide) 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xE7, 0x80, // ### #### 0x66, 0x00, // ## ## 0x18, 0x00, // ## 0x18, 0x00, // ## 0x66, 0x00, // ## ## 0x66, 0x00, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## // @804 'Y' (9 pixels wide) 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0xC1, 0x80, // ## ## 0x66, 0x00, // ## ## 0x66, 0x00, // ## ## 0x18, 0x00, // ## 0x18, 0x00, // ## 0x18, 0x00, // ## 0x18, 0x00, // ## 0x18, 0x00, // ## // @828 'Z' (9 pixels wide) 0xFF, 0x80, // ######### 0xFF, 0x80, // ######### 0x01, 0x80, // ## 0x07, 0x80, // #### 0x06, 0x00, // ## 0x18, 0x00, // ## 0x18, 0x00, // ## 0x60, 0x00, // ## 0x60, 0x00, // ## 0xC0, 0x00, // ## 0xFF, 0x80, // ######### 0xFF, 0x80, // ######### }; // Character descriptors for Electronic Highway Sign 12pt // { [Char width in bits], [Offset into electronicHighwaySign_12ptCharBitmaps in bytes] } uint8_t woo[50][2] = { {3, 0}, // . {0, 0}, // / {9, 12}, // 0 {6, 36}, // 1 {8, 48}, // 2 {9, 60}, // 3 {9, 84}, // 4 {9, 108}, // 5 {9, 132}, // 6 {9, 156}, // 7 {9, 180}, // 8 {9, 204}, // 9 {3, 228}, // : {0, 0}, // ; {0, 0}, // < {0, 0}, // = {0, 0}, // > {0, 0}, // ? {0, 0}, // @ {9, 240}, // A {9, 264}, // B {9, 288}, // C {9, 312}, // D {9, 336}, // E {9, 360}, // F {9, 384}, // G {9, 408}, // H {6, 432}, // I {9, 444}, // J {9, 468}, // K {9, 492}, // L {9, 516}, // M {9, 540}, // N {9, 564}, // O {9, 588}, // P {9, 612}, // Q {9, 636}, // R {9, 660}, // S {9, 684}, // T {9, 708}, // U {9, 732}, // V {9, 756}, // W {9, 780}, // X {9, 804}, // Y {9, 828}, // Z };