diff --git a/libraries/BlinkSenseMove.zip b/libraries/BlinkSenseMove.zip new file mode 100644 index 0000000..2dd8b94 Binary files /dev/null and b/libraries/BlinkSenseMove.zip differ diff --git a/libraries/BlinkSenseMove/examples/blink/BSM_Dotmatrix/BSM_Dotmatrix.ino b/libraries/BlinkSenseMove/examples/blink/BSM_Dotmatrix/BSM_Dotmatrix.ino index dd336ea..2937f81 100644 --- a/libraries/BlinkSenseMove/examples/blink/BSM_Dotmatrix/BSM_Dotmatrix.ino +++ b/libraries/BlinkSenseMove/examples/blink/BSM_Dotmatrix/BSM_Dotmatrix.ino @@ -1,422 +1,44 @@ -/************************************************************************** - This sektch demonstrates the use of OLEDs based on SSD1306 drivers - with the Blink Sense Move Board. - To use the OLED connect the corresponding pins for the display (DISPLAY_CLK, DISPLAY_CS, DISPLAY_DC, DISPLAY_DIN and DISPLAY_RES) to their Teensy pins using jumpers. - - It is based on the on the Adafruit OLED example. - - This example is for a 128x64 pixel display using SPI to communicate - 4 or 5 pins are required to interface. - - Original sketch written by Limor Fried/Ladyada for Adafruit Industries, - with contributions from the open source community. - BSD license, check license.txt for more information - All text above, and the splash screen below must be - included in any redistribution. - **************************************************************************/ - -/* include the libraries used in this sketch.*/ +/* + This sketch demonstrates displaying text on a MAX7219 driven 8x8 LED Dot Matrix display with the Blink Sense Move board. + Connect the corresponding teensy pins via jumpers, and add some power to the board. The text should scroll saying "Hello, BlinkSenseMove" + This sketch uses the MD_Parola and MD_MAX72xx libraries. +*/ +/* Tese Libs are needed to run this example, add them via sketch -> include library -> manage Libraries*/ +#include +#include #include -#include -#include -#include #include "BlinkSenseMove.h" -/* defines screen width and hight of the display in pixels*/ -#define SCREEN_WIDTH 128 -#define SCREEN_HEIGHT 64 - -/* initiates the display with the corresponding pins.*/ -Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, - DISPLAY_DIN, DISPLAY_CLK, DISPLAY_DC, DISPLAY_RES, DISPLAY_CS); - - -/* Comment out above, uncomment this block to use hardware SPI -#define OLED_DC 6 -#define OLED_CS 7 -#define OLED_RESET 8 -Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, - &SPI, OLED_DC, OLED_RESET, OLED_CS); -*/ - -/* Number of snowflakes in the animation example*/ -#define NUMFLAKES 10 - -#define LOGO_HEIGHT 16 -#define LOGO_WIDTH 16 -static const unsigned char PROGMEM logo_bmp[] = { B00000000, B11000000, - B00000001, B11000000, - B00000001, B11000000, - B00000011, B11100000, - B11110011, B11100000, - B11111110, B11111000, - B01111110, B11111111, - B00110011, B10011111, - B00011111, B11111100, - B00001101, B01110000, - B00011011, B10100000, - B00111111, B11100000, - B00111111, B11110000, - B01111100, B11110000, - B01110000, B01110000, - B00000000, B00110000 }; - -void setup() { - Serial.begin(9600); - - /* SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally */ - if(!display.begin(SSD1306_SWITCHCAPVCC)) { - Serial.println(F("SSD1306 allocation failed")); - /*Don't proceed, loop forever */ - for(;;); - } - - /* Show initial display buffer contents on the screen -- - the library initializes this with an Adafruit splash screen.*/ - display.display(); - delay(2000); - - /* Clear the buffer */ - display.clearDisplay(); - - /* Draw a single pixel in white */ - display.drawPixel(10, 10, SSD1306_WHITE); - - /* Show the display buffer on the screen. You MUST call display() after - drawing commands to make them visible on screen! */ - display.display(); - delay(2000); - /* display.display() is NOT necessary after every single drawing command, - unless that's what you want...rather, you can batch up a bunch of - drawing operations and then update the screen all at once by calling - display.display(). These examples demonstrate both approaches... */ - - testdrawline(); /* Draw many lines*/ - - testdrawrect(); /* Draw rectangles (outlines)*/ - - testfillrect(); /* Draw rectangles (filled)*/ - - testdrawcircle(); /* Draw circles (outlines)*/ - - testfillcircle(); /* Draw circles (filled)*/ - - testdrawroundrect(); /* Draw rounded rectangles (outlines)*/ - - testfillroundrect(); /* Draw rounded rectangles (filled)*/ - - testdrawtriangle(); /* Draw triangles (outlines)*/ - - testfilltriangle(); /* Draw triangles (filled)*/ - - testdrawchar(); /* Draw characters of the default font*/ - - testdrawstyles(); /* Draw 'stylized' characters*/ - - testscrolltext(); /* Draw scrolling text*/ - - testdrawbitmap(); /* Draw a small bitmap image*/ - - /* Invert and restore display, pausing in-between*/ - display.invertDisplay(true); - delay(1000); - display.invertDisplay(false); - delay(1000); - - /* Animate bitmaps*/ - testanimate(logo_bmp, LOGO_WIDTH, LOGO_HEIGHT); -} - -void loop() { -} - -void testdrawline() { - int16_t i; - - /* Clear display buffer*/ - display.clearDisplay(); - - for(i=0; i=0; i-=4) { - display.drawLine(0, display.height()-1, display.width()-1, i, SSD1306_WHITE); - display.display(); - delay(1); - } - delay(250); - - display.clearDisplay(); - - for(i=display.width()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, i, 0, SSD1306_WHITE); - display.display(); - delay(1); - } - for(i=display.height()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, 0, i, SSD1306_WHITE); - display.display(); - delay(1); - } - delay(250); - - display.clearDisplay(); - - for(i=0; i0; i-=3) { - /* The INVERSE color is used so circles alternate white/black*/ - display.fillCircle(display.width() / 2, display.height() / 2, i, SSD1306_INVERSE); - display.display(); /* Update screen with each newly-drawn circle*/ - delay(1); - } - - delay(2000); -} - -void testdrawroundrect(void) { - display.clearDisplay(); - - for(int16_t i=0; i0; i-=5) { - /* The INVERSE color is used so triangles alternate white/black*/ - display.fillTriangle( - display.width()/2 , display.height()/2-i, - display.width()/2-i, display.height()/2+i, - display.width()/2+i, display.height()/2+i, SSD1306_INVERSE); - display.display(); - delay(1); - } - - delay(2000); -} - -void testdrawchar(void) { - display.clearDisplay(); - - display.setTextSize(1); /* Normal 1:1 pixel scale*/ - display.setTextColor(SSD1306_WHITE); /* Draw white text*/ - display.setCursor(0, 0); /* Start at top-left corner*/ - display.cp437(true); /* Use full 256 char 'Code Page 437' font*/ - - /* Not all the characters will fit on the display. This is normal. - Library will draw what it can and the rest will be clipped.*/ - for(int16_t i=0; i<256; i++) { - if(i == '\n') display.write(' '); - else display.write(i); - } - - display.display(); - delay(2000); -} - -void testdrawstyles(void) { - display.clearDisplay(); - - display.setTextSize(1); /* Normal 1:1 pixel scale*/ - display.setTextColor(SSD1306_WHITE); /* Draw white text*/ - display.setCursor(0,0); /* Start at top-left corner*/ - display.println(F("Hello, Blink Sense Move")); - - display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); /* Draw 'inverse' text*/ - display.println(3.141592); - - display.setTextSize(2); /* Draw 2X-scale text*/ - display.setTextColor(SSD1306_WHITE); - display.print(F("0x")); display.println(0xDEADBEEF, HEX); - - display.display(); - delay(2000); -} - -void testscrolltext(void) { - display.clearDisplay(); - - display.setTextSize(2); /* Draw 2X-scale text*/ - display.setTextColor(SSD1306_WHITE); - display.setCursor(10, 0); - display.println(F("scroll")); - display.display(); /*/ Show initial text*/ - delay(100); - - /* Scroll in various directions, pausing in-between:*/ - display.startscrollright(0x00, 0x0F); - delay(2000); - display.stopscroll(); - delay(1000); - display.startscrollleft(0x00, 0x0F); - delay(2000); - display.stopscroll(); - delay(1000); - display.startscrolldiagright(0x00, 0x07); - delay(2000); - display.startscrolldiagleft(0x00, 0x07); - delay(2000); - display.stopscroll(); - delay(1000); -} - -void testdrawbitmap(void) { - display.clearDisplay(); - - display.drawBitmap( - (display.width() - LOGO_WIDTH ) / 2, - (display.height() - LOGO_HEIGHT) / 2, - logo_bmp, LOGO_WIDTH, LOGO_HEIGHT, 1); - display.display(); - delay(1000); -} - -#define XPOS 0 /* Indexes into the 'icons' array in function below*/ -#define YPOS 1 -#define DELTAY 2 - -void testanimate(const uint8_t *bitmap, uint8_t w, uint8_t h) { - int8_t f, icons[NUMFLAKES][3]; - - /* Initialize 'snowflake' positions*/ - for(f=0; f< NUMFLAKES; f++) { - icons[f][XPOS] = random(1 - LOGO_WIDTH, display.width()); - icons[f][YPOS] = -LOGO_HEIGHT; - icons[f][DELTAY] = random(1, 6); - Serial.print(F("x: ")); - Serial.print(icons[f][XPOS], DEC); - Serial.print(F(" y: ")); - Serial.print(icons[f][YPOS], DEC); - Serial.print(F(" dy: ")); - Serial.println(icons[f][DELTAY], DEC); - } - - for(;;) { /* Loop forever...*/ - display.clearDisplay(); /* Clear the display buffer*/ - - /* Draw each snowflake:*/ - for(f=0; f< NUMFLAKES; f++) { - display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, SSD1306_WHITE); - } +void loop(void) +{ + /* Starts the animation*/ + P.displayAnimate(); - display.display(); /* Show the display buffer on the screen*/ - delay(200); /* Pause for 1/10 second*/ + /* If the animation is finished, reset the display*/ + if (P.displayAnimate()) { + P.displayReset(); - /* Then update coordinates of each flake...*/ - for(f=0; f< NUMFLAKES; f++) { - icons[f][YPOS] += icons[f][DELTAY]; - /* If snowflake is off the bottom of the screen...*/ - if (icons[f][YPOS] >= display.height()) { - /* Reinitialize to a random position, just off the top*/ - icons[f][XPOS] = random(1 - LOGO_WIDTH, display.width()); - icons[f][YPOS] = -LOGO_HEIGHT; - icons[f][DELTAY] = random(1, 6); - } - } } }