Skip to content

Instantly share code, notes, and snippets.

@jdiez17
Created December 28, 2013 13:30
Show Gist options
  • Save jdiez17/8159524 to your computer and use it in GitHub Desktop.
Save jdiez17/8159524 to your computer and use it in GitHub Desktop.
#include <avr/pgmspace.h>
#define LAYER_TIME 3333
#define LAYER_BITS 16
#define FRAME_TIME 20
enum {
ANIMATION_SCRIPTED,
ANIMATION_RANDOM,
ANIMATION_SENSING
};
int mode = ANIMATION_SENSING;
PROGMEM prog_uchar drip[] =
{
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111,B1111,B1111, 30,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0111,B1111,B1111,B1111, 10,
B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111,B1111,B1111,B1111, 10,
B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111,B1111,B1111,B1111, 10,
B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0011,B1111,B1111,B1111, 10,
B1000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011,B1111,B1111,B1111, 10,
B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011,B1111,B1111,B1111, 10,
B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0001,B1111,B1111,B1111, 10,
B1100,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B1111,B1111,B1111, 10,
B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B1111,B1111,B1111, 10,
B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B1111,B1111,B1111, 10,
B1110,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111,B1111, 10,
B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111,B1111, 10,
B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0111,B1111,B1111, 10,
B1111,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111,B1111,B1111, 10,
B1111,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111,B1111,B1111, 10,
B1111,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0011,B1111,B1111, 10,
B1111,B1000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011,B1111,B1111, 10,
B1111,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011,B1111,B1111, 10,
B1111,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0001,B1111,B1111, 10,
B1111,B1100,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B1111,B1111, 10,
B1111,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B1111,B1111, 10,
B1111,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B1111,B1111, 10,
B1111,B1110,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111, 10,
B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111, 10,
B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0111,B1111, 10,
B1111,B1111,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111,B1111, 10,
B1111,B1111,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111,B1111, 10,
B1111,B1111,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0011,B1111, 10,
B1111,B1111,B1000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011,B1111, 10,
B1111,B1111,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011,B1111, 10,
B1111,B1111,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0001,B1111, 10,
B1111,B1111,B1100,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B1111, 10,
B1111,B1111,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B1111, 10,
B1111,B1111,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B1111, 10,
B1111,B1111,B1110,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111, 10,
B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111, 10,
B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0111, 10,
B1111,B1111,B1111,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111, 10,
B1111,B1111,B1111,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111, 10,
B1111,B1111,B1111,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0011, 10,
B1111,B1111,B1111,B1000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011, 10,
B1111,B1111,B1111,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011, 10,
B1111,B1111,B1111,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0001, 10,
B1111,B1111,B1111,B1100,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001, 10,
B1111,B1111,B1111,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001, 10,
B1111,B1111,B1111,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1110,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 0
};
PROGMEM prog_uchar reverse_drip[] =
{
B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1110,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001, 10,
B1111,B1111,B1111,B1100,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001, 10,
B1111,B1111,B1111,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0001, 10,
B1111,B1111,B1111,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011, 10,
B1111,B1111,B1111,B1000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011, 10,
B1111,B1111,B1111,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0011, 10,
B1111,B1111,B1111,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111, 10,
B1111,B1111,B1111,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111, 10,
B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0111, 10,
B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111, 10,
B1111,B1111,B1110,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111, 10,
B1111,B1111,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B1111, 10,
B1111,B1111,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B1111, 10,
B1111,B1111,B1100,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B1111, 10,
B1111,B1111,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0001,B1111, 10,
B1111,B1111,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011,B1111, 10,
B1111,B1111,B1000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011,B1111, 10,
B1111,B1111,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0011,B1111, 10,
B1111,B1111,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111,B1111, 10,
B1111,B1111,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111,B1111, 10,
B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0111,B1111, 10,
B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111, 10,
B1111,B1110,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111, 10,
B1111,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B1111,B1111, 10,
B1111,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B1111,B1111, 10,
B1111,B1100,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B1111,B1111, 10,
B1111,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0001,B1111,B1111, 10,
B1111,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011,B1111,B1111, 10,
B1111,B1000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011,B1111,B1111, 10,
B1111,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0011,B1111,B1111, 10,
B1111,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111,B1111,B1111, 10,
B1111,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111,B1111,B1111, 10,
B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0111,B1111,B1111, 10,
B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111,B1111, 10,
B1110,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111,B1111, 10,
B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B1111,B1111,B1111, 10,
B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B1111,B1111,B1111, 10,
B1100,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B1111,B1111,B1111, 10,
B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0001,B1111,B1111,B1111, 10,
B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011,B1111,B1111,B1111, 10,
B1000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011,B1111,B1111,B1111, 10,
B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0011,B1111,B1111,B1111, 10,
B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111,B1111,B1111,B1111, 10,
B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0111,B1111,B1111,B1111, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0111,B1111,B1111,B1111, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111,B1111,B1111, 30,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 0
};
PROGMEM prog_uchar diagonal[] =
{
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111,B1111,B1111, 25,
B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111, 25,
B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000, 25,
B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100, 15,
B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010, 15,
B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001, 15,
B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000, 15,
B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000, 15,
B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000, 15,
B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111, 15,
B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001, 25,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 0
};
PROGMEM prog_uchar spin[] =
{
B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001, 10,
B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000, 10,
B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000, 10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000, 10,
B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100, 10,
B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010, 10,
B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001, 10,
B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000, 10,
B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000, 10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000, 10,
B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001, 10,
B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000, 10,
B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000, 10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000, 10,
B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100, 10,
B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010, 10,
B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001, 10,
B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000, 10,
B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000, 10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000, 10,
B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001, 10,
B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000, 10,
B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000, 10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000, 10,
B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100, 10,
B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010, 10,
B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001, 10,
B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000, 10,
B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000, 10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000, 10,
B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001, 10,
B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000, 10,
B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000, 10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 0
};
PROGMEM prog_uchar on_and_off[] =
{
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0100,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0110,B0110,B0000,B0000,B0100,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B1001,B0110,B0110,B1001,B0000,B0110,B0110,B0000,B0000,B0100,B0010,B0000,B0000,B0000,B0000,B0000, 10,
B1101,B0111,B1110,B1011,B1001,B0110,B0110,B1001,B0000,B0110,B0110,B0000,B0000,B0100,B0010,B0000, 10,
B1111,B1111,B1111,B1111,B1101,B0111,B1110,B1011,B1001,B0110,B0110,B1001,B0000,B0110,B0110,B0000, 10,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1101,B0111,B1110,B1011,B1001,B0110,B0110,B1001, 10,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1101,B0111,B1110,B1011, 10,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111, 10,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 0
};
PROGMEM prog_uchar snake[] =
{
B0000,B0000,B1000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B1000,B1000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B1000,B1000,B1000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B1100,B1000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B1110,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B1110,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0110,B0000,B0000,B0000,B0011,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0010,B0000,B0000,B0000,B0011,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0011,B0001,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0001,B0001,B0001,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0001,B0001,B0011,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1110,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1100,B0000,B0000,B1000,B1000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B1100,B1000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1110,B1000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0111,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0001,B0011,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0001,B0001,B0000,B0001,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0001,B0000,B0000,B0011,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0111,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1110,B1000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1100,B1100,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B1110,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0111,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0011,B0000,B0000, 10,
B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 0
};
PROGMEM prog_uchar wireframe[] =
{
B1111,B1001,B1001,B1111,B1001,B0000,B0000,B1001,B1001,B0000,B0000,B1001,B1111,B1001,B1001,B1111, 20,
B0000,B0000,B0000,B0000,B0000,B0110,B0110,B0000,B0000,B0110,B0110,B0000,B0000,B0000,B0000,B0000, 20,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 0
};
PROGMEM prog_uchar rand_animation[] =
{
B1011,B0101,B1000,B1001,B1110,B0011,B0101,B1111,B0000,B0111,B1101,B0000,B1001,B0010,B0100,B1010, 10,
B0111,B1001,B0101,B1001,B1000,B1101,B0101,B1011,B0111,B1001,B1111,B1001,B0101,B0000,B0111,B1110, 10,
B1000,B1011,B0001,B1011,B1001,B1100,B1101,B0100,B0011,B1110,B0001,B0110,B1011,B0000,B1110,B1001, 10,
B0101,B1001,B0001,B0001,B0001,B0001,B1011,B1001,B0100,B1000,B1111,B0110,B1001,B0001,B1110,B1100, 10,
B0011,B1000,B1011,B1110,B0000,B0101,B0011,B0010,B1001,B1100,B0110,B0000,B1100,B1000,B0101,B0100, 10,
B1111,B0001,B0100,B1001,B1110,B0101,B0101,B1111,B0000,B1001,B0001,B0000,B0011,B1101,B0010,B0010, 10,
B1110,B1110,B1010,B1000,B1101,B1010,B0110,B1000,B0110,B1001,B0100,B0011,B1100,B0001,B0100,B0111, 10,
B0111,B0000,B1011,B1001,B0010,B1110,B0001,B0010,B1011,B1000,B1101,B1011,B1110,B1010,B0000,B1110, 10,
B1101,B0011,B0010,B0100,B1101,B0101,B1101,B0101,B1010,B0110,B0100,B0010,B0111,B0000,B1100,B1010, 10,
B1001,B1011,B1001,B1101,B1100,B1010,B1011,B1010,B1100,B0100,B1011,B1001,B0101,B1010,B0000,B0001, 10,
B1001,B0001,B0000,B1010,B0101,B0110,B1011,B0010,B1000,B1111,B0101,B1010,B1101,B1100,B1110,B1011, 10,
B1000,B1111,B1111,B0111,B1101,B1110,B1011,B0101,B0001,B0101,B0010,B0100,B0110,B1110,B1110,B1101, 10,
B1101,B1101,B0100,B0110,B0010,B1111,B1010,B0111,B0010,B0111,B1111,B1101,B0111,B0111,B0110,B0011, 10,
B1001,B1101,B0000,B1011,B0110,B1001,B1100,B1010,B1001,B0001,B1001,B1001,B0000,B1000,B1110,B0011, 10,
B1100,B0010,B1001,B1000,B1000,B0111,B1111,B1101,B0000,B0011,B0001,B0101,B0100,B0101,B1011,B0011, 10,
B1010,B0101,B1100,B0010,B0111,B0010,B0101,B1001,B0001,B0000,B0111,B0100,B1100,B0101,B0101,B0010, 10,
B0011,B1100,B0110,B1011,B0101,B0101,B1110,B1101,B0001,B0100,B1001,B1110,B0011,B0100,B0101,B0000, 10,
B1100,B0011,B0110,B1110,B1101,B1111,B1010,B1100,B1111,B0101,B1100,B0111,B1011,B1110,B0101,B0110, 10,
B0010,B0000,B0010,B1100,B1011,B0100,B1101,B0110,B1001,B1101,B0000,B1111,B1011,B0110,B0001,B0001, 10,
B0010,B0010,B1001,B0011,B0110,B0011,B1111,B0000,B1110,B0011,B1010,B0010,B0110,B1111,B1100,B1011, 10,
B1010,B0100,B1101,B1110,B1010,B0110,B0000,B0001,B0111,B1011,B1011,B1100,B1110,B0110,B0001,B1000, 10,
B0010,B1010,B1011,B0011,B1110,B1111,B1000,B0111,B0100,B1010,B0110,B1110,B1001,B0111,B0010,B1111, 10,
B1001,B1110,B0010,B0001,B1111,B1000,B1111,B0000,B1111,B1111,B0100,B1100,B1011,B0000,B0110,B1011, 10,
B1010,B0010,B0110,B1110,B1100,B0100,B0001,B0011,B0111,B1001,B0001,B1111,B1101,B0010,B0101,B1111, 10,
B1011,B0010,B0111,B1001,B1101,B1011,B1100,B0100,B1111,B1111,B0010,B0010,B0101,B0100,B1111,B1010, 10,
B1100,B1001,B0100,B1011,B1001,B1011,B1100,B0000,B0011,B1100,B0010,B1101,B1011,B0000,B0011,B1110, 10,
B0101,B0100,B0111,B0010,B0101,B0010,B0001,B1001,B0101,B0011,B1000,B0010,B1011,B0001,B1010,B1001, 10,
B1011,B1001,B1001,B0010,B0101,B1101,B1110,B1011,B0011,B1001,B1010,B0111,B0011,B1101,B1011,B1000, 10,
B1110,B0110,B0000,B0110,B0110,B0001,B1000,B0100,B0111,B0010,B1011,B0100,B1010,B1110,B0111,B0100, 10,
B0110,B1010,B0100,B1110,B0101,B0000,B0000,B1100,B1011,B0011,B1110,B1101,B1111,B0100,B1001,B0011, 10,
B1110,B1100,B0010,B0100,B0100,B1110,B1101,B1001,B1101,B1011,B1111,B0100,B1100,B1100,B0111,B1110, 10,
B0010,B0001,B0111,B1110,B1110,B1000,B0101,B0110,B0010,B0111,B1001,B1000,B0110,B1011,B1111,B0000, 10,
B0110,B0101,B1101,B1001,B0001,B1000,B0000,B0000,B0001,B1011,B1000,B0010,B0011,B0110,B1111,B1101, 10,
B0010,B0100,B1101,B1001,B0010,B1011,B1001,B1000,B1011,B1001,B0101,B1000,B0110,B1100,B1110,B1111, 10,
B0011,B1110,B0001,B0010,B1100,B1110,B0010,B0000,B1010,B0101,B0111,B1000,B0110,B1111,B1010,B1111, 10,
B0001,B0111,B1001,B0010,B0110,B0111,B1101,B1011,B1001,B0000,B0100,B1010,B1100,B0110,B1100,B1000, 10,
B0011,B0001,B1000,B0100,B0110,B1110,B0000,B1001,B0111,B0000,B0001,B1000,B1001,B0011,B0101,B0011, 10,
B1010,B0101,B1110,B0111,B1100,B1111,B1011,B0100,B0011,B1111,B1001,B1111,B0101,B0100,B0001,B1111, 10,
B0101,B1100,B0101,B0101,B0100,B1010,B1101,B1000,B0111,B1101,B0110,B0000,B1011,B1111,B1010,B0101, 10,
B1110,B0111,B1111,B1010,B1000,B0001,B1010,B1010,B1000,B1100,B1100,B1010,B0001,B0011,B0101,B0101, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 0
};
PROGMEM prog_uchar surfaces[] =
{
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111,B1111,B1111, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111,B0000,B0000,B0000,B0000,B1111,B1111, 10,
B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B1111, 10,
B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111, 10,
B1111,B0000,B0000,B0000,B1111,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B1111,B0000, 10,
B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000, 10,
B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000, 10,
B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000, 10,
B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111, 10,
B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100, 10,
B0000,B0001,B0010,B1100,B0000,B0001,B0010,B1100,B0000,B0001,B0010,B1100,B0000,B0001,B0010,B1100, 10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000, 10,
B0010,B0010,B0100,B1000,B0010,B0010,B0100,B1000,B0010,B0010,B0100,B1000,B0010,B0010,B0100,B1000, 10,
B0100,B0100,B0100,B1000,B0100,B0100,B0100,B1000,B0100,B0100,B0100,B1000,B0100,B0100,B0100,B1000, 10,
B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000, 10,
B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100, 10,
B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010, 10,
B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001, 10,
B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010, 10,
B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100, 10,
B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B1000,B1000,B1000,B1000, 10,
B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B1100,B1100,B1100,B1100,B0000,B0000,B0000,B0000, 10,
B0001,B0001,B0001,B0001,B1110,B1110,B1110,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0000, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111,B1111,B1111, 10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 0
};
PROGMEM prog_uchar turn_on[] =
{
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000, 30,
B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000, 5,
B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1001,B0000,B0000,B0000,B0000,B0000, 5,
B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B1001,B0000,B0000,B0000,B0000,B0000, 5,
B0100,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0001,B1001,B0000,B0000,B0000,B0000,B0000, 5,
B0100,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0001,B1001,B0000,B0000,B0000,B0001,B0000, 5,
B0100,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B1000,B0001,B1001,B0000,B0000,B0000,B0001,B0000, 5,
B0100,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B1010,B0001,B1001,B0000,B0000,B0000,B0001,B0000, 5,
B0100,B0000,B0000,B0100,B0100,B0000,B0000,B0000,B1010,B0001,B1001,B0000,B0000,B0000,B0001,B0000, 5,
B0100,B0000,B0000,B0100,B0100,B0000,B0000,B1000,B1010,B0001,B1001,B0000,B0000,B0000,B0001,B0000, 5,
B0100,B0100,B0000,B0100,B0100,B0000,B0000,B1000,B1010,B0001,B1001,B0000,B0000,B0000,B0001,B0000, 5,
B0100,B0100,B0000,B0100,B0100,B0000,B0000,B1000,B1010,B0001,B1001,B0000,B0000,B0001,B0001,B0000, 5,
B1100,B0100,B0000,B0100,B0100,B0000,B0000,B1000,B1010,B0001,B1001,B0000,B0000,B0001,B0001,B0000, 5,
B1100,B0100,B0000,B0100,B0100,B0000,B0001,B1000,B1010,B0001,B1001,B0000,B0000,B0001,B0001,B0000, 5,
B1100,B0100,B0000,B0100,B0100,B0000,B0101,B1000,B1010,B0001,B1001,B0000,B0000,B0001,B0001,B0000, 5,
B1100,B0100,B0000,B0100,B0100,B0000,B0101,B1000,B1110,B0001,B1001,B0000,B0000,B0001,B0001,B0000, 5,
B1100,B0100,B0000,B0100,B0100,B0000,B0101,B1000,B1110,B0001,B1101,B0000,B0000,B0001,B0001,B0000, 5,
B1100,B0100,B0000,B0100,B0100,B0000,B0101,B1000,B1110,B0001,B1101,B0000,B0000,B0001,B0001,B0100, 5,
B1100,B0100,B0000,B0100,B1100,B0000,B0101,B1000,B1110,B0001,B1101,B0000,B0000,B0001,B0001,B0100, 5,
B1100,B0100,B0000,B0100,B1100,B0001,B0101,B1000,B1110,B0001,B1101,B0000,B0000,B0001,B0001,B0100, 5,
B1100,B0100,B0000,B0100,B1100,B0001,B0101,B1000,B1110,B0001,B1101,B0000,B0000,B0101,B0001,B0100, 5,
B1100,B0100,B0000,B0110,B1100,B0001,B0101,B1000,B1110,B0001,B1101,B0000,B0000,B0101,B0001,B0100, 5,
B1100,B0100,B0000,B0110,B1110,B0001,B0101,B1000,B1110,B0001,B1101,B0000,B0000,B0101,B0001,B0100, 5,
B1100,B0100,B0000,B1110,B1110,B0001,B0101,B1000,B1110,B0001,B1101,B0000,B0000,B0101,B0001,B0100, 5,
B1100,B0100,B0000,B1110,B1110,B0001,B0101,B1000,B1110,B0001,B1101,B0000,B0000,B1101,B0001,B0100, 5,
B1100,B0100,B0000,B1110,B1110,B0001,B0101,B1000,B1110,B0001,B1101,B0000,B0000,B1101,B1001,B0100, 5,
B1100,B0100,B0000,B1110,B1110,B0001,B0101,B1000,B1110,B0001,B1101,B0000,B1000,B1101,B1001,B0100, 5,
B1100,B0100,B0000,B1110,B1110,B0001,B0101,B1001,B1110,B0001,B1101,B0000,B1000,B1101,B1001,B0100, 5,
B1100,B0100,B0000,B1111,B1110,B0001,B0101,B1001,B1110,B0001,B1101,B0000,B1000,B1101,B1001,B0100, 5,
B1100,B0100,B0000,B1111,B1110,B0001,B0101,B1001,B1110,B0001,B1101,B0000,B1000,B1111,B1001,B0100, 5,
B1100,B0100,B0000,B1111,B1110,B0001,B0101,B1001,B1111,B0001,B1101,B0000,B1000,B1111,B1001,B0100, 5,
B1110,B0100,B0000,B1111,B1110,B0001,B0101,B1001,B1111,B0001,B1101,B0000,B1000,B1111,B1001,B0100, 5,
B1110,B0110,B0000,B1111,B1110,B0001,B0101,B1001,B1111,B0001,B1101,B0000,B1000,B1111,B1001,B0100, 5,
B1110,B0110,B0000,B1111,B1110,B0001,B0101,B1011,B1111,B0001,B1101,B0000,B1000,B1111,B1001,B0100, 5,
B1110,B0111,B0000,B1111,B1110,B0001,B0101,B1011,B1111,B0001,B1101,B0000,B1000,B1111,B1001,B0100, 5,
B1110,B0111,B0000,B1111,B1110,B0001,B0101,B1011,B1111,B0011,B1101,B0000,B1000,B1111,B1001,B0100, 5,
B1110,B0111,B0000,B1111,B1110,B0001,B0101,B1011,B1111,B0111,B1101,B0000,B1000,B1111,B1001,B0100, 5,
B1110,B0111,B0000,B1111,B1110,B0001,B0101,B1011,B1111,B0111,B1101,B1000,B1000,B1111,B1001,B0100, 5,
B1110,B0111,B0000,B1111,B1110,B0001,B0101,B1011,B1111,B0111,B1101,B1000,B1000,B1111,B1001,B1100, 5,
B1110,B1111,B0000,B1111,B1110,B0001,B0101,B1011,B1111,B0111,B1101,B1000,B1000,B1111,B1001,B1100, 5,
B1110,B1111,B0010,B1111,B1110,B0001,B0101,B1011,B1111,B0111,B1101,B1000,B1000,B1111,B1001,B1100, 5,
B1110,B1111,B0010,B1111,B1110,B0001,B0111,B1011,B1111,B0111,B1101,B1000,B1000,B1111,B1001,B1100, 5,
B1110,B1111,B0010,B1111,B1110,B0001,B0111,B1011,B1111,B0111,B1101,B1010,B1000,B1111,B1001,B1100, 5,
B1110,B1111,B0010,B1111,B1111,B0001,B0111,B1011,B1111,B0111,B1101,B1010,B1000,B1111,B1001,B1100, 5,
B1110,B1111,B0010,B1111,B1111,B0001,B0111,B1011,B1111,B0111,B1101,B1110,B1000,B1111,B1001,B1100, 5,
B1111,B1111,B0010,B1111,B1111,B0001,B0111,B1011,B1111,B0111,B1101,B1110,B1000,B1111,B1001,B1100, 5,
B1111,B1111,B1010,B1111,B1111,B0001,B0111,B1011,B1111,B0111,B1101,B1110,B1000,B1111,B1001,B1100, 5,
B1111,B1111,B1010,B1111,B1111,B0001,B0111,B1011,B1111,B0111,B1111,B1110,B1000,B1111,B1001,B1100, 5,
B1111,B1111,B1010,B1111,B1111,B0001,B0111,B1011,B1111,B1111,B1111,B1110,B1000,B1111,B1001,B1100, 5,
B1111,B1111,B1010,B1111,B1111,B0011,B0111,B1011,B1111,B1111,B1111,B1110,B1000,B1111,B1001,B1100, 5,
B1111,B1111,B1010,B1111,B1111,B1011,B0111,B1011,B1111,B1111,B1111,B1110,B1000,B1111,B1001,B1100, 5,
B1111,B1111,B1010,B1111,B1111,B1011,B0111,B1011,B1111,B1111,B1111,B1110,B1000,B1111,B1011,B1100, 5,
B1111,B1111,B1010,B1111,B1111,B1011,B0111,B1011,B1111,B1111,B1111,B1110,B1000,B1111,B1011,B1110, 5,
B1111,B1111,B1010,B1111,B1111,B1011,B0111,B1011,B1111,B1111,B1111,B1110,B1000,B1111,B1011,B1111, 5,
B1111,B1111,B1010,B1111,B1111,B1111,B0111,B1011,B1111,B1111,B1111,B1110,B1000,B1111,B1011,B1111, 5,
B1111,B1111,B1010,B1111,B1111,B1111,B0111,B1011,B1111,B1111,B1111,B1110,B1010,B1111,B1011,B1111, 5,
B1111,B1111,B1010,B1111,B1111,B1111,B0111,B1011,B1111,B1111,B1111,B1110,B1011,B1111,B1011,B1111, 5,
B1111,B1111,B1110,B1111,B1111,B1111,B0111,B1011,B1111,B1111,B1111,B1110,B1011,B1111,B1011,B1111, 5,
B1111,B1111,B1110,B1111,B1111,B1111,B0111,B1011,B1111,B1111,B1111,B1110,B1111,B1111,B1011,B1111, 5,
B1111,B1111,B1111,B1111,B1111,B1111,B0111,B1011,B1111,B1111,B1111,B1110,B1111,B1111,B1011,B1111, 5,
B1111,B1111,B1111,B1111,B1111,B1111,B0111,B1011,B1111,B1111,B1111,B1110,B1111,B1111,B1111,B1111, 5,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1011,B1111,B1111,B1111,B1110,B1111,B1111,B1111,B1111, 5,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1011,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111, 30,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 0
};
PROGMEM prog_uchar turn_off_except_last_layer[] =
{
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0111,B1111,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B1111,B1111,B1111,B1111,B0111,B1111,B1111,B1111,B0111,B1111,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B1111,B1111,B1111,B1111,B0111,B1111,B1111,B1111,B0111,B0111,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B1111,B1111,B1111,B1111,B0111,B1111,B1111,B1011,B0111,B0111,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B1111,B1110,B1111,B1111,B0111,B1111,B1111,B1011,B0111,B0111,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1111,B1111,B0111,B1111,B1111,B1011,B0111,B0111,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1111,B1111,B0111,B1111,B1111,B1011,B0111,B0101,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1111,B1111,B0101,B1111,B1111,B1011,B0111,B0101,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1111,B1111,B0101,B0111,B1111,B1011,B0111,B0101,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1111,B1111,B0101,B0011,B1111,B1011,B0111,B0101,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1111,B1110,B0101,B0011,B1111,B1011,B0111,B0101,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1111,B1110,B0101,B0011,B1111,B1001,B0111,B0101,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1110,B1110,B0101,B0011,B1111,B1001,B0111,B0101,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1110,B1110,B0101,B0011,B0111,B1001,B0111,B0101,B1111,B1111,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1110,B1110,B0101,B0011,B0111,B1001,B0111,B0101,B1111,B1101,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1110,B1110,B0101,B0011,B0111,B1001,B0111,B0101,B1101,B1101,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1110,B1110,B0101,B0011,B0110,B1001,B0111,B0101,B1101,B1101,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1110,B1110,B0101,B0011,B0110,B1000,B0111,B0101,B1101,B1101,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1010,B1110,B0101,B0011,B0110,B1000,B0111,B0101,B1101,B1101,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1010,B1110,B0001,B0011,B0110,B1000,B0111,B0101,B1101,B1101,B1111,B1111,B1111,B1111, 5,
B0111,B1110,B1010,B1100,B0001,B0011,B0110,B1000,B0111,B0101,B1101,B1101,B1111,B1111,B1111,B1111, 5,
B0101,B1110,B1010,B1100,B0001,B0011,B0110,B1000,B0111,B0101,B1101,B1101,B1111,B1111,B1111,B1111, 5,
B0101,B1110,B1010,B1100,B0001,B0011,B0100,B1000,B0111,B0101,B1101,B1101,B1111,B1111,B1111,B1111, 5,
B0101,B1110,B1010,B1100,B0001,B0011,B0100,B1000,B0111,B0101,B1101,B1100,B1111,B1111,B1111,B1111, 5,
B0101,B1110,B1010,B1100,B0001,B0011,B0100,B1000,B0111,B0101,B1101,B0100,B1111,B1111,B1111,B1111, 5,
B0101,B0110,B1010,B1100,B0001,B0011,B0100,B1000,B0111,B0101,B1101,B0100,B1111,B1111,B1111,B1111, 5,
B0101,B0110,B1010,B1100,B0001,B0011,B0100,B1000,B0111,B0101,B0101,B0100,B1111,B1111,B1111,B1111, 5,
B0101,B0110,B1010,B1100,B0001,B0011,B0100,B1000,B0111,B0001,B0101,B0100,B1111,B1111,B1111,B1111, 5,
B0101,B0110,B1010,B1100,B0001,B0011,B0100,B1000,B0111,B0000,B0101,B0100,B1111,B1111,B1111,B1111, 5,
B0001,B0110,B1010,B1100,B0001,B0011,B0100,B1000,B0111,B0000,B0101,B0100,B1111,B1111,B1111,B1111, 5,
B0001,B0010,B1010,B1100,B0001,B0011,B0100,B1000,B0111,B0000,B0101,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0010,B1010,B1100,B0001,B0011,B0100,B1000,B0111,B0000,B0101,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0010,B1010,B1100,B0000,B0011,B0100,B1000,B0111,B0000,B0101,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0010,B1010,B1100,B0000,B0011,B0000,B1000,B0111,B0000,B0101,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B1010,B1100,B0000,B0011,B0000,B1000,B0111,B0000,B0101,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B1010,B1100,B0000,B0011,B0000,B1000,B0101,B0000,B0101,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B1010,B1000,B0000,B0011,B0000,B1000,B0101,B0000,B0101,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B1010,B1000,B0000,B0011,B0000,B1000,B0001,B0000,B0101,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B1010,B1000,B0000,B0011,B0000,B1000,B0001,B0000,B0100,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B1010,B0000,B0000,B0011,B0000,B1000,B0001,B0000,B0100,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B1010,B0000,B0000,B0010,B0000,B1000,B0001,B0000,B0100,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B1010,B0000,B0000,B0000,B0000,B1000,B0001,B0000,B0100,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B1010,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0100,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0100,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0100,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B1111,B1111,B1111, 5,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000, 0
};
PROGMEM prog_uchar sensing[] =
{
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111
};
prog_uchar* animation_order[] =
{
turn_on,
turn_off_except_last_layer,
surfaces,
surfaces,
rand_animation,
wireframe,
wireframe,
wireframe,
drip,
diagonal,
spin,
on_and_off,
reverse_drip,
snake,
NULL
};
prog_uchar* available_animations[] =
{
turn_on,
surfaces,
rand_animation,
wireframe,
drip,
diagonal,
spin,
on_and_off,
reverse_drip,
snake,
NULL
};
int leds[] = {15, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
int sensor = A5;
int data = 16;
int latch = 17;
int clock = 18;
void setup() {
for(int i = 0; i < LAYER_BITS; i++) {
pinMode(leds[i], OUTPUT);
}
pinMode(latch, OUTPUT);
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(sensor, INPUT);
}
void enable_layer(int layer) {
int shiftval = 1 << layer;
digitalWrite(latch, LOW);
shiftOut(data, clock, MSBFIRST, shiftval);
digitalWrite(latch, HIGH);
}
void disable_layers() {
digitalWrite(latch, LOW);
shiftOut(data, clock, MSBFIRST, 0);
digitalWrite(latch, HIGH);
}
void show_frame(byte* layer_buffer, unsigned long target_time) {
while(millis() < target_time) {
int group = 0;
for(int p = 0; p < 4; p++) {
int pin = 0;
disable_layers();
for(int row = 0; row < 4; row++) {
for(int col = 0; col < 4; col++) {
digitalWrite(leds[pin++], layer_buffer[group] & (1 << col));
}
group++;
}
enable_layer(p);
delayMicroseconds(LAYER_TIME);
}
}
}
void do_animation(prog_uchar* animation) {
byte layer_buffer[LAYER_BITS];
int pointer = 0;
unsigned long pattern_time, target_time;
do {
memcpy_P(layer_buffer, animation + pointer, LAYER_BITS);
pointer += LAYER_BITS;
pattern_time = pgm_read_byte_near(animation + pointer++);
target_time = millis() + pattern_time * FRAME_TIME;
show_frame(layer_buffer, target_time);
} while(pattern_time > 0);
}
int count_animations(prog_uchar* arr[]) {
int count = 0, pointer = 0;
while(arr[pointer++] != NULL)
count++;
return count;
}
int val = 0;
void loop() {
if(mode == ANIMATION_SCRIPTED) {
int pointer = 0;
do {
do_animation(animation_order[pointer++]);
} while(animation_order[pointer] != NULL);
} else if(mode == ANIMATION_RANDOM) {
int count = count_animations(available_animations);
do_animation(available_animations[random(0, count)]);
} else if(mode == ANIMATION_SENSING) {
val = map(analogRead(sensor), 0, 1023, 0, 64);
byte frame[LAYER_BITS] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ;
memcpy_P(frame, sensing, val/4);
if(val % 4 != 0)
frame[val/4] = B1100;
show_frame(frame, millis() + 10);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment