Compare commits

...

3 Commits

Author SHA1 Message Date
27935b52fb added code for matrixes 2025-05-22 17:20:14 +02:00
c3a9ff919d docs update 2025-05-22 13:43:13 +02:00
7cea94942a BOM 2025-05-22 11:47:32 +02:00
11 changed files with 510 additions and 55 deletions

View File

@@ -1,4 +1,4 @@
# Idea final project
# Final project
## Introduction
I wanted to combine 2 random objects that interest me into one project. A drone and a jumbotron. So im gonna make a drone with multiple screens on it that could for example be used for traffic control or entertainment purposes.
@@ -436,11 +436,45 @@ Later on I realized I also killed my IMU. Because there wasn't any resistance be
* [x] Test physical controller
## BOM (bill of materials)
| item | price | link |
| :---- | ----- | -------- |
| item1 | 999 | link.com |
## Files
### Drone
#### Parts
| item | price | link |
| :-------------------- | ------- | --------------------------------------------------------------------------------------- |
| 700 grams of filament | € 14 | Any PLA |
| Matrix panel * 2 | € 17,78 | https://aliexpress.com/item/4001296811800.html |
| BLDC ESC * 4 | € 26,76 | https://aliexpress.com/item/1005006947824850.html |
| BLDC Motor 1500KV | € 34,39 | https://aliexpress.com/item/1005006859037930.html |
| 4S Li-Po * 2 | € 15,86 | https://hobbyking.com/en_us/turnigy-nano-tech-plus-1400mah-4s-70c-lipo-pack-w-xt60.html |
| Propellors 7040 | € 6,99 | https://aliexpress.com/item/1005008125599756.html |
| XT-60 connectors | € 1,40 | https://aliexpress.com/item/1005007228544590.html |
| Wiring 26 AWG | € 1,63 | https://aliexpress.com/item/1005007213319794.html |
| seeed XIAO RP2040 | $ 3,99 | https://www.seeedstudio.com/XIAO-RP2040-v1-0-p-5026.html |
| seeed XIAO ESP-C6 | $ 5,20 | https://www.seeedstudio.com/Seeed-Studio-XIAO-ESP32C6-p-5884.html |
| smd male header pins | € 2,99 | https://aliexpress.com/item/32796117265.html |
| M4 screws and nuts | | https://aliexpress.com/item/4001072025844.html |
| M4 Threaded inserts | | https://aliexpress.com/item/1005003582355741.html |
| | | |
#### Files
* [Drone main body F3D]
* [Drone arm F3D]
* [Drone main body STL]
* [Drone main arm STL]
* [Drone side panel STL]
* [Drone PCB's KiCad]
* [Drone Software]
* [Matrix Software]
### Drone controller
#### Parts
| item | price | link |
| :-------------------- | ------- | ---------------------------------------------------------------------------------- |
| XIAO ESP-C3 | $ 4,99 | https://www.seeedstudio.com/seeed-xiao-esp32c3-p-5431.html |
| Hall effect joysticks | € 11,99 | https://aliexpress.com/item/1005007462081151.html |
| Analog Multiplexer IC | $ 0,57 | https://www.digikey.com/en/products/detail/texas-instruments/CD74HC4067M96/1507236 |
| | | |
#### Files
* [Handheld controller pcb](Drone%20controller.zip)
* [Drone motor 3D file](https://grabcad.com/library/readytosky-rs2205-1)

View File

@@ -1,7 +0,0 @@
# Microcontrollers
## Microcontroller requirements
* 4 channel pwm output for 4 drone motors
* 16 bit pwm so all electronic speed controllers can understand
* Minimum 2 MB flash size
* I2C

5
src/Fab Matrixes/.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
.pio
.vscode/.browse.c_cpp.db*
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch

View File

@@ -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

View File

@@ -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 <Foo.h>
#include <Bar.h>
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

View File

@@ -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

View File

@@ -0,0 +1,107 @@
// Adafruit_NeoMatrix example for single NeoPixel Shield.
// Scrolls 'Howdy' across the matrix in a portrait (vertical) orientation.
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#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();
}

216
src/Fab Matrixes/src/nyan.h Normal file
View File

@@ -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
};

View File

@@ -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

View File

@@ -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

View File

@@ -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);
}