lucy, the good karma night lamp.

Lucy, the magic-6-cube evolved into Lucy, the good karma night lamp. She wants to make people happy since the moment they wake up. So she turned into a night lamp that sleeps next to you and lights up your life in the darkness. When you wake up, you wake her up, and ask her if you’ll have a good day today. She then asks you to tilt her for your answer… and VOILA! You get your good karma with deep thoughts like “WORD”, “HELL YEAH”, and “BET ON IT”.

 

/*
 LUCY, THE GOOD KARMA NIGHT LAMP

 Requires LoL Shield library, at least V0.2Beta

 http://code.google.com/p/lolshield/downloads/list

 And the Font.cpp from LoL_Shield-100915.zip on ikkei's page:

 http://web.mac.com/kxm_ikkei/Site/LoL.html

 Based on original TEXT SAMPLE CODE for LOL Shield for Arduino
 Copyright 2009/2010 Benjamin Sonntag <benjamin@sonntag.fr> http://benjamin.sonntag.fr/

 (This version edited by Monica Arias)
 */

#include "Charliplexing.h"
#include "Font.h"
#include "WProgram.h"

// Technically the number of columns of LEDs minus one
#define SCREEN_WIDTH 13

// Scroll delay: lower values result in faster scrolling
#define SCROLL_DELAY 80

/* How long to wait after the last letter before
 going back to the beginning and repeating */
#define REPEAT_DELAY 500

char ask[]="ASK N TILT";

// SMILEY FACE
byte line = 0;       //Row counter
char buffer[10];
int value;

// BUTTON
int tiltPin = A5;     // the number of the tilt sensor
int leftPin = A0;
int ledPin = A2;

int tiltState = 0;         // variable for reading the tilt status
int leftState;         // variable for reading the left pushbutton status

int textLength, totalPixels;

char text[10];

int r=0;

// ------------------------------------------------------------
// ------------------------------------------------------------

void setup() {
  Serial.begin(9600);
  LedSign::Init();
  pinMode(ledPin, OUTPUT);
  pinMode(tiltPin, INPUT);
  pinMode(leftPin, INPUT);

}

// ------------------------------------------------------------
// ------------------------------------------------------------

void loop() {

  tiltState = digitalRead(tiltPin);
  leftState = digitalRead(leftPin);

  // LEFT BUTTON
  if (leftState == HIGH) {

    digitalWrite(ledPin, LOW);
    smiley();
    predictions();

  }
  else {
    digitalWrite(ledPin, HIGH);
    sleeping();
  }

}

// ------------------------------------------------------------
// ------------------------------------------------------------

// FUNCTION TILT SWITCH
void predictions(){

  if (tiltState == HIGH) {

    r = int(random(4));

    if(r==0){
      text[0] = 'H';
      text[1] = 'E';
      text[2] = 'L';
      text[3] = 'L';
      text[4] = ' ';
      text[5] = 'Y';
      text[6] = 'E';
      text[7] = 'A';
      text[8] = 'H';
      text[9] = '!';

    }
    else if(r==1) {
      text[0] = 'B';
      text[1] = 'E';
      text[2] = 'T';
      text[3] = ' ';
      text[4] = 'O';
      text[5] = 'N';
      text[6] = ' ';
      text[7] = 'I';
      text[8] = 'T';
      text[9] = '!';

    }

      else if(r==2) {
      text[0] = 'W';
      text[1] = 'O';
      text[2] = 'R';
      text[3] = 'D';
      text[4] = ' ';
      text[5] = ' ';
      text[6] = ' ';
      text[7] = ' ';
      text[8] = ' ';
      text[9] = ' ';
    }

    else if(r==3) {
      text[0] = 'B';
      text[1] = 'E';
      text[2] = 'L';
      text[3] = 'I';
      text[4] = 'E';
      text[5] = 'V';
      text[6] = 'E';
      text[7] = ' ';
      text[8] = 'I';
      text[9] = 'T';
    }

    getLength(text, &textLength, &totalPixels);
    int x=0;
    for(int j=SCREEN_WIDTH; j>-totalPixels-SCREEN_WIDTH; j--) {
      x=j;
      LedSign::Clear();
      for(int i=0; i<textLength; i++) {
        x += Font::Draw(text[i],x,0);
        if (x>=SCREEN_WIDTH)
          break;
      }
      delay(SCROLL_DELAY);
    }
    delay(REPEAT_DELAY);
  }
}

