LOL Shield – Final

Here is the final look of the LOL shield. The biggest challenge here was to debounce the tilt switch and make the animation stop when the cup is tilted, instead of having it on a loop (keeps pouring and going back to filled position)

Here is the code:
#include <Charliplexing.h> //Imports the library, which needs to be
const int buttonPin = A4;     // the number of the pushbutton pin
byte line = 0;       //Row counter
char buffer[10];
int value;
int buttonState = 0;
int count;
int tiltState;
int prevTiltState;
long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 500;    // the debounce time; increase if the output flickers

void setup()
{
Serial.begin(9600);
LedSign::Init();  //Initializes the screen
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}

void loop()
{
// read the state of the pushbutton value:
tiltState = digitalRead(buttonPin);
//long time = millis();
if ((millis() – lastDebounceTime) > debounceDelay) {

if(tiltState != prevTiltState){
lastDebounceTime = millis();
// check if the pushbutton is pressed. if it is, the buttonState is HIGH:
//if (buttonState == HIGH) {

//}

//else {
if(tiltState == LOW){
Serial.println(‘0000909090909090’);
count = 2;

delay(100);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
delay(100);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(255);
delay(100);
DisplayBitMap(63);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(255);
DisplayBitMap(511);
delay(100);
DisplayBitMap(63);
DisplayBitMap(63);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(255);
DisplayBitMap(255);
DisplayBitMap(511);
delay(100);
DisplayBitMap(63);
DisplayBitMap(63);
DisplayBitMap(63);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(255);
DisplayBitMap(255);
DisplayBitMap(511);
DisplayBitMap(511);
delay(100);
DisplayBitMap(63);
DisplayBitMap(63);
DisplayBitMap(63);
DisplayBitMap(63);
DisplayBitMap(127);
DisplayBitMap(255);
DisplayBitMap(255);
DisplayBitMap(511);
DisplayBitMap(1023);
delay(100);
DisplayBitMap(31);
DisplayBitMap(63);
DisplayBitMap(63);
DisplayBitMap(63);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(255);
DisplayBitMap(1023);
DisplayBitMap(2047);
delay(100);
DisplayBitMap(31);
DisplayBitMap(31);
DisplayBitMap(63);
DisplayBitMap(63);
DisplayBitMap(63);
DisplayBitMap(127);
DisplayBitMap(255);
DisplayBitMap(1023);
DisplayBitMap(2047);
delay(100);
DisplayBitMap(15);
DisplayBitMap(31);
DisplayBitMap(31);
DisplayBitMap(63);
DisplayBitMap(63);
DisplayBitMap(127);
DisplayBitMap(255);
DisplayBitMap(511);
DisplayBitMap(2047);
delay(100);
DisplayBitMap(7);
DisplayBitMap(15);
DisplayBitMap(31);
DisplayBitMap(31);
DisplayBitMap(31);
DisplayBitMap(63);
DisplayBitMap(255);
DisplayBitMap(511);
DisplayBitMap(2047);
delay(100);
DisplayBitMap(3);
DisplayBitMap(7);
DisplayBitMap(7);
DisplayBitMap(15);
DisplayBitMap(31);
DisplayBitMap(63);
DisplayBitMap(511);
DisplayBitMap(2047);
DisplayBitMap(4095);
delay(100);
DisplayBitMap(1);
DisplayBitMap(3);
DisplayBitMap(3);
DisplayBitMap(7);
DisplayBitMap(15);
DisplayBitMap(31);
DisplayBitMap(1023);
DisplayBitMap(2047);
DisplayBitMap(8191);
delay(100);
DisplayBitMap(0);
DisplayBitMap(3);
DisplayBitMap(3);
DisplayBitMap(7);
DisplayBitMap(15);
DisplayBitMap(63);
DisplayBitMap(1023);
DisplayBitMap(4095);
DisplayBitMap(16383);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(3);
DisplayBitMap(3);
DisplayBitMap(7);
DisplayBitMap(15);
DisplayBitMap(1023);
DisplayBitMap(8191);
DisplayBitMap(16383);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(3);
DisplayBitMap(7);
DisplayBitMap(15);
DisplayBitMap(2047);
DisplayBitMap(16383);
DisplayBitMap(16383);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(15);
DisplayBitMap(255);
DisplayBitMap(8191);
DisplayBitMap(16383);
DisplayBitMap(16383);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(2047);
DisplayBitMap(16383);
DisplayBitMap(16383);
DisplayBitMap(16383);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(16383);
DisplayBitMap(16383);
DisplayBitMap(16383);
DisplayBitMap(16383);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(14336);
DisplayBitMap(16380);
DisplayBitMap(16383);
DisplayBitMap(16383);
DisplayBitMap(16383);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(8192);
DisplayBitMap(12288);
DisplayBitMap(16368);
DisplayBitMap(16380);
DisplayBitMap(16383);
DisplayBitMap(16383);
}
}else if(tiltState ==LOW){
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(8192);
DisplayBitMap(12288);
DisplayBitMap(16368);
DisplayBitMap(16380);
DisplayBitMap(16383);
DisplayBitMap(16383);
}
else{
Serial.println(‘low’);
count = 1;

delay(100);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
DisplayBitMap(127);
}
//lastDebounceTime = millis();
}
prevTiltState = tiltState;

}

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