Driving wheel version 2


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.

In version 2, I inserted a potentiometer and 2 super bright white LEDs into the analog pins of the LoL Shield. The left LED is turned on if tilted left and the right LED is turned off if tilted right. When upside down, the LEDs blink to signal auto drive. The potentiometer controls the delay of the animation therefore can represent the acceleration of driving a car.


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

byte line = 0;
char buffer[10];
int value;

int tiltPin = A5;
int tiltPin2 = A4;
int speedControl = A3;

int tiltState = 0;
int tiltState2 = 0;
int speedValue = 0;

int rightLed = A2;
int leftLed = A1;

#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);
 pinMode(rightLed, OUTPUT);
 pinMode(leftLed, OUTPUT);
}

void loop()
{
 tiltState = digitalRead(tiltPin);
 tiltState2 = digitalRead(tiltPin2);

if(tiltState == HIGH && tiltState2 == HIGH){
 autoBlink();
 leftArrow();
 }
 else if(tiltState == HIGH){
 digitalWrite(rightLed, HIGH);
 digitalWrite(leftLed, LOW);
 rightArrow();
 }
 else if(tiltState2 == HIGH){
 digitalWrite(leftLed, HIGH);
 digitalWrite(rightLed, LOW);
 rightArrow();
 }
 else{
 digitalWrite(leftLed, LOW);
 digitalWrite(rightLed, LOW);
 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(){
 speedValue = analogRead(speedControl);
 int potentSpeed = map(speedValue, 0, 1023, 0, 300);
 //delay regularly 100
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(192);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(192);
 DisplayBitMap(480);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(192);
 DisplayBitMap(480);
 DisplayBitMap(1008);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(192);
 DisplayBitMap(480);
 DisplayBitMap(1008);
 DisplayBitMap(2040);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(192);
 DisplayBitMap(480);
 DisplayBitMap(1008);
 DisplayBitMap(2040);
 DisplayBitMap(4092);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(192);
 DisplayBitMap(480);
 DisplayBitMap(1008);
 DisplayBitMap(2040);
 DisplayBitMap(4092);
 DisplayBitMap(480);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(192);
 DisplayBitMap(480);
 DisplayBitMap(1008);
 DisplayBitMap(2040);
 DisplayBitMap(4092);
 DisplayBitMap(480);
 DisplayBitMap(480);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(192);
 DisplayBitMap(480);
 DisplayBitMap(1008);
 DisplayBitMap(2040);
 DisplayBitMap(4092);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 delay(potentSpeed);
 DisplayBitMap(192);
 DisplayBitMap(480);
 DisplayBitMap(1008);
 DisplayBitMap(2040);
 DisplayBitMap(4092);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 delay(potentSpeed);
 DisplayBitMap(480);
 DisplayBitMap(1008);
 DisplayBitMap(2040);
 DisplayBitMap(4092);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(1008);
 DisplayBitMap(2040);
 DisplayBitMap(4092);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(0);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(2040);
 DisplayBitMap(4092);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(4092);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(480);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
}

void leftArrow(){
 speedValue = analogRead(speedControl);
 int potentSpeed = map(speedValue, 0, 1023, 0, 300);

delay(potentSpeed);
 DisplayBitMap(192);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(480);
 DisplayBitMap(192);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(1008);
 DisplayBitMap(480);
 DisplayBitMap(192);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(2040);
 DisplayBitMap(1008);
 DisplayBitMap(480);
 DisplayBitMap(192);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(4092);
 DisplayBitMap(2040);
 DisplayBitMap(1008);
 DisplayBitMap(480);
 DisplayBitMap(192);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(480);
 DisplayBitMap(4092);
 DisplayBitMap(2040);
 DisplayBitMap(1008);
 DisplayBitMap(480);
 DisplayBitMap(192);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(4092);
 DisplayBitMap(2040);
 DisplayBitMap(1008);
 DisplayBitMap(480);
 DisplayBitMap(192);
 DisplayBitMap(0);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(4092);
 DisplayBitMap(2040);
 DisplayBitMap(1008);
 DisplayBitMap(480);
 DisplayBitMap(192);
 DisplayBitMap(0);
 delay(potentSpeed);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(4092);
 DisplayBitMap(2040);
 DisplayBitMap(1008);
 DisplayBitMap(480);
 DisplayBitMap(192);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(4092);
 DisplayBitMap(2040);
 DisplayBitMap(1008);
 DisplayBitMap(480);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(4092);
 DisplayBitMap(2040);
 DisplayBitMap(1008);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(4092);
 DisplayBitMap(2040);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(4092);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(480);
 DisplayBitMap(480);
 DisplayBitMap(480);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(480);
 DisplayBitMap(480);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(480);
 delay(potentSpeed);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
 DisplayBitMap(0);
}

void roadDrive(){
 speedValue = analogRead(speedControl);
 int potentSpeed = map(speedValue, 0, 1023, 0, 300);

delay(potentSpeed);
 DisplayBitMap(528);
 DisplayBitMap(528);
 DisplayBitMap(1032);
 DisplayBitMap(1032);
 DisplayBitMap(2052);
 DisplayBitMap(2052);
 DisplayBitMap(4098);
 DisplayBitMap(4098);
 DisplayBitMap(8193);
 delay(potentSpeed);
 DisplayBitMap(720);
 DisplayBitMap(528);
 DisplayBitMap(1032);
 DisplayBitMap(1032);
 DisplayBitMap(2052);
 DisplayBitMap(2052);
 DisplayBitMap(4098);
 DisplayBitMap(4098);
 DisplayBitMap(8193);
 delay(potentSpeed);
 DisplayBitMap(720);
 DisplayBitMap(720);
 DisplayBitMap(1032);
 DisplayBitMap(1032);
 DisplayBitMap(2052);
 DisplayBitMap(2052);
 DisplayBitMap(4098);
 DisplayBitMap(4098);
 DisplayBitMap(8193);
 delay(potentSpeed);
 DisplayBitMap(720);
 DisplayBitMap(720);
 DisplayBitMap(1224);
 DisplayBitMap(1032);
 DisplayBitMap(2052);
 DisplayBitMap(2052);
 DisplayBitMap(4098);
 DisplayBitMap(4098);
 DisplayBitMap(8193);
 delay(potentSpeed);
 DisplayBitMap(720);
 DisplayBitMap(720);
 DisplayBitMap(1224);
 DisplayBitMap(1224);
 DisplayBitMap(2052);
 DisplayBitMap(2052);
 DisplayBitMap(4098);
 DisplayBitMap(4098);
 DisplayBitMap(8193);
 delay(potentSpeed);
 DisplayBitMap(528);
 DisplayBitMap(720);
 DisplayBitMap(1224);
 DisplayBitMap(1224);
 DisplayBitMap(2244);
 DisplayBitMap(2052);
 DisplayBitMap(4098);
 DisplayBitMap(4098);
 DisplayBitMap(8193);
 delay(potentSpeed);
 DisplayBitMap(528);
 DisplayBitMap(528);
 DisplayBitMap(1224);
 DisplayBitMap(1224);
 DisplayBitMap(2244);
 DisplayBitMap(2244);
 DisplayBitMap(4098);
 DisplayBitMap(4098);
 DisplayBitMap(8193);
 delay(potentSpeed);
 DisplayBitMap(528);
 DisplayBitMap(528);
 DisplayBitMap(1032);
 DisplayBitMap(1224);
 DisplayBitMap(2244);
 DisplayBitMap(2244);
 DisplayBitMap(4578);
 DisplayBitMap(4098);
 DisplayBitMap(8193);
 delay(potentSpeed);
 DisplayBitMap(528);
 DisplayBitMap(528);
 DisplayBitMap(1032);
 DisplayBitMap(1032);
 DisplayBitMap(2244);
 DisplayBitMap(2244);
 DisplayBitMap(4578);
 DisplayBitMap(4578);
 DisplayBitMap(8193);
 delay(potentSpeed);
 DisplayBitMap(528);
 DisplayBitMap(528);
 DisplayBitMap(1032);
 DisplayBitMap(1032);
 DisplayBitMap(2052);
 DisplayBitMap(2244);
 DisplayBitMap(4578);
 DisplayBitMap(4578);
 DisplayBitMap(9201);
 delay(potentSpeed);
 DisplayBitMap(528);
 DisplayBitMap(528);
 DisplayBitMap(1032);
 DisplayBitMap(1032);
 DisplayBitMap(2052);
 DisplayBitMap(2052);
 DisplayBitMap(4578);
 DisplayBitMap(4578);
 DisplayBitMap(9201);
 delay(potentSpeed);
 DisplayBitMap(528);
 DisplayBitMap(528);
 DisplayBitMap(1032);
 DisplayBitMap(1032);
 DisplayBitMap(2052);
 DisplayBitMap(2052);
 DisplayBitMap(4098);
 DisplayBitMap(4578);
 DisplayBitMap(9201);
 delay(potentSpeed);
 DisplayBitMap(528);
 DisplayBitMap(528);
 DisplayBitMap(1032);
 DisplayBitMap(1032);
 DisplayBitMap(2052);
 DisplayBitMap(2052);
 DisplayBitMap(4098);
 DisplayBitMap(4098);
 DisplayBitMap(9201);
 delay(potentSpeed);
 DisplayBitMap(528);
 DisplayBitMap(528);
 DisplayBitMap(1032);
 DisplayBitMap(1032);
 DisplayBitMap(2052);
 DisplayBitMap(2052);
 DisplayBitMap(4098);
 DisplayBitMap(4098);
 DisplayBitMap(8193);
}

void autoBlink(){
 speedValue = analogRead(speedControl);
 int potentSpeed = map(speedValue, 0, 1023, 0, 300);
 digitalWrite(rightLed, HIGH);
 digitalWrite(leftLed, HIGH);
 delay(potentSpeed);
 digitalWrite(rightLed, LOW);
 digitalWrite(leftLed, LOW);
 delay(potentSpeed);
}