Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Led_demo by
main.cpp
- Committer:
- zchen311
- Date:
- 2014-04-25
- Revision:
- 0:4c7b2475af40
- Child:
- 1:0d37843b8283
- Child:
- 3:eecf2e4bf4f1
File content as of revision 0:4c7b2475af40:
/* * Adafruit NeoPixel 8x8 matrix example * * This program displays a couple simple patterns on an 8x8 NeoPixel matrix. * * 3 buttons are used for DigitalIns, 2 control the brightness up and down, * and the third switches patterns */ #include "mbed.h" #include "NeoStrip.h" #include "text.h" #define N 128 #define PATTERNS 4 #include <string> int hueToRGB(float h); void pattern0(); void pattern1(); void pattern2(); void fillBlue(); void progressBar(bool); int getIndex(int, int); void putChar(int row, int col, char ch, int color); void putString(std::string); void loopAscii(int count); void MarioBox(); void drawBox(int row);void emptyBox(int row); void putCharV(int row, int col, char ch, int color); // array of function pointers to the various patterns //void (*patterns[])(void) = {&pattern0, &pattern1, &pattern2}; NeoStrip strip(p18, N); DigitalIn b1(p20); // brightness up DigitalIn b2(p19); // brightness down DigitalIn b3(p21); // next pattern // timer used for debugging Timer timer; int chars[128]; char ch = 'A'; int main() { std::string emoji[9] = {"*_*", "^_^", "$_$", ">_<", "=_=", "+_=", ":)", ":(", ":3"}; float bright = 0.2; // 20% is plenty for indoor use strip.setBrightness(bright); // set default brightness int count = 0; while (true) { timer.reset(); // use a timer to measure loop execution time for debugging purposes timer.start(); // for this application, the main loop takes approximately 3ms to run progressBar(true); wait(5); progressBar(false); // fillBlue(); // write character // MarioBox(); // displayEmoji(); // loopAscii(count); // ch+=2; // putString(emoji[count%9]); // count++; wait(2); timer.stop(); // print loop time if b3 is pressed wait_ms(10); } } // pattern0 displays a static image void pattern0() { fillBlue(); // write character int color = 0xffff00; putChar(0,0,'G',color); putChar(0,6,'O',color); strip.setPixels(0, N, chars); } // display a shifting rainbow, all colors have maximum // saturation and value, with evenly spaced hue void pattern1() { static float dh = 360.0 / N; static float x = 0; for (int i = 0; i < N; i++) strip.setPixel(i, hueToRGB((dh * i) - x)); x += 1; if (x > 360) x = 0; } // Converts HSV to RGB with the given hue, assuming // maximum saturation and value int hueToRGB(float h) { // lots of floating point magic from the internet and scratching my head float r, g, b; if (h > 360) h -= 360; if (h < 0) h += 360; int i = (int)(h / 60.0); float f = (h / 60.0) - i; float q = 1 - f; switch (i % 6) { case 0: r = 1; g = f; b = 0; break; case 1: r = q; g = 1; b = 0; break; case 2: r = 0; g = 1; b = f; break; case 3: r = 0; g = q; b = 1; break; case 4: r = f; g = 0; b = 1; break; case 5: r = 1; g = 0; b = q; break; default: r = 0; g = 0; b = 0; break; } // scale to integers and return the packed value uint8_t R = (uint8_t)(r * 255); uint8_t G = (uint8_t)(g * 255); uint8_t B = (uint8_t)(b * 255); return (R << 16) | (G << 8) | B; } void fillBlue(){ for(int i = 0; i < N; i++){ chars[i] = 0x122446; } } int getIndex(int r, int c){ if(c < 8){ return (r * 8 + c); }else if(c > 15){ return -1; } else{ return (64 + r * 8 + (c-8)); } } void putChar(int row, int col, char ch, int color){ for(int r = 0; r < 8; r++){ for(int c = 0; c < 6; c++){ if(fontdata_6x8[ch * 48 + r * 6 +c]){ int idx = getIndex(row+r, col+c); if(idx != -1) chars[idx] = color; } } } } void putCharV(int row, int col, char ch, int color){ for(int r = 0; r < 8; r++){ for(int c = 0; c < 6; c++){ if(fontdata_6x8[ch * 48 + r * 6 +c]){ int idx = (row + r) *8 +( col +c); if(idx != -1) chars[idx] = color; } } } } void MarioBox(){ int color = 0xffff00; int red = 0xff0000; drawBox(8); strip.setPixels(0, N, chars); strip.write(); wait(5); for(int i = 1; i < 3; i++){ fillBlue(); drawBox(8-i); strip.setPixels(0, N, chars); strip.write(); wait(0.3); } for(int i = 0; i < 3; i++){ fillBlue(); drawBox(6 + i); strip.setPixels(0, N, chars); strip.write(); wait(0.3); } fillBlue(); emptyBox(8); putChar(0,0,'0',color); strip.setPixels(0, N, chars); strip.write(); wait(30); } void putString(std::string str){ int color = 0xffff00; for(int i = 0; i < str.length(); ++i){ putChar(0,5*i,str[i], color); } strip.setPixels(0, N, chars); strip.write(); } void loopAscii(int count){ int color = 0xffff00; putChar(0,0,ch+count,color); putChar(0,6,ch+count+1,color); strip.setPixels(0, N, chars); strip.write(); } void drawBox(int row){ for(int i = 0; i < 64; ++i) chars[row*8 + i] = 0x000000; putCharV(row,0,'?',0xffff00); } void emptyBox(int row){ for(int i = 0; i < 64; ++i) chars[row*8 + i] = 0x000000; } void progressBar(bool up){ int index; int init; int increment; int color; if(up == true){ init = 0; increment = 1; color = 0x122446; }else { init = 15; increment = -1; fillBlue(); color = 0x000000; } for(int x = 0; x < 16 ; x++){ for (int j = 0; j < 8; j++){ index = getIndex(j,init + increment * x); chars[index] = color; } strip.setPixels(0, N, chars); strip.write(); wait(1); } }