Driving wheel
This project uses arduino, LOL shield, and two inputs (tilt sensors). Using its shape, it can be tilted in different directions that triggers different animations. In this case, if the cover is upright, the animation seems as if you are driving a car straightforward. If you grab the steering wheel handle and turn it left, an arrow animation going left can be seen. If you turn the handle right, the arrow animation goes towards the right. If flipped upside down, the arrow is headed up which indicates the autodrive mode.
#include <Charliplexing.h>
#include "Charliplexing.h"
#include "Font.h"
#include "WProgram.h"
byte line = 0;
char buffer[10];
int value;
int tiltPin = A5;
int tiltPin2 = A4;
int tiltState = 0;
int tiltState2 = 0;
#define SCREEN_WIDTH 13
#define SCROLL_DELAY 80
#define REPEAT_DELAY 500
int textLength, totalPixels;
char text[]="HI";
void setup()
{
LedSign::Init(); //Initializes the screen
getLength(text, &textLength, &totalPixels);
pinMode(tiltPin, OUTPUT);
pinMode(tiltPin2, OUTPUT);
}
void loop()
{
tiltState = digitalRead(tiltPin);
tiltState2 = digitalRead(tiltPin2);
if(tiltState == HIGH && tiltState2 == HIGH){
leftArrow();
}
else if(tiltState == HIGH){
rightArrow();
}
else if(tiltState2 == HIGH){
rightArrow();
}
else{
roadDrive();
}
}
void DisplayBitMap(int lineint)
{
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;
}
void rightArrow(){
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(192);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(192);
DisplayBitMap(480);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(192);
DisplayBitMap(480);
DisplayBitMap(1008);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(192);
DisplayBitMap(480);
DisplayBitMap(1008);
DisplayBitMap(2040);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(192);
DisplayBitMap(480);
DisplayBitMap(1008);
DisplayBitMap(2040);
DisplayBitMap(4092);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(192);
DisplayBitMap(480);
DisplayBitMap(1008);
DisplayBitMap(2040);
DisplayBitMap(4092);
DisplayBitMap(480);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(192);
DisplayBitMap(480);
DisplayBitMap(1008);
DisplayBitMap(2040);
DisplayBitMap(4092);
DisplayBitMap(480);
DisplayBitMap(480);
delay(100);
DisplayBitMap(0);
DisplayBitMap(192);
DisplayBitMap(480);
DisplayBitMap(1008);
DisplayBitMap(2040);
DisplayBitMap(4092);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
delay(100);
DisplayBitMap(192);
DisplayBitMap(480);
DisplayBitMap(1008);
DisplayBitMap(2040);
DisplayBitMap(4092);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
delay(100);
DisplayBitMap(480);
DisplayBitMap(1008);
DisplayBitMap(2040);
DisplayBitMap(4092);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(0);
delay(100);
DisplayBitMap(1008);
DisplayBitMap(2040);
DisplayBitMap(4092);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(0);
DisplayBitMap(0);
delay(100);
DisplayBitMap(2040);
DisplayBitMap(4092);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
delay(100);
DisplayBitMap(4092);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
delay(100);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
delay(100);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
delay(100);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
delay(100);
DisplayBitMap(480);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
}
void leftArrow(){
delay(100);
DisplayBitMap(192);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
delay(100);
DisplayBitMap(480);
DisplayBitMap(192);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
delay(100);
DisplayBitMap(1008);
DisplayBitMap(480);
DisplayBitMap(192);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
delay(100);
DisplayBitMap(2040);
DisplayBitMap(1008);
DisplayBitMap(480);
DisplayBitMap(192);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
delay(100);
DisplayBitMap(4092);
DisplayBitMap(2040);
DisplayBitMap(1008);
DisplayBitMap(480);
DisplayBitMap(192);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
delay(100);
DisplayBitMap(480);
DisplayBitMap(4092);
DisplayBitMap(2040);
DisplayBitMap(1008);
DisplayBitMap(480);
DisplayBitMap(192);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
delay(100);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(4092);
DisplayBitMap(2040);
DisplayBitMap(1008);
DisplayBitMap(480);
DisplayBitMap(192);
DisplayBitMap(0);
DisplayBitMap(0);
delay(100);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(4092);
DisplayBitMap(2040);
DisplayBitMap(1008);
DisplayBitMap(480);
DisplayBitMap(192);
DisplayBitMap(0);
delay(100);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(4092);
DisplayBitMap(2040);
DisplayBitMap(1008);
DisplayBitMap(480);
DisplayBitMap(192);
delay(100);
DisplayBitMap(0);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(4092);
DisplayBitMap(2040);
DisplayBitMap(1008);
DisplayBitMap(480);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(4092);
DisplayBitMap(2040);
DisplayBitMap(1008);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(4092);
DisplayBitMap(2040);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(4092);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(480);
DisplayBitMap(480);
DisplayBitMap(480);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(480);
DisplayBitMap(480);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(480);
delay(100);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
DisplayBitMap(0);
}
void roadDrive(){
delay(100);
DisplayBitMap(528);
DisplayBitMap(528);
DisplayBitMap(1032);
DisplayBitMap(1032);
DisplayBitMap(2052);
DisplayBitMap(2052);
DisplayBitMap(4098);
DisplayBitMap(4098);
DisplayBitMap(8193);
delay(100);
DisplayBitMap(720);
DisplayBitMap(528);
DisplayBitMap(1032);
DisplayBitMap(1032);
DisplayBitMap(2052);
DisplayBitMap(2052);
DisplayBitMap(4098);
DisplayBitMap(4098);
DisplayBitMap(8193);
delay(100);
DisplayBitMap(720);
DisplayBitMap(720);
DisplayBitMap(1032);
DisplayBitMap(1032);
DisplayBitMap(2052);
DisplayBitMap(2052);
DisplayBitMap(4098);
DisplayBitMap(4098);
DisplayBitMap(8193);
delay(100);
DisplayBitMap(720);
DisplayBitMap(720);
DisplayBitMap(1224);
DisplayBitMap(1032);
DisplayBitMap(2052);
DisplayBitMap(2052);
DisplayBitMap(4098);
DisplayBitMap(4098);
DisplayBitMap(8193);
delay(100);
DisplayBitMap(720);
DisplayBitMap(720);
DisplayBitMap(1224);
DisplayBitMap(1224);
DisplayBitMap(2052);
DisplayBitMap(2052);
DisplayBitMap(4098);
DisplayBitMap(4098);
DisplayBitMap(8193);
delay(100);
DisplayBitMap(528);
DisplayBitMap(720);
DisplayBitMap(1224);
DisplayBitMap(1224);
DisplayBitMap(2244);
DisplayBitMap(2052);
DisplayBitMap(4098);
DisplayBitMap(4098);
DisplayBitMap(8193);
delay(100);
DisplayBitMap(528);
DisplayBitMap(528);
DisplayBitMap(1224);
DisplayBitMap(1224);
DisplayBitMap(2244);
DisplayBitMap(2244);
DisplayBitMap(4098);
DisplayBitMap(4098);
DisplayBitMap(8193);
delay(100);
DisplayBitMap(528);
DisplayBitMap(528);
DisplayBitMap(1032);
DisplayBitMap(1224);
DisplayBitMap(2244);
DisplayBitMap(2244);
DisplayBitMap(4578);
DisplayBitMap(4098);
DisplayBitMap(8193);
delay(100);
DisplayBitMap(528);
DisplayBitMap(528);
DisplayBitMap(1032);
DisplayBitMap(1032);
DisplayBitMap(2244);
DisplayBitMap(2244);
DisplayBitMap(4578);
DisplayBitMap(4578);
DisplayBitMap(8193);
delay(100);
DisplayBitMap(528);
DisplayBitMap(528);
DisplayBitMap(1032);
DisplayBitMap(1032);
DisplayBitMap(2052);
DisplayBitMap(2244);
DisplayBitMap(4578);
DisplayBitMap(4578);
DisplayBitMap(9201);
delay(100);
DisplayBitMap(528);
DisplayBitMap(528);
DisplayBitMap(1032);
DisplayBitMap(1032);
DisplayBitMap(2052);
DisplayBitMap(2052);
DisplayBitMap(4578);
DisplayBitMap(4578);
DisplayBitMap(9201);
delay(100);
DisplayBitMap(528);
DisplayBitMap(528);
DisplayBitMap(1032);
DisplayBitMap(1032);
DisplayBitMap(2052);
DisplayBitMap(2052);
DisplayBitMap(4098);
DisplayBitMap(4578);
DisplayBitMap(9201);
delay(100);
DisplayBitMap(528);
DisplayBitMap(528);
DisplayBitMap(1032);
DisplayBitMap(1032);
DisplayBitMap(2052);
DisplayBitMap(2052);
DisplayBitMap(4098);
DisplayBitMap(4098);
DisplayBitMap(9201);
delay(100);
DisplayBitMap(528);
DisplayBitMap(528);
DisplayBitMap(1032);
DisplayBitMap(1032);
DisplayBitMap(2052);
DisplayBitMap(2052);
DisplayBitMap(4098);
DisplayBitMap(4098);
DisplayBitMap(8193);
}
void writeText(){
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);
}
void checkTilt(){
if(tiltState == HIGH){
rightArrow();
}
else if(tiltState2 == HIGH){
leftArrow();
}
}
void getLength(char* charArray, int* lengthPtr, int* pixelPtr) {
int charCount = 0, pixelCount = 0;
char * charPtr = charArray;
while (*charPtr != '\0' && *charPtr != '\n') {
charPtr++;
charCount++;
pixelCount += Font::Draw(*charPtr,-SCREEN_WIDTH,0);
}
*pixelPtr = pixelCount;
*lengthPtr = charCount;
}

Reply