// FUNCTION
void smiley(){

  delay(400);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(4092);
	DisplayBitMap(2040);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(2040);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
// TILT

	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(14);
	DisplayBitMap(4);
	DisplayBitMap(4);
	DisplayBitMap(4);
	DisplayBitMap(4);
	DisplayBitMap(4);
	DisplayBitMap(4);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(46);
	DisplayBitMap(36);
	DisplayBitMap(36);
	DisplayBitMap(36);
	DisplayBitMap(36);
	DisplayBitMap(36);
	DisplayBitMap(36);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(174);
	DisplayBitMap(164);
	DisplayBitMap(164);
	DisplayBitMap(164);
	DisplayBitMap(164);
	DisplayBitMap(164);
	DisplayBitMap(932);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(7342);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2980);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(7342);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2980);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(7342);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2980);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(0);

}

// FUNCTION
void sleeping(){
  delay(400);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(480);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(480);
	DisplayBitMap(1008);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(480);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);

}

// FUNCTION
void DisplayBitMap(int lineint)
{
  //int data[9] = {95, 247, 123, 511, 255, 1, 5, 31, 15};

  //for(line = 0; line < 9; line++) {
  for (byte led=0; led<14; ++led) {
    if (lineint & (1<<led)) {
      LedSign::Set(led, line, 1);
    } else {
      LedSign::Set(led, line, 0);
    }
  }

  line++;
  if(line >= 9) line = 0;
}

// FUNCTION

void getLength(char* charArray, int* lengthPtr, int* pixelPtr) {
  /* Finds the length of a string in terms of characters
   and pixels and assigns them to the variable at
   addresses lengthPtr and pixelPtr, respectively. */

  int charCount = 0, pixelCount = 0;
  char * charPtr = charArray;

  // Count chars until newline or null character reached
  while (*charPtr != '\0' && *charPtr != '\n') {
    charPtr++;
    charCount++;

    /* Increment pixelCount by the number of pixels
     the current character takes up horizontally. */
    pixelCount += Font::Draw(*charPtr,-SCREEN_WIDTH,0);
  }

  *pixelPtr = pixelCount;
  *lengthPtr = charCount;
}

For the final presentation I uploaded a demo code to show how she would work. Here’s the “fake” code.

#include "Charliplexing.h"
#include "Font.h"
#include "WProgram.h"

// Technically the number of columns of LEDs minus one
#define SCREEN_WIDTH 13

// Scroll delay: lower values result in faster scrolling
#define SCROLL_DELAY 80

/* How long to wait after the last letter before
 going back to the beginning and repeating */
#define REPEAT_DELAY 500

// SMILEY FACE
byte line = 0;       //Row counter
char buffer[10];
int value;

int ledPin = A2;

// BUTTON
int inPin = A0;         // the number of the input pin

int state = LOW;      // the current state of the output pin
int reading;           // the current reading from the input pin
int previous = HIGH;    // the previous reading from the input pin

// the follow variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long time = 0;         // the last time the output pin was toggled
long debounce = 200;   // the debounce time, increase if the output flickers

int textLength, totalPixels;

char text[10];

int r=0;

void setup()
{
    Serial.begin(9600);
  LedSign::Init();
  pinMode(ledPin, OUTPUT);
  pinMode(inPin, INPUT);

}

void loop()
{
  reading = digitalRead(inPin);

 if (reading == HIGH && previous == LOW && millis() - time > debounce) {
    if (state == HIGH)
      state = LOW;
    else
      state = HIGH;

    time = millis();
  }

    digitalWrite(ledPin, HIGH);
    sleeping();
    delay(100);
digitalWrite(ledPin, LOW);
    smiley();
    predictions();
delay(1000);

  previous = reading;
}

// FUNCTION
void smiley(){

  delay(400);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(4092);
	DisplayBitMap(2040);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(2040);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);

  delay(400);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(4092);
	DisplayBitMap(2040);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(2040);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
  delay(400);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(4092);
	DisplayBitMap(2040);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(2040);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
  delay(400);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(4092);
	DisplayBitMap(2040);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(2040);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
  delay(400);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(4092);
	DisplayBitMap(2040);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(2040);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(1560);
	DisplayBitMap(3900);
	DisplayBitMap(1560);
	DisplayBitMap(0);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
// TILT

	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(14);
	DisplayBitMap(4);
	DisplayBitMap(4);
	DisplayBitMap(4);
	DisplayBitMap(4);
	DisplayBitMap(4);
	DisplayBitMap(4);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(46);
	DisplayBitMap(36);
	DisplayBitMap(36);
	DisplayBitMap(36);
	DisplayBitMap(36);
	DisplayBitMap(36);
	DisplayBitMap(36);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(174);
	DisplayBitMap(164);
	DisplayBitMap(164);
	DisplayBitMap(164);
	DisplayBitMap(164);
	DisplayBitMap(164);
	DisplayBitMap(932);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(7342);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2980);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(7342);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2980);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(7342);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2212);
	DisplayBitMap(2980);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(0);

}

// FUNCTION TILT SWITCH
void predictions(){

    r = int(random(4));

    if(r==0){
      text[0] = 'H';
      text[1] = 'E';
      text[2] = 'L';
      text[3] = 'L';
      text[4] = ' ';
      text[5] = 'Y';
      text[6] = 'E';
      text[7] = 'A';
      text[8] = 'H';
      text[9] = '!';

    }
    else if(r==1) {
      text[0] = 'B';
      text[1] = 'E';
      text[2] = 'T';
      text[3] = ' ';
      text[4] = 'O';
      text[5] = 'N';
      text[6] = ' ';
      text[7] = 'I';
      text[8] = 'T';
      text[9] = '!';

    }

      else if(r==2) {
      text[0] = 'W';
      text[1] = 'O';
      text[2] = 'R';
      text[3] = 'D';
      text[4] = ' ';
      text[5] = ' ';
      text[6] = ' ';
      text[7] = ' ';
      text[8] = ' ';
      text[9] = ' ';
    }

    else if(r==3) {
      text[0] = 'B';
      text[1] = 'E';
      text[2] = 'L';
      text[3] = 'I';
      text[4] = 'E';
      text[5] = 'V';
      text[6] = 'E';
      text[7] = ' ';
      text[8] = 'I';
      text[9] = 'T';
    }

    getLength(text, &textLength, &totalPixels);
    int x=0;
    for(int j=SCREEN_WIDTH; j>-totalPixels-SCREEN_WIDTH; j--) {
      x=j;
      LedSign::Clear();
      for(int i=0; i<textLength; i++) {
        x += Font::Draw(text[i],x,0);
        if (x>=SCREEN_WIDTH)
          break;
      }
      delay(SCROLL_DELAY);
    }
    delay(REPEAT_DELAY);
  }

// FUNCTION
void sleeping(){
  delay(400);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(480);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(480);
	DisplayBitMap(1008);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(480);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
  delay(400);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(480);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(480);
	DisplayBitMap(1008);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(480);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
  delay(400);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(480);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(480);
	DisplayBitMap(1008);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(480);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
  delay(400);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(480);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(480);
	DisplayBitMap(1008);
	DisplayBitMap(1008);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);
	delay(400);
	DisplayBitMap(0);
	DisplayBitMap(4386);
	DisplayBitMap(3612);
	DisplayBitMap(0);
	DisplayBitMap(192);
	DisplayBitMap(480);
	DisplayBitMap(480);
	DisplayBitMap(192);
	DisplayBitMap(0);

}

// FUNCTION
void DisplayBitMap(int lineint)
{
  //int data[9] = {95, 247, 123, 511, 255, 1, 5, 31, 15};

  //for(line = 0; line < 9; line++) {
  for (byte led=0; led<14; ++led) {
    if (lineint & (1<<led)) {
      LedSign::Set(led, line, 1);
    } else {
      LedSign::Set(led, line, 0);
    }
  }

  line++;
  if(line >= 9) line = 0;
}

// FUNCTION

void getLength(char* charArray, int* lengthPtr, int* pixelPtr) {
  /* Finds the length of a string in terms of characters
   and pixels and assigns them to the variable at
   addresses lengthPtr and pixelPtr, respectively. */

  int charCount = 0, pixelCount = 0;
  char * charPtr = charArray;

  // Count chars until newline or null character reached
  while (*charPtr != '\0' && *charPtr != '\n') {
    charPtr++;
    charCount++;

    /* Increment pixelCount by the number of pixels
     the current character takes up horizontally. */
    pixelCount += Font::Draw(*charPtr,-SCREEN_WIDTH,0);
  }

  *pixelPtr = pixelCount;
  *lengthPtr = charCount;
}