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