From b9b663e87ab94fdf6df0e77f4c8e0052c720eb5e Mon Sep 17 00:00:00 2001 From: Phillip Burgess Date: Mon, 19 Oct 2020 16:18:14 -0700 Subject: [PATCH] Remove pixeldust_64x64 example, single demo can handle both with 1-line edit --- examples/pixeldust/pixeldust.ino | 38 ++--- examples/pixeldust_64x64/pixeldust_64x64.ino | 138 ------------------- library.properties | 2 +- 3 files changed, 23 insertions(+), 155 deletions(-) delete mode 100644 examples/pixeldust_64x64/pixeldust_64x64.ino diff --git a/examples/pixeldust/pixeldust.ino b/examples/pixeldust/pixeldust.ino index 5d15348..32143fc 100644 --- a/examples/pixeldust/pixeldust.ino +++ b/examples/pixeldust/pixeldust.ino @@ -1,39 +1,46 @@ /* ---------------------------------------------------------------------- "Pixel dust" Protomatter library example. As written, this is SPECIFICALLY FOR THE ADAFRUIT MATRIXPORTAL M4 with 64x32 pixel matrix. -(see "pixeldust_64x64" example for a 64x64 matrix), but could be adapted -to other Protomatter-capable boards with an attached LIS3DH accelerometer. +Change "HEIGHT" below for 64x64 matrix. Could also be adapted to other +Protomatter-capable boards with an attached LIS3DH accelerometer. PLEASE SEE THE "simple" EXAMPLE FOR AN INTRODUCTORY SKETCH, or "doublebuffer" for animation basics. ------------------------------------------------------------------------- */ -#include // For I2C communication -#include -#include // For simulation -#include +#include // For I2C communication +#include // For accelerometer +#include // For sand simulation +#include // For RGB matrix -#define WIDTH 64 // Display width in pixels -#define HEIGHT 32 // Display height in pixels +#define HEIGHT 32 // Matrix height (pixels) - SET TO 64 FOR 64x64 MATRIX! +#define WIDTH 64 // Matrix width (pixels) #define MAX_FPS 45 // Maximum redraw rate, frames/second -uint8_t rgbPins[] = {7, 8, 9, 10, 11, 12}; +#if HEIGHT == 64 // 64-pixel tall matrices have 5 address lines: +uint8_t addrPins[] = {17, 18, 19, 20, 21}; +#else // 32-pixel tall matrices have 4 address lines: uint8_t addrPins[] = {17, 18, 19, 20}; +#endif + +// Remaining pins are the same for all matrix sizes. These values +// are for MatrixPortal M4. See "simple" example for other boards. +uint8_t rgbPins[] = {7, 8, 9, 10, 11, 12}; uint8_t clockPin = 14; uint8_t latchPin = 15; uint8_t oePin = 16; -Adafruit_LIS3DH accel = Adafruit_LIS3DH(); - Adafruit_Protomatter matrix( - WIDTH, 4, 1, rgbPins, 4, addrPins, clockPin, latchPin, oePin, true); + WIDTH, 4, 1, rgbPins, sizeof(addrPins), addrPins, + clockPin, latchPin, oePin, true); + +Adafruit_LIS3DH accel = Adafruit_LIS3DH(); #define N_COLORS 8 #define BOX_HEIGHT 8 #define N_GRAINS (BOX_HEIGHT*N_COLORS*8) uint16_t colors[N_COLORS]; -// Sand object, last 2 args are accelerometer scaling and grain elasticity Adafruit_PixelDust sand(WIDTH, HEIGHT, N_GRAINS, 1, 128, false); uint32_t prevTime = 0; // Used for frames-per-second throttle @@ -50,19 +57,18 @@ void err(int x) { } void setup(void) { - uint8_t i, j, bytes; Serial.begin(115200); //while (!Serial) delay(10); ProtomatterStatus status = matrix.begin(); Serial.printf("Protomatter begin() status: %d\n", status); - if (!sand.begin()) { + if (!sand.begin()) { Serial.println("Couldn't start sand"); err(1000); // Slow blink = malloc error } - if (!accel.begin(0x19)) { + if (!accel.begin(0x19)) { Serial.println("Couldn't find accelerometer"); err(250); // Fast bink = I2C error } diff --git a/examples/pixeldust_64x64/pixeldust_64x64.ino b/examples/pixeldust_64x64/pixeldust_64x64.ino deleted file mode 100644 index edeff17..0000000 --- a/examples/pixeldust_64x64/pixeldust_64x64.ino +++ /dev/null @@ -1,138 +0,0 @@ -/* ---------------------------------------------------------------------- -"Pixel dust" Protomatter library example. As written, this is -SPECIFICALLY FOR THE ADAFRUIT MATRIXPORTAL M4 with 64x32 pixel matrix. -(see "pixeldust_64x64" example for a 64x64 matrix), but could be adapted -to other Protomatter-capable boards with an attached LIS3DH accelerometer. - -PLEASE SEE THE "simple" EXAMPLE FOR AN INTRODUCTORY SKETCH, -or "doublebuffer" for animation basics. -------------------------------------------------------------------------- */ - -#include // For I2C communication -#include -#include // For simulation -#include - -#define WIDTH 64 // Display width in pixels -#define HEIGHT 64 // Display height in pixels -#define MAX_FPS 45 // Maximum redraw rate, frames/second - -uint8_t rgbPins[] = {7, 8, 9, 10, 11, 12}; -uint8_t addrPins[] = {17, 18, 19, 20, 21}; -uint8_t clockPin = 14; -uint8_t latchPin = 15; -uint8_t oePin = 16; - -Adafruit_LIS3DH accel = Adafruit_LIS3DH(); - -Adafruit_Protomatter matrix( - WIDTH, 4, 1, rgbPins, 5, addrPins, clockPin, latchPin, oePin, true); - -#define N_COLORS 8 -#define BOX_HEIGHT 8 -#define N_GRAINS (BOX_HEIGHT*N_COLORS*8) -uint16_t colors[N_COLORS]; - -// Sand object, last 2 args are accelerometer scaling and grain elasticity -Adafruit_PixelDust sand(WIDTH, HEIGHT, N_GRAINS, 1, 128, false); - -uint32_t prevTime = 0; // Used for frames-per-second throttle - -// SETUP - RUNS ONCE AT PROGRAM START -------------------------------------- - -void err(int x) { - uint8_t i; - pinMode(LED_BUILTIN, OUTPUT); // Using onboard LED - for(i=1;;i++) { // Loop forever... - digitalWrite(LED_BUILTIN, i & 1); // LED on/off blink to alert user - delay(x); - } -} - -void setup(void) { - uint8_t i, j, bytes; - Serial.begin(115200); - //while (!Serial) delay(10); - - ProtomatterStatus status = matrix.begin(); - Serial.printf("Protomatter begin() status: %d\n", status); - - if (!sand.begin()) { - Serial.println("Couldn't start sand"); - err(1000); // Slow blink = malloc error - } - - if (!accel.begin(0x19)) { - Serial.println("Couldn't find accelerometer"); - err(250); // Fast bink = I2C error - } - accel.setRange(LIS3DH_RANGE_4_G); // 2, 4, 8 or 16 G! - - //sand.randomize(); // Initialize random sand positions - - // Set up initial sand coordinates, in 8x8 blocks - int n = 0; - for(int i=0; i (%d, %d)\n", n, xx + x, yy + y); - sand.setPosition(n++, xx + x, yy + y); - } - } - } - Serial.printf("%d total pixels\n", n); - - colors[0] = color565(64, 64, 64); // Dark Gray - colors[1] = color565(120, 79, 23); // Brown - colors[2] = color565(228, 3, 3); // Red - colors[3] = color565(255,140, 0); // Orange - colors[4] = color565(255,237, 0); // Yellow - colors[5] = color565( 0,128, 38); // Green - colors[6] = color565( 0, 77,255); // Blue - colors[7] = color565(117, 7,135); // Purple -} - -uint16_t color565(uint8_t red, uint8_t green, uint8_t blue) { - return ((red & 0xF8) << 8) | ((green & 0xFC) << 3) | (blue >> 3); -} - -// MAIN LOOP - RUNS ONCE PER FRAME OF ANIMATION ---------------------------- - -void loop() { - // Limit the animation frame rate to MAX_FPS. Because the subsequent sand - // calculations are non-deterministic (don't always take the same amount - // of time, depending on their current states), this helps ensure that - // things like gravity appear constant in the simulation. - uint32_t t; - while(((t = micros()) - prevTime) < (1000000L / MAX_FPS)); - prevTime = t; - - // Read accelerometer... - sensors_event_t event; - accel.getEvent(&event); - //Serial.printf("(%0.1f, %0.1f, %0.1f)\n", event.acceleration.x, event.acceleration.y, event.acceleration.z); - - double xx, yy, zz; - xx = event.acceleration.x * 1000; - yy = event.acceleration.y * 1000; - zz = event.acceleration.z * 1000; - - // Run one frame of the simulation - sand.iterate(xx, yy, zz); - - //sand.iterate(-accel.y, accel.x, accel.z); - - // Update pixel data in LED driver - dimension_t x, y; - matrix.fillScreen(0x0); - for(int i=0; i sentence=A library for Adafruit RGB LED matrices.