diff --git a/src/Fab Matrixes/.gitignore b/src/Fab Matrixes/.gitignore new file mode 100644 index 0000000..89cc49c --- /dev/null +++ b/src/Fab Matrixes/.gitignore @@ -0,0 +1,5 @@ +.pio +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/ipch diff --git a/src/Fab Matrixes/include/README b/src/Fab Matrixes/include/README new file mode 100644 index 0000000..49819c0 --- /dev/null +++ b/src/Fab Matrixes/include/README @@ -0,0 +1,37 @@ + +This directory is intended for project header files. + +A header file is a file containing C declarations and macro definitions +to be shared between several project source files. You request the use of a +header file in your project source file (C, C++, etc) located in `src` folder +by including it, with the C preprocessing directive `#include'. + +```src/main.c + +#include "header.h" + +int main (void) +{ + ... +} +``` + +Including a header file produces the same results as copying the header file +into each source file that needs it. Such copying would be time-consuming +and error-prone. With a header file, the related declarations appear +in only one place. If they need to be changed, they can be changed in one +place, and programs that include the header file will automatically use the +new version when next recompiled. The header file eliminates the labor of +finding and changing all the copies as well as the risk that a failure to +find one copy will result in inconsistencies within a program. + +In C, the convention is to give header files names that end with `.h'. + +Read more about using header files in official GCC documentation: + +* Include Syntax +* Include Operation +* Once-Only Headers +* Computed Includes + +https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html diff --git a/src/Fab Matrixes/lib/README b/src/Fab Matrixes/lib/README new file mode 100644 index 0000000..9379397 --- /dev/null +++ b/src/Fab Matrixes/lib/README @@ -0,0 +1,46 @@ + +This directory is intended for project specific (private) libraries. +PlatformIO will compile them to static libraries and link into the executable file. + +The source code of each library should be placed in a separate directory +("lib/your_library_name/[Code]"). + +For example, see the structure of the following example libraries `Foo` and `Bar`: + +|--lib +| | +| |--Bar +| | |--docs +| | |--examples +| | |--src +| | |- Bar.c +| | |- Bar.h +| | |- library.json (optional. for custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html +| | +| |--Foo +| | |- Foo.c +| | |- Foo.h +| | +| |- README --> THIS FILE +| +|- platformio.ini +|--src + |- main.c + +Example contents of `src/main.c` using Foo and Bar: +``` +#include +#include + +int main (void) +{ + ... +} + +``` + +The PlatformIO Library Dependency Finder will find automatically dependent +libraries by scanning project source files. + +More information about PlatformIO Library Dependency Finder +- https://docs.platformio.org/page/librarymanager/ldf.html diff --git a/src/Fab Matrixes/platformio.ini b/src/Fab Matrixes/platformio.ini new file mode 100644 index 0000000..a1fe3af --- /dev/null +++ b/src/Fab Matrixes/platformio.ini @@ -0,0 +1,15 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:seeed-xiao-rp2040] +platform = Seeed Studio +board = seeed-xiao-rp2040 +framework = arduino +lib_deps = adafruit/Adafruit NeoMatrix@^1.3.3 diff --git a/src/Fab Matrixes/src/main.cpp b/src/Fab Matrixes/src/main.cpp new file mode 100644 index 0000000..ccc135e --- /dev/null +++ b/src/Fab Matrixes/src/main.cpp @@ -0,0 +1,107 @@ +// Adafruit_NeoMatrix example for single NeoPixel Shield. +// Scrolls 'Howdy' across the matrix in a portrait (vertical) orientation. + +#include +#include +#include +#include "nyan.h" +#ifndef PSTR + #define PSTR // Make Arduino Due happy +#endif + +#define PIN D1 + +// MATRIX DECLARATION: +// Parameter 1 = width of NeoPixel matrix +// Parameter 2 = height of matrix +// Parameter 3 = pin number (most are valid) +// Parameter 4 = matrix layout flags, add together as needed: +// NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT: +// Position of the FIRST LED in the matrix; pick two, e.g. +// NEO_MATRIX_TOP + NEO_MATRIX_LEFT for the top-left corner. +// NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: LEDs are arranged in horizontal +// rows or in vertical columns, respectively; pick one or the other. +// NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: all rows/columns proceed +// in the same order, or alternate lines reverse direction; pick one. +// See example below for these values in action. +// Parameter 5 = pixel type flags, add together as needed: +// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) +// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) +// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) +// NEO_GRBW Pixels are wired for GRBW bitstream (RGB+W NeoPixel products) +// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) + + +// Example for NeoPixel Shield. In this application we'd like to use it +// as a 5x8 tall matrix, with the USB port positioned at the top of the +// Arduino. When held that way, the first pixel is at the top right, and +// lines are arranged in columns, progressive order. The shield uses +// 800 KHz (v2) pixels that expect GRB color data. + +void scrollingText(String text, int speed); +void playGif(const uint16_t* gifData[], int frameCount, int frameDelay); +void displayFullScreenBMP(const uint16_t* bitmap); + +Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32, 8, PIN, + NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT + + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG, + NEO_GRB + NEO_KHZ800); + +const uint16_t colors[] = { + matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) }; + +void setup() { + matrix.begin(); + matrix.setTextWrap(false); + matrix.setBrightness(40); + matrix.setTextColor(colors[0]); +} + +int x = matrix.width(); +int pass = 0; + +void loop() { + displayFullScreenBMP(EEP); +} + +void scrollingText(String text, int speed) { + matrix.fillScreen(0); + matrix.setCursor(x, 0); + matrix.print(text); + + if(--x < -(text.length() * 6)) { + x = matrix.width(); + if(++pass >= 3) pass = 0; + matrix.setTextColor(colors[pass]); + } + matrix.show(); + delay(speed); + +} + +void playGif(const uint16_t* gifData[], int frameCount, int frameDelay) { + int width = matrix.width(); // 32 + int height = matrix.height(); // 8 + + for (int i = 0; i < frameCount; i++) { + matrix.fillScreen(0); + + // Each element in gifData is a pointer to a complete frame + // No need for complicated offset calculations + const uint16_t* currentFrame = gifData[i]; + + // Draw the current frame + matrix.drawRGBBitmap(0, 0, currentFrame, width, height); + matrix.show(); + delay(frameDelay); + } +} + + + +void displayFullScreenBMP(const uint16_t* bitmap) { + int width = matrix.width(); + int height = matrix.height(); + matrix.drawRGBBitmap(0, 0, bitmap, width, height); + matrix.show(); +} \ No newline at end of file diff --git a/src/Fab Matrixes/src/nyan.h b/src/Fab Matrixes/src/nyan.h new file mode 100644 index 0000000..dfc76bf --- /dev/null +++ b/src/Fab Matrixes/src/nyan.h @@ -0,0 +1,216 @@ + + + +// 'frame_0_delay-0', 32x8px +const uint16_t nyanframe_0_delay_0 [] PROGMEM = { + 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0x94b3, 0xf43b, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xd512, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xf6ae, 0xf6ae, 0xf6ae, 0xf6ae, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xf6ae, 0xf6ae, 0xf6ae, 0xf6ae, 0xfcc0, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0xf4dd, 0xf4dd, 0xd512, 0x0108, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xf6ae, 0x4a6a, 0x4a6a, 0xf6ae, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0xf780, 0xf780, 0xf780, 0xf780, 0x37e0, 0x37e0, 0x4a6a, 0x6b8d, 0x4a6a, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x45cc, 0x4a6a, 0x6b8d, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x2b5e, 0x4154, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0x94b3, 0xd512, 0x94b3, 0x6b8d, 0x94b3, 0x94b3, 0x6b8d, 0x94b3, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x619f, 0x619f, 0x619f, 0x2b5e, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x2b5e, 0x619f, 0x619f, 0x619f, 0x2b5e, 0x94b3, 0xf6ae, 0xf43b, + 0xf4dd, 0xf4dd, 0xddf7, 0x94b3, 0x94b3, 0x4a6a, 0x4a6a, 0x4a6a, 0x4a6a, 0x94b3, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x6b8d, 0x6b8d, 0x6b8d, 0x94b3, + 0x94b3, 0x94b3, 0x94b3, 0x4a6a, 0x6b8d, 0x6b8d, 0x6b8d, 0x6b8d, 0x6b8d, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c +}; +// 'frame_1_delay-0', 32x8px +const uint16_t nyanframe_1_delay_0 [] PROGMEM = { + 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xeb42, 0x94b3, 0xf43b, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xd512, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xf6ae, 0xf6ae, 0xf6ae, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xf6ae, 0xf6ae, 0xf6ae, 0xf6ae, 0xfcc0, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xddf7, 0x6b8d, 0xddf7, 0xf4dd, 0xd512, 0x0108, 0x4a6a, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xf6ae, 0xf780, 0xf780, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x6b8d, 0x94b3, 0x6b8d, 0x4a6a, 0x94b3, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x37e0, 0x37e0, 0x37e0, 0xf780, 0xf780, 0xf780, 0xf780, 0x37e0, 0x37e0, 0x45cc, 0x6b8d, 0x6b8d, 0xf6ae, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x45cc, 0x6b8d, 0x6b8d, 0x6b8d, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, + 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x5a99, 0x6b8d, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0xd512, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0xd512, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, + 0x619f, 0x619f, 0x619f, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x2b5e, 0x619f, 0x619f, 0x619f, 0x2b5e, 0x2b5e, 0x94b3, 0xf6ae, 0xf43b, + 0xf4dd, 0xf4dd, 0xf43b, 0x94b3, 0x94b3, 0x6b8d, 0x4a6a, 0x4a6a, 0x4a6a, 0x6b8d, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x5a99, 0x6b8d, 0x6b8d, 0x94b3, + 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x4a6a, 0x6b8d, 0x6b8d, 0x6b8d, 0x6b8d, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c +}; +// 'frame_2_delay-0', 32x8px +const uint16_t nyanframe_2_delay_0 [] PROGMEM = { + 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0x94b3, 0xddf7, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xddf7, 0xd512, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xfcc0, 0xfcc0, 0xfcc0, 0xf6ae, 0xf6ae, 0xf6ae, 0xf6ae, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xf6ae, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0x94b3, 0xf4dd, 0xf4dd, 0xd512, 0x0108, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xf780, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x6b8d, 0xf4dd, 0xd512, 0x0108, 0x6b8d, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xf780, 0xf780, 0xf780, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0xf780, 0xf780, 0xf780, 0xf780, 0x37e0, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x6b8d, 0x6b8d, 0x94b3, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x45cc, 0x6b8d, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, + 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x5a99, 0x6b8d, 0x6b8d, 0x94b3, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x94b3, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, + 0x04bf, 0x04bf, 0x04bf, 0x2b5e, 0x619f, 0x619f, 0x619f, 0x2b5e, 0x04bf, 0x5a99, 0x6b8d, 0x6b8d, 0x5a99, 0x94b3, 0xf43b, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0xd512, 0x6b8d, 0x94b3, 0x6b8d, 0x6b8d, 0x94b3, 0xd512, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, + 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x5a99, 0x717c, 0x717c, 0x6b8d, 0xf6ae, 0xddf7, + 0xddf7, 0xddf7, 0xddf7, 0xd512, 0x6b8d, 0x94b3, 0x6b8d, 0x6b8d, 0x6b8d, 0x6b8d, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c +}; +// 'frame_3_delay-0', 32x8px +const uint16_t nyanframe_3_delay_0 [] PROGMEM = { + 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0x94b3, 0xddf7, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xddf7, 0xd512, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xf6ae, 0xf6ae, 0xf6ae, 0xf6ae, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xf6ae, 0xf6ae, 0xf6ae, 0xf6ae, 0xfcc0, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xf43b, 0xf43b, 0xf4dd, 0xf4dd, 0xd512, 0x0108, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xf780, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x6b8d, 0xf43b, 0xf4dd, 0xd512, 0x4a6a, 0x94b3, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0xf780, 0xf780, 0xf780, 0xf780, 0x37e0, 0x45cc, 0x6b8d, 0x6b8d, 0xd512, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0x6b8d, 0x6b8d, 0x6b8d, 0x94b3, 0x94b3, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x6b8d, 0x6b8d, 0x6b8d, 0x4a6a, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x2b5e, 0x4154, 0x01ac, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x94b3, 0x6b8d, 0x6b8d, 0x94b3, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x619f, 0x619f, 0x619f, 0x2b5e, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x2b5e, 0x619f, 0x619f, 0x619f, 0x2b5e, 0x94b3, 0xf43b, 0xf4dd, + 0xf4dd, 0xf4dd, 0x94b3, 0xd512, 0xd512, 0x6b8d, 0x6b8d, 0x94b3, 0x6b8d, 0xd512, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x717c, 0x018c, 0x6b8d, 0xf6ae, 0xddf7, + 0xddf7, 0xddf7, 0xddf7, 0x6b8d, 0x94b3, 0x6b8d, 0x6b8d, 0x6b8d, 0x6b8d, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c +}; +// 'frame_4_delay-0', 32x8px +const uint16_t nyanframe_4_delay_0 [] PROGMEM = { + 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0x94b3, 0xf43b, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xd512, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xf6ae, 0xf6ae, 0xf6ae, 0xf6ae, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0xf4dd, 0xf4dd, 0xd512, 0x0108, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xf6ae, 0x4a6a, 0x4a6a, 0xf6ae, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xf780, 0xf780, 0xf780, 0xf780, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0xf780, 0xf780, 0x4a6a, 0x6b8d, 0x4a6a, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x4a6a, 0x6b8d, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x5a99, 0x4154, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x94b3, 0x94b3, 0x6b8d, 0x94b3, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x2b5e, 0x619f, 0x619f, 0x619f, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x2b5e, 0x94b3, 0xf6ae, 0xf43b, + 0xf4dd, 0xf4dd, 0xddf7, 0x94b3, 0x94b3, 0x4a6a, 0x4a6a, 0x4a6a, 0x4a6a, 0x94b3, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x6b8d, 0x6b8d, 0x6b8d, 0x94b3, + 0x94b3, 0x94b3, 0x94b3, 0x4a6a, 0x6b8d, 0x6b8d, 0x6b8d, 0x6b8d, 0x6b8d, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x94b3 +}; +// 'frame_5_delay-0', 32x8px +const uint16_t nyanframe_5_delay_0 [] PROGMEM = { + 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0x94b3, 0xf43b, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xd512, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xfcc0, 0xfcc0, 0xfcc0, 0xf6ae, 0xf6ae, 0xf6ae, 0xf6ae, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xf6ae, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xddf7, 0x6b8d, 0xddf7, 0xf4dd, 0xd512, 0x0108, 0x4a6a, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xf6ae, 0xf780, 0xf780, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x6b8d, 0x94b3, 0x6b8d, 0x4a6a, 0x94b3, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xf780, 0xf780, 0xf780, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0xf780, 0xf780, 0x6b8d, 0x6b8d, 0x45cc, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x45cc, 0x6b8d, 0x6b8d, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, + 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x5a99, 0x6b8d, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0xd512, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0xd512, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, + 0x04bf, 0x04bf, 0x04bf, 0x2b5e, 0x2b5e, 0x619f, 0x619f, 0x2b5e, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x2b5e, 0x94b3, 0xf6ae, 0xf43b, + 0xf4dd, 0xf4dd, 0xf43b, 0x94b3, 0x94b3, 0x6b8d, 0x4a6a, 0x4a6a, 0x4a6a, 0x6b8d, 0x6b8d, 0x018c, 0x01ac, 0x018c, 0x018c, 0x018c, + 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x5a99, 0x6b8d, 0x6b8d, 0x94b3, + 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x4a6a, 0x6b8d, 0x6b8d, 0x6b8d, 0x6b8d, 0x4a6a, 0x018c, 0x018c, 0x6b8d, 0x018c, 0x018c, 0x018c +}; +// 'frame_6_delay-0', 32x8px +const uint16_t nyanframe_6_delay_0 [] PROGMEM = { + 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xeb42, 0x94b3, 0xddf7, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xddf7, 0xd512, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xf6ae, 0xf6ae, 0xf6ae, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xf6ae, 0xf6ae, 0xf6ae, 0xf6ae, 0xfcc0, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0x94b3, 0xf4dd, 0xf4dd, 0xd512, 0x0108, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x6b8d, + 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xf780, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x6b8d, 0xf4dd, 0xd512, 0x0108, 0x6b8d, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x6b8d, 0x6b8d, + 0x37e0, 0x37e0, 0x37e0, 0xf780, 0xf780, 0xf780, 0xf780, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0xf780, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x6b8d, 0x6b8d, 0x94b3, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x94b3, 0x018c, + 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x45cc, 0x6b8d, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x0108, 0x018c, 0x018c, 0x6b8d, 0x6b8d, + 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x4154, 0x6b8d, 0x94b3, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x94b3, 0x0108, 0x018c, 0x018c, 0x018c, 0x01ac, + 0x619f, 0x619f, 0x619f, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x2b5e, 0x619f, 0x5a99, 0x6b8d, 0x6b8d, 0x5a99, 0x94b3, 0xf43b, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0xd512, 0x6b8d, 0x94b3, 0x6b8d, 0x94b3, 0x94b3, 0xd512, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, + 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x5a99, 0x717c, 0x717c, 0x6b8d, 0xf6ae, 0xddf7, + 0xddf7, 0xddf7, 0xddf7, 0xd512, 0x6b8d, 0x94b3, 0x6b8d, 0x6b8d, 0x6b8d, 0x6b8d, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c +}; +// 'frame_7_delay-0', 32x8px +const uint16_t nyanframe_7_delay_0 [] PROGMEM = { + 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0x94b3, 0xddf7, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xf4dd, 0xddf7, 0xd512, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xf780, 0xf780, 0xf780, 0xf780, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xf43b, 0xf43b, 0xf4dd, 0xf4dd, 0xd512, 0x0108, 0x0108, 0x018c, 0x94b3, 0x01ac, 0x018c, 0x018c, 0x018c, + 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xf780, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x6b8d, 0xf43b, 0xf4dd, 0xd512, 0x4a6a, 0x94b3, 0x0108, 0x01ac, 0x018c, 0x018c, 0x018c, 0x018c, + 0xf780, 0xf780, 0xf780, 0xf780, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0xf780, 0xd512, 0x6b8d, 0x6b8d, 0x45cc, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0x6b8d, 0x6b8d, 0x6b8d, 0x94b3, 0x94b3, 0x0108, 0x018c, 0x018c, 0x94b3, 0x018c, 0x018c, + 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x45cc, 0x6b8d, 0x6b8d, 0x4a6a, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x4a6a, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, + 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x5a99, 0x5a99, 0x01ac, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x94b3, 0x6b8d, 0x6b8d, 0x94b3, 0x6b8d, 0x6b8d, 0x01ac, 0x018c, 0x018c, 0x018c, + 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x619f, 0x619f, 0x619f, 0x619f, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x2b5e, 0x94b3, 0xf43b, 0xf4dd, + 0xf4dd, 0xf4dd, 0x94b3, 0xd512, 0xd512, 0x6b8d, 0x6b8d, 0x94b3, 0x6b8d, 0xd512, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x018c, 0x6b8d, 0xf6ae, 0xddf7, + 0xddf7, 0xddf7, 0xddf7, 0x6b8d, 0x94b3, 0x6b8d, 0x6b8d, 0x6b8d, 0x6b8d, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c +}; +// 'frame_8_delay-0', 32x8px +const uint16_t nyanframe_8_delay_0 [] PROGMEM = { + 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0x94b3, 0xddf7, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf4dd, 0xf43b, 0xf4dd, 0xf4dd, 0xddf7, 0xd512, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xfcc0, 0xfcc0, 0xfcc0, 0xf6ae, 0xf6ae, 0xf6ae, 0xf6ae, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xf6ae, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0xf4dd, 0xf4dd, 0xd512, 0x0108, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xf6ae, 0xf780, 0xf780, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x0108, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0xf780, 0xf780, 0xf780, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0xf780, 0xf780, 0x6b8d, 0x6b8d, 0x45cc, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x94b3, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x45cc, 0x6b8d, 0x6b8d, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x5a99, 0x6b8d, 0x94b3, 0xf4dd, 0xf4dd, + 0xf4dd, 0xf4dd, 0x94b3, 0x94b3, 0x94b3, 0x6b8d, 0x94b3, 0x94b3, 0x6b8d, 0x94b3, 0x6b8d, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x04bf, 0x04bf, 0x04bf, 0x2b5e, 0x619f, 0x619f, 0x619f, 0x2b5e, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x2b5e, 0x94b3, 0xf43b, 0xf4dd, + 0xf4dd, 0xf4dd, 0xf43b, 0x94b3, 0x94b3, 0x4a6a, 0x4a6a, 0x4a6a, 0x4a6a, 0x94b3, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x619f, 0x717c, 0x717c, 0x717c, 0x6b8d, 0x6b8d, 0xf6ae, 0xddf7, + 0xddf7, 0xddf7, 0xddf7, 0xd512, 0x6b8d, 0x6b8d, 0x6b8d, 0x6b8d, 0x6b8d, 0x4a6a, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c +}; + +// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 2448) +const int nyanallArray_LEN = 9; +const uint16_t* nyanallArray[9] = { + nyanframe_0_delay_0, + nyanframe_1_delay_0, + nyanframe_2_delay_0, + nyanframe_3_delay_0, + nyanframe_4_delay_0, + nyanframe_5_delay_0, + nyanframe_6_delay_0, + nyanframe_7_delay_0, + nyanframe_8_delay_0 +}; + + +//EEEEEP +// 'pixil-frame-0(1)', 32x8px +const uint16_t EEP [] PROGMEM = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xff80, 0xe8e4, 0xff80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff80, 0xe8e4, 0xff80, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xff80, 0xff80, 0xe8e4, 0xff80, 0xff80, 0x0000, 0x0000, 0xe8e4, 0xe8e4, 0xe8e4, 0xe8e4, 0x0000, 0xe8e4, + 0xe8e4, 0xe8e4, 0xe8e4, 0x0000, 0xe8e4, 0xe8e4, 0xe8e4, 0x0000, 0xff80, 0xff80, 0xe8e4, 0xff80, 0xff80, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xff80, 0xff80, 0xff80, 0xe8e4, 0xff80, 0xff80, 0xff80, 0x0000, 0xe8e4, 0x0000, 0x0000, 0x0000, 0x0000, 0xe8e4, + 0x0000, 0x0000, 0x0000, 0x0000, 0xe8e4, 0x0000, 0x0000, 0xe8e4, 0xff80, 0xff80, 0xe8e4, 0xff80, 0xff80, 0xff80, 0x0000, 0x0000, + 0x0000, 0xff80, 0xff80, 0xff80, 0xff80, 0xe8e4, 0xff80, 0xff80, 0xff80, 0xff80, 0xe8e4, 0xe8e4, 0xe8e4, 0x0000, 0x0000, 0xe8e4, + 0xe8e4, 0xe8e4, 0x0000, 0x0000, 0xe8e4, 0xe8e4, 0xe8e4, 0xff80, 0xff80, 0xff80, 0xe8e4, 0xff80, 0xff80, 0xff80, 0xff80, 0x0000, + 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xe8e4, 0x0000, 0x0000, 0x0000, 0x0000, 0xe8e4, + 0x0000, 0x0000, 0x0000, 0x0000, 0xe8e4, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, + 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xe8e4, 0xff80, 0xff80, 0xff80, 0xff80, 0xe8e4, 0xe8e4, 0xe8e4, 0xe8e4, 0x0000, 0xe8e4, + 0xe8e4, 0xe8e4, 0xe8e4, 0x0000, 0xe8e4, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xe8e4, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, + 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80 +}; + +// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 272) +const int eepallArray_LEN = 1; +const uint16_t* eepallArray[1] = { + EEP +}; diff --git a/src/Fab Matrixes/test/README b/src/Fab Matrixes/test/README new file mode 100644 index 0000000..9b1e87b --- /dev/null +++ b/src/Fab Matrixes/test/README @@ -0,0 +1,11 @@ + +This directory is intended for PlatformIO Test Runner and project tests. + +Unit Testing is a software testing method by which individual units of +source code, sets of one or more MCU program modules together with associated +control data, usage procedures, and operating procedures, are tested to +determine whether they are fit for use. Unit testing finds problems early +in the development cycle. + +More information about PlatformIO Unit Testing: +- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html diff --git a/src/drone/src/main.cpp b/src/drone/src/main.cpp index 40dc609..60c04ae 100644 --- a/src/drone/src/main.cpp +++ b/src/drone/src/main.cpp @@ -157,10 +157,8 @@ BNO080 myIMU; #define ACCEL_SCALE_FACTOR 1.0 // BNO085 gives values already in g's when converted in getIMUdata #endif -#define LEDC_FREQ 500 // PWM frequency in Hz for OneShot125 (can be higher) -#define LEDC_RESOLUTION 13 // 13-bit resolution gives values from 0-8191 -#define LEDC_TIMER LEDC_TIMER_0 // Use timer 0 -#define LEDC_MODE LEDC_HIGH_SPEED_MODE // Use high-speed mode +#define LEDC_FREQ 50 +#define LEDC_RESOLUTION 16 //========================================================================================================================// @@ -238,10 +236,10 @@ const int ch5Pin = D7; // gear (throttle cut) const int ch6Pin = D7; // aux1 (free aux channel) const int PPM_Pin = D7; // OneShot125 ESC pin outputs: -const int m1Pin = D0; -const int m2Pin = D1; -const int m3Pin = D2; -const int m4Pin = D3; +const int m1Pin = D2; +const int m2Pin = D3; +const int m3Pin = D9; +const int m4Pin = D10; const int m5Pin = D7; const int m6Pin = D8; @@ -329,6 +327,8 @@ void scaleCommands(); void getCommands(); void failSafe(); void commandMotors(); +void Madgwick(float gx, float gy, float gz, float ax, float ay, float az, float mx, float my, float mz, float invSampleFreq); +void Madgwick6DOF(float gx, float gy, float gz, float ax, float ay, float az, float invSampleFreq); void armMotors(); void calibrateESCs(); float floatFaderLinear(float param, float param_min, float param_max, float fadeTime, int state, int loopFreq); @@ -354,6 +354,7 @@ void OnDataRecv(const uint8_t *mac, const uint8_t *incomingData, int len); void ESPNowSetup(); void printDebugInfo(); void setupMotorPWM(); +int pulseWidthToDutyCycle(int pulseWidth); //========================================================================================================================// // VOID SETUP // //========================================================================================================================// @@ -583,8 +584,8 @@ void IMUinit() if (myIMU.begin() == false) // from sparkfun example { Serial.println("BNO080 not detected at default I2C address. Check your jumpers and the hookup guide. Freezing..."); - while (1) - ; + // while (1) + // ; } Wire.setClock(400000); // Increase I2C data rate to 400kHz Serial.println("IMU initialized"); @@ -1426,16 +1427,24 @@ void commandMotors() { uint32_t m4_duty = map(m4_command_PWM, 125, 250, 1100, 2000); uint32_t m5_duty = map(m5_command_PWM, 125, 250, 1100, 2000); uint32_t m6_duty = map(m6_command_PWM, 125, 250, 1100, 2000); - - //may need to add pulsewidth to duty cycle conversion + + //debug shizzle + // Serial.print("m1_duty: "); + // Serial.println(m1_duty); + // Serial.print("m2_duty: "); + // Serial.println(m2_duty); + // Serial.print("m3_duty: "); + // Serial.println(m3_duty); + // Serial.print("m4_duty: "); + // Serial.println(m4_duty); // Write the duty cycle values directly to each pin - ledcWrite(m1Pin, m1_duty); - ledcWrite(m2Pin, m2_duty); - ledcWrite(m3Pin, m3_duty); - ledcWrite(m4Pin, m4_duty); - ledcWrite(m5Pin, m5_duty); - ledcWrite(m6Pin, m6_duty); + ledcWrite(m1Pin, pulseWidthToDutyCycle(m1_duty)); + ledcWrite(m2Pin, pulseWidthToDutyCycle(m2_duty)); + ledcWrite(m3Pin, pulseWidthToDutyCycle(m3_duty)); + ledcWrite(m4Pin, pulseWidthToDutyCycle(m4_duty)); + ledcWrite(m5Pin, pulseWidthToDutyCycle(m5_duty)); + ledcWrite(m6Pin, pulseWidthToDutyCycle(m6_duty)); } void armMotors() @@ -1610,6 +1619,12 @@ void setupMotorPWM() { ledcAttach(m6Pin, LEDC_FREQ, LEDC_RESOLUTION); } +// Function to convert pulse width to LEDC duty cycle +int pulseWidthToDutyCycle(int pulseWidth) { + int maxDuty = (1 << LEDC_RESOLUTION) - 1; + return (pulseWidth * maxDuty) / 20000; // Convert to 16-bit duty cycle +} + void calibrateMagnetometer() { #if defined USE_MPU9250_SPI diff --git a/src/workshopCode/ledExampleRP2040/ledExampleRP2040.ino b/src/workshopCode/ledExampleRP2040/ledExampleRP2040.ino deleted file mode 100644 index c82edf6..0000000 --- a/src/workshopCode/ledExampleRP2040/ledExampleRP2040.ino +++ /dev/null @@ -1,24 +0,0 @@ -void setup() { -pinMode(PIN_LED_R, OUTPUT); -pinMode(PIN_LED_G, OUTPUT); -pinMode(PIN_LED_B, OUTPUT); - -Serial.begin(9600); - -digitalWrite(PIN_LED_R, HIGH); -digitalWrite(PIN_LED_G, HIGH); -digitalWrite(PIN_LED_B, HIGH); - -} - -void loop() { - -digitalWrite(LED_BUILTIN, 0); //Turn the led on RP2040 is reversed - -Serial.println("on"); -delay(10); -digitalWrite(LED_BUILTIN, 1); -Serial.println("off"); -delay(10); - -}