// This #include statement was automatically added by the Spark IDE.
#include "neopixel/neopixel.h"
// This #include statement was automatically added by the Spark IDE.
#include "neomatrix/neomatrix.h"
// This #include statement was automatically added by the Spark IDE.
#include "Adafruit_GFX/Adafruit_GFX.h"
// Color definitions
#define BLUE 0x001F
// IMPORTANT: Set pixel COUNT, PIN and TYPE
#define PIXEL_PIN D6
#define PIXEL_COUNT 238
#define PIXEL_TYPE WS2812B
// I define the pixels as both a strip and a matrix. Mainly because
// I like some of the strip effects from the demo program. I can
// reference either the strip or the matrix in the rest of my code.
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE); // Define as a strip to do some cool rainbow effects.
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(17, 14, 6, // Define a NeoMatrix 17 pixels wide by 14
NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT + // pixel high on pin 6. Spark core hooked to
NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG); // the BOTTOM RIGHT and wired by COLUMNS in
// a ZIGZAG pattern. See: http://goo.gl/ci2VhY
// Easier to define all colors needed here.
uint32_t PEACH = matrix.Color(221,171,127);
uint32_t ROSY = matrix.Color(255,176,193);
uint32_t LIGHTBLUE = matrix.Color(94,185,247);
uint32_t RED = matrix.Color(255,0,0);
uint32_t GREEN = matrix.Color(0,255,0);
uint32_t GRAY = matrix.Color(100,100,100);
uint32_t BROWN = matrix.Color(117,76,41);
uint32_t PURPLE = matrix.Color(152,5,229);
uint32_t DARKGREEN = matrix.Color(12,158,17);
uint32_t PINK = matrix.Color(250,101,148);
uint32_t ORANGE = matrix.Color(241,90,41);
uint32_t YELLOW = matrix.Color(255,242,0);
uint32_t BLACK = matrix.Color(0,0,0);
uint32_t WHITE = matrix.Color(255,255,255);
//Variables needed for when we're doing live drawing.
bool isDrawing = false;
bool startDrawing = false;
void setup() {
//Register our Spark function here
Spark.function("showPicture", showPicture); // Register for the showPicture function from iPhone App
Spark.function("drawThePixel", drawThePixel); // Register for the drawPixel function from iPad App
matrix.begin();
// This is just a sequence of RED, GREEN, then OFF(BLACK) so I know the screen reset.
matrix.fillScreen(RED);
matrix.show();
delay(2000);
matrix.fillScreen(GREEN);
matrix.show();
delay(2000);
matrix.fillScreen(BLACK);
matrix.show();
}
void loop() {
if (startDrawing) { // Only way I could consistently get it to clear the screen
matrix.fillScreen(BLACK); // was to track a temporaray startDrawing boolean to set the
matrix.show(); // display to black the first time we hit the main loop again.
startDrawing = false; // Otherwise I would always end up with part of the image that
} // was displaying before drawing began on the screen.
//If we are not drawing, run the normal routine.
if(!isDrawing) {
normalRoutine();
}
}
// This is my normal routine that just runs through all the different
// images we're created.
void normalRoutine() {
if (startDrawing) { return; } // Check before each item whether we have started drawing.
scrollText(" Merry Christmas!",GREEN,RED);
if (startDrawing) { return; }
delay(1000);
if (startDrawing) { return; }
drawReindeer();
if (startDrawing) { return; }
delay(5000);
if (startDrawing) { return; }
drawHarperPresent();
if (startDrawing) { return; }
delay(5000);
if (startDrawing) { return; }
drawSanta1();
if (startDrawing) { return; }
delay(5000);
}
//Rainbow function from Adafruit Strip Demo.
void rainbow(uint8_t wait) {
uint16_t i, j;
for(j=0; j<256; j++) {
for(i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel((i+j) & 255));
}
strip.show();
delay(wait);
}
}
// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
if(WheelPos < 85) {
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
} else if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
} else {
WheelPos -= 170;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
}
// Function run when we receive a "showPicture" command from the
// iPhone app. Only a few cases are handled because I haven't expanded
// it to handle all the different pictures.
// Input: the string Command we received.
// Return: An Integer that's passed back through the Spark API to the
// iPhone app. 0 for false or "Not Displayed" 1 for true or "Displayed"
int showPicture(String command) {
if (isDrawing) {
return 0;
}
if (command == "reindeer"){
drawReindeer();
delay(10000);
return 1;
}
else if (command == "santa1") {
drawSanta1();
delay(10000);
return 1;
}
else if (command == "snowman"){
drawSnowman();
delay(10000);
return 1;
}
}
// Function run when we receive a "drawPixel" command from the iPad
// app.
// Input: String Command. iPad sends either "startDrawing", "stopDrawing",
// "clearDisplay", or a pixel like "x,y,r,g,b"
// example: "0,0,255,255,255" Pixel 0,0 RGB (255,255,255) or White.
int drawThePixel(String command) {
if (command == "startDrawing") {
if (isDrawing) {
return 2;
}
isDrawing = true;
startDrawing = true;
matrix.fillScreen(BLACK);
matrix.show();
return 1;
}
else if (command == "stopDrawing") {
isDrawing = false;
return 1;
}
else if (command == "clearDisplay") {
matrix.fillScreen(BLACK);
matrix.show();
return 1;
}
else
{
// Yes I know there has to be a more efficient way of parsing this string.
// My "C" programing skills are lacking in the area of string manipulation.
int commaIndex = command.indexOf(',');
int secondCommaIndex = command.indexOf(',', commaIndex+1);
int thirdCommaIndex = command.indexOf(',', secondCommaIndex+1);
int fourthCommaIndex = command.indexOf(',', thirdCommaIndex+1);
String xCoord = command.substring(0,commaIndex);
String yCoord = command.substring(commaIndex+1, secondCommaIndex);
String rValue = command.substring(secondCommaIndex+1, thirdCommaIndex);
String gValue = command.substring(thirdCommaIndex+1, fourthCommaIndex);
String bValue = command.substring(fourthCommaIndex+1);
matrix.drawPixel(xCoord.toInt(),yCoord.toInt(),matrix.Color(rValue.toInt(),gValue.toInt(),bValue.toInt()));
// Show three times because once causes weird things...
// This tripped me up for a long time. If I only did matrix.show()
// once, the screen would randomly display the wrong pixels and the
// wrong colors. Then every third pixel command it would draw right.
// It was very frustrating. I finally realized if I'd send the command
// three times, it would work as expected with no noticeable issues
// on the screen...
matrix.show();
matrix.show();
matrix.show();
return 1;
}
return 0;
}
// Scroll text function. Basis for this function from the following instructable
// by turnturtle. http://goo.gl/l7tvX9
void scrollText(String text, uint32_t backgroundColor, uint32_t textColor) {
matrix.setTextColor(textColor);
matrix.setTextSize(1);
matrix.setTextWrap(false);
//String text = " Merry Christmas!"; // sample text
const int width = 3; // width of the marquee display (in characters)
// Loop once through the string
for (int offset = 0; offset < text.length(); offset++)
{
// Construct the string to display for this iteration
String t = "";
for (int i = 0; i < width; i++)
t += text.charAt((offset + i) % text.length());
// Print the string for this iteration
// matrix.setTextColor(randomColor());
matrix.setCursor(0, 3); // display will be halfway down screen
matrix.print(t);
matrix.show();
// Short delay so the text doesn't move too fast
delay(350);
matrix.fillScreen(backgroundColor);
matrix.show();
}
}
//function to generate a random color. ;)
uint32_t randomColor() {
uint32_t colorToReturn = matrix.Color(random(0,256),random(0,256),random(0,256));
return colorToReturn;
}
// This is untested. I just found the setBrightness() function.
// It should fade a color to screen...
void fadeToColor(uint32_t color, uint8_t duration)
{
// Valid values for setBrightness are 0-16
for (int i = 0; i <= 16; i++)
{
matrix.fillScreen(color);
matrix.setBrightness(i);
matrix.show();
delay(duration / 16);
}
matrix.setBrightness(16); //Reset brightness for next drawing?
}
// Below here are all the functions to draw the individual pictures.
void drawSanta1() {
matrix.fillScreen(BLACK);
matrix.drawFastHLine(10,1,5,RED);
matrix.drawFastHLine(9,2,7,RED);
matrix.drawFastHLine(8,3,9,RED);
matrix.drawFastHLine(6,4,3,RED);
matrix.drawFastHLine(9,4,8,WHITE);
matrix.drawPixel(5,5,WHITE);
matrix.drawPixel(9,5,WHITE);
matrix.drawPixel(10,5,PEACH);
matrix.drawPixel(11,5,LIGHTBLUE);
matrix.drawPixel(12,5,PEACH);
matrix.drawPixel(13,5,LIGHTBLUE);
matrix.drawPixel(14,5,PEACH);
matrix.drawPixel(15,5,WHITE);
matrix.drawPixel(9,6,WHITE);
matrix.drawPixel(10,6,ROSY);
matrix.drawFastHLine(11,6,3,PEACH);
matrix.drawPixel(14,6,ROSY);
matrix.drawPixel(15,6,WHITE);
matrix.drawPixel(9,7,WHITE);
matrix.drawPixel(10,7,PEACH);
matrix.drawFastHLine(11,7,3,WHITE);
matrix.drawPixel(14,7,PEACH);
matrix.drawPixel(15,7,WHITE);
matrix.drawFastHLine(9,8,3,WHITE);
matrix.drawPixel(12,8,PEACH);
matrix.drawFastHLine(13,8,3,WHITE);
matrix.drawFastHLine(9,9,7,WHITE);
matrix.drawFastHLine(10,10,5,WHITE);
matrix.drawFastHLine(11,11,3,WHITE);
}
void drawReindeer() {
matrix.fillScreen(WHITE);
matrix.drawFastHLine(5,0,3,GRAY);
matrix.drawFastHLine(10,0,3,GRAY);
matrix.drawPixel(7,1,GRAY);
matrix.drawPixel(10,1,GRAY);
matrix.drawFastHLine(3,2,3,BROWN);
matrix.drawPixel(7,2,GRAY);
matrix.drawPixel(10,2,GRAY);
matrix.drawFastHLine(12,2,3,BROWN);
matrix.drawFastHLine(2,3,4,BROWN);
matrix.drawFastHLine(7,3,4,BROWN);
matrix.drawFastHLine(12,3,4,BROWN);
matrix.drawFastHLine(6,4,6,BROWN);
matrix.drawFastHLine(6,5,6,BROWN);
//Draw whole row for eyes
matrix.drawFastHLine(6,6,6,BROWN);
//Draw Eyes
matrix.drawPixel(7,6,BLACK);
matrix.drawPixel(10,6,BLACK);
matrix.drawFastHLine(6,7,6,BROWN);
matrix.drawFastHLine(6,8,6,BROWN);
matrix.drawFastHLine(7,9,4,BROWN);
matrix.drawFastHLine(7,10,4,BROWN);
matrix.drawFastHLine(7,11,4,BROWN);
matrix.drawPixel(7,12,BROWN);
matrix.drawPixel(10,12,BROWN);
matrix.drawFastHLine(8,12,2,RED);
matrix.drawFastHLine(8,13,2,BROWN);
}
void drawHarperTree() {
matrix.fillScreen(LIGHTBLUE);
matrix.drawPixel(8,1,YELLOW);
matrix.drawPixel(8,2,GREEN);
matrix.drawFastHLine(7,3,3,GREEN);
matrix.drawPixel(6,4,GREEN);
matrix.drawPixel(7,4,BLUE);
matrix.drawPixel(8,4,GREEN);
matrix.drawPixel(9,4,PURPLE);
matrix.drawFastHLine(5,5,5,GREEN);
matrix.drawFastHLine(5,6,5,GREEN);
matrix.drawFastHLine(4,7,8,GREEN);
matrix.drawFastHLine(4,8,8,GREEN);
matrix.drawPixel(6,8,PINK);
matrix.drawFastHLine(3,9,9,GREEN);
matrix.drawFastHLine(3,10,9,GREEN);
matrix.drawFastHLine(5,11,4,BROWN);
matrix.drawFastHLine(5,12,4,BROWN);
matrix.drawFastHLine(0,13,17,DARKGREEN);
}
hello sir, i want to scroll this shape or any shape horizotal or vertical in matrix plz give me a function to scroll this. plz help me