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.
Dependencies: mbed C12832_lcd LCD_fonts NeoStrip
main.cpp
- Committer:
- slackerjacker
- Date:
- 2021-04-20
- Revision:
- 2:a04589b1a088
- Parent:
- 1:a9f32c0c835d
File content as of revision 2:a04589b1a088:
/* * Adafruit NeoPixel example * * This program displays a couple simple patterns on an 8x8 NeoPixel matrix. * */ #include "mbed.h" #include "NeoStrip.h" #include "gt.h" #include "C12832_lcd.h" #include "Arial_9.h" #include "Small_7.h" #define N 12 //number of leds #define PATTERNS 3 Serial pc(USBTX, USBRX); //int hueToRGB(float h); //void pattern0(); //void pattern1(); //void pattern2(); // array of function pointers to the various patterns //void (*patterns[])(void) = {&pattern0, &pattern1, &pattern2}; NeoStrip strip(p25, N); // DIN PIN with number of LEDs NeoStrip led1(p25, 0); C12832_LCD LCD("LCD"); //NeoStrip leds[] = {(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)}; //DigitalIn b1(p20); // brightness up //DigitalIn b2(p19); // brightness down //DigitalIn b3(p22); // next pattern // timer used for debugging Timer timer; int main() { // b1.mode(PullDown); // b2.mode(PullDown); // b3.mode(PullDown); //int pattern = 0; //bool b3o = b3; // old copy of button 3 to poll for changes //int p = 0; //////////////////////////////////// //////note colours value below////// //////////////////////////////////// float bright = 0.05; // 20% is plenty for indoor use int red = 0xFF0000; int orange = 0xFF8000; int yellow = 0xFFFF00; int green = 0x00FF44; int blue = 0x00BFFF; int indigo = 0x0F0082; int violet = 0x8000B4; int white = 0xFFFFFF; int i = 0; int hueToRGB(float h); strip.setBrightness(bright); // set default brightness pc.printf("1 - Bootup\n\r"); pc.printf("2 - Bootdown\n\r"); pc.printf("3 - Clear\n\r"); pc.printf("4 - Happy\n\r"); pc.printf("5 - Sad\n\r"); while(true) {if (pc.readable()) { switch(pc.getc()) { case '1'://bootup sequence //strip.setPixels(0, N, test_img); LCD.cls(); { strip.clear(); strip.write(); wait_ms(200); strip.setPixel(0,red); strip.write(); wait_ms(200); strip.setPixel(1,orange); strip.write(); wait_ms(200); strip.setPixel(2,yellow); strip.write(); wait_ms(200); strip.setPixel(3,green); strip.write(); wait_ms(200); strip.setPixel(4,blue); strip.write(); wait_ms(200); strip.setPixel(5,indigo); strip.write(); wait_ms(200); strip.setPixel(6,violet); strip.write(); wait_ms(200); strip.setPixel(7,indigo); strip.write(); wait_ms(200); strip.setPixel(8,blue); strip.write(); wait_ms(200); strip.setPixel(9,green); strip.write(); wait_ms(200); strip.setPixel(10,yellow); strip.write(); wait_ms(200); strip.setPixel(11,orange); strip.write(); wait_ms(200); } break; case '2'://bootdown sequence LCD.cls(); strip.setPixel(11,orange); strip.write(); wait_ms(1); strip.setPixel(10,yellow); strip.write(); wait_ms(1); strip.setPixel(9,green); strip.write(); wait_ms(1); strip.setPixel(8,blue); strip.write(); wait_ms(1); strip.setPixel(7,indigo); strip.write(); wait_ms(1); strip.setPixel(6,violet); strip.write(); wait_ms(1); strip.setPixel(5,indigo); strip.write(); wait_ms(1); strip.setPixel(4,blue); strip.write(); wait_ms(1); strip.setPixel(3,green); strip.write(); wait_ms(1); strip.setPixel(2,yellow); strip.write(); wait_ms(1); strip.setPixel(1,orange); strip.write(); wait_ms(1); strip.setPixel(0,red); strip.write(); wait_ms(1); { for (int i = 11; i >= 0; i--) {strip.setPixel(i,0,0,0); strip.write(); wait_ms(500); } } break; case '3'://clear LCD.cls(); strip.clear(); strip.write(); break; case '4': LCD.claim(stdout); LCD.locate(10,0); LCD.set_font((unsigned char*) Arial_9); printf("Happy Bot"); LCD.copy_to_lcd(); LCD.set_font((unsigned char*) Small_7); while(true) { { for (int i = 0; i < N; i++) { strip.setPixel(i,white); strip.write(); wait_ms(15); } //if(white) { for (int i = 0; i < N; i++) { strip.setPixel(i,yellow); strip.write(); wait_ms(50); } //else(yellow) { for (int i =0; i < N; i++) { strip.setPixel(i,orange); strip.write(); wait_ms(50); } } //return 1; //for (int i = 0; i < 4; i++) //strip.clear(); //wait_ms(100); break; case '5': { for (int i = 0; i < 12; i++) strip.setPixel(i,blue); strip.write(); wait_ms(1); } { for (int i = 0; i<0.2; i+0.01) strip.setBrightness(bright+i); wait_ms(20); } break; // case '5': { 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; } // break; //led1 = 1; //wait(0.5); //strip.write(); //led1 = !1; //wait(0.5); //strip.write(); // PwmOut strip(); // strip.setPixel.write(0,red,brightness)); // wait_ms(30); // brightness = brightness + fadeAmount; //if((int)brightness == 1.0) // brightness = 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 // button 1 increases brightness if(0) //(b1 && bright < 1) { bright += 0.01; if (bright > 1) bright = 1; strip.setBrightness(bright); } // button 2 decreases brightness if (0)//(b2 && bright > 0) { bright -= 0.01; if (bright < 0) bright = 0; strip.setBrightness(bright); } // button 3 changes the pattern, only do stuff when its state has changed if (0)//(b3 != b3o) { if (b3 && ++pattern == PATTERNS) pattern = 0; b3o = b3; } // run the pattern update function which sets the strip's pixels patterns[pattern](); strip.write(); timer.stop(); // print loop time if b3 is pressed if (b3) printf("Loop Time: %dus\n", timer.read_us()); wait_ms(10); } }*/ // pattern0 displays a static image /*void pattern0() { strip.setPixels(0, N, gt_img); } // 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; } // display a shifting gradient between red and blue void pattern2() { // offset for each pixel to allow the pattern to move static float x = 0; float r, b, y; for (int i = 0; i < N; i++) { // y is a scaled position between 0 (red) and 1.0 (blue) y = 1.0 * i / (N - 1) + x; if (y > 1) y -= 1; // if on the left half, red is decreasing and blue is increasng if (y < 0.5) { b = 2 * y; r = 1 - b; } // else red is increasing and blue is decreasing else { r = 2 * (y - 0.5); b = 1 - r; } // scale to integers and set the pixel strip.setPixel(i, (uint8_t)(r * 255), 0, (uint8_t)(b * 200)); } x += 0.003; if (x > 1) 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; } */}} }}}}}