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: NeoStrip mbed nRF24L01P
Fork of NeoPixels by
Revision 0:f38492690f0e, committed 2014-03-12
- Comitter:
- aswild
- Date:
- Wed Mar 12 18:41:42 2014 +0000
- Child:
- 1:5ec5616d984e
- Commit message:
- Initial version
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/NeoStrip.lib Wed Mar 12 18:41:42 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/aswild/code/NeoStrip/#9f237b11f0a8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gt.h Wed Mar 12 18:41:42 2014 +0000
@@ -0,0 +1,12 @@
+/**** gt.h ****/
+
+const int gt_img[] = {
+ 0x122446, 0xffff00, 0xffff00, 0xffff00, 0xffff00, 0x122446, 0x122446, 0x122446,
+ 0xffff00, 0xffff00, 0x122446, 0x122446, 0x122446, 0x122446, 0x122446, 0x122446,
+ 0xffff00, 0x122446, 0x122446, 0x122446, 0x122446, 0x122446, 0x122446, 0x122446,
+ 0xffff00, 0x122446, 0x122446, 0xffff00, 0xffff00, 0xffff00, 0xffff00, 0xffff00,
+ 0xffff00, 0xffff00, 0x122446, 0x122446, 0xffff00, 0x122446, 0xffff00, 0x122446,
+ 0x122446, 0xffff00, 0xffff00, 0xffff00, 0xffff00, 0x122446, 0xffff00, 0x122446,
+ 0x122446, 0x122446, 0x122446, 0x122446, 0x122446, 0x122446, 0xffff00, 0x122446,
+ 0x122446, 0x122446, 0x122446, 0x122446, 0x122446, 0x122446, 0xffff00, 0x122446};
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Wed Mar 12 18:41:42 2014 +0000
@@ -0,0 +1,180 @@
+/*
+ * 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 "gt.h"
+
+#define N 64
+#define PATTERNS 3
+
+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(p18, N);
+DigitalIn b1(p20); // brightness up
+DigitalIn b2(p19); // brightness down
+DigitalIn b3(p21); // next pattern
+
+// timer used for debugging
+Timer timer;
+
+int main()
+{
+ b1.mode(PullDown);
+ b2.mode(PullDown);
+ b3.mode(PullDown);
+
+ int pattern = 0;
+ float bright = 0.2; // 20% is plenty for indoor use
+ bool b3o = b3; // old copy of button 3 to poll for changes
+
+ strip.setBrightness(bright); // set default brightness
+
+ 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 (b1 && bright < 1)
+ {
+ bright += 0.01;
+ if (bright > 1)
+ bright = 1;
+ strip.setBrightness(bright);
+ }
+
+ // button 2 decreases brightness
+ if (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 (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;
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Mar 12 18:41:42 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/8e73be2a2ac1 \ No newline at end of file
