hey all, first post so sorry if im breaking any rules. I made a small Decimal to Binary "game" that is compatible with the SainSmart LCD Shield that I thought I would share. It's not perfect but it works
Used an Arduino Mega as the board, needed something with an extra analog pin to get a random seed, but it should still work on the Uno. I used Arduino 1.0 to compile and upload the sketch as well as the 1.0 library provided by SainSmart.
3 levels, Noob, Engineer, and MLG Pr0. Each one changes the rounds 3,5, and 7 respectively. A random Decimal number is displayed and your score is based on how fast u can convert into binary. after you complete the number of rounds that u picked, your score will be displayed.
Level choose screen, select to confirm, up/down to change levels.
game screen left/right to change cursor position, up to change bit to a 1, down to change to a 0. after you change a bit the cursor automatically moves to the right (towards LSB).
Download:
or the code below:
#include <LiquidCrystal.h>
#include <DFR_Key.h>
//Pin assignments for SainSmart LCD Keypad Shield
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//---------------------------------------------
DFR_Key keypad;
///SCORE TRX/////
////SCORE TRX END//////
////PRE_GAME////
void GAME_CALL (int &SCORE, int SCORE_LIMIT)
{
int GAMES_COUNT = 0;
Serial.println(SCORE_LIMIT);
for(GAMES_COUNT = 1; GAMES_COUNT <= SCORE_LIMIT; GAMES_COUNT++)
{
PLAY_THE_GAME(SCORE);
}
}
///////////////
////PLAY THE GAME////
int PLAY_THE_GAME (int &SCORE)
{
int RANDOM_INT = 0;
int USER_INPUT[9];
int ARRAY_INDEX = 0;
int BUTTON_Y = 0;
int USER_COMPARE = 0;
int EXPONENT = 0;
int BINARY_INPUT = 0;
int OLD_BUTTON_Y = 0;
int COUNTER = 0;
int POSITION = 0;
int BLINK = 0;
float TIME = 0;
char CHAR_HOLDER[10];
randomSeed(analogRead(7));
RANDOM_INT = random(1,256);
COUNTER = 0;
lcd.clear();
lcd.setCursor(4,0);
sprintf(CHAR_HOLDER, "%d", RANDOM_INT);
lcd.print(CHAR_HOLDER);
lcd.setCursor(0,1);
for (COUNTER = 0; COUNTER <= 7; COUNTER++)
{
USER_INPUT[COUNTER] = 0;
sprintf(CHAR_HOLDER, "%d", USER_INPUT[COUNTER]);
lcd.print(CHAR_HOLDER);
}
USER_INPUT[7] = 0;
COUNTER = 0;
POSITION = 0;
while (1)
{
BUTTON_Y = keypad.getKey();
if (BUTTON_Y != 0)
{
if (BUTTON_Y == 3)
{
BINARY_INPUT = 1;
}
if (BUTTON_Y == 4)
{
BINARY_INPUT = 0;
}
if (BUTTON_Y == 2)
{
if (POSITION <= 0)
{
POSITION = 0;
}
else
{
lcd.setCursor(POSITION,1);
lcd.print(USER_INPUT[POSITION]);
POSITION--;
}
}
if (BUTTON_Y == 5)
{
if (POSITION >= 7)
{
POSITION = 7;
}
else
{
lcd.setCursor(POSITION,1);
lcd.print(USER_INPUT[POSITION]);
POSITION++;
}
}
if ( (BUTTON_Y == 4) || (BUTTON_Y == 3) )
{
lcd.setCursor(POSITION, 1);
sprintf(CHAR_HOLDER, "%d", BINARY_INPUT);
lcd.print(CHAR_HOLDER);
USER_INPUT[POSITION] = BINARY_INPUT;
USER_COMPARE = 0;
ARRAY_INDEX = 7;
for(COUNTER = 0; COUNTER <= 7; COUNTER++)
{
EXPONENT = pow(2, COUNTER);
if (COUNTER > 1)
{
EXPONENT++;
}
USER_COMPARE = USER_COMPARE + (USER_INPUT[ARRAY_INDEX] * EXPONENT);
ARRAY_INDEX--;
}//end USER_COMPARE change
Serial.println(USER_COMPARE);
POSITION++;
if (POSITION >= 7)
{
POSITION = 7;
}
if (POSITION <= 0)
{
POSITION = 0;
}
}
if (USER_COMPARE == RANDOM_INT)
{
break;
}
BUTTON_Y = 0;
delay(125);
TIME = TIME + .125;
}
if (BUTTON_Y == 0)
{
delay(10);
TIME = TIME + .10;
if (BLINK >= 3)
{
lcd.setCursor(POSITION,1);
sprintf(CHAR_HOLDER, "%d", USER_INPUT[POSITION]);
lcd.print(CHAR_HOLDER);
lcd.setCursor(POSITION,1);
BLINK = 0;
}
if (BLINK == 1)
{
lcd.setCursor(POSITION,1);
lcd.print("_");
BLINK++;
lcd.setCursor(POSITION,1);
}
BLINK++;
}
}
SCORE = SCORE + (600/TIME);
Serial.println(SCORE);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("SUCCESS!");
}
////PLAY THE GAME END//////
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("**Binary Game!**");
lcd.setCursor(0,1);
lcd.print("A NiTyTech Corp.");
delay(2500);
randomSeed(analogRead(15));
}
void loop()
{
int SCORE = 0;
int LEVEL = 0;
int LEVEL_CHANGE = 0;
int SCORE_LIMIT = 0;
int BUTTON_Y = 0;
char CHAR_HOLDER[7];
LEVEL_CHANGE = 1;
LEVEL = 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Choose a level:");
lcd.setCursor(0,1);
lcd.print("NOOB [3]");
SCORE_LIMIT = 3;
while (BUTTON_Y != 1)
{
BUTTON_Y = keypad.getKey();
if (BUTTON_Y == 3)
{
if (LEVEL >= 3)
{
LEVEL = 3;
}
else
{
LEVEL++;
}
}
if (BUTTON_Y == 4)
{
if (LEVEL <= 1)
{
LEVEL = 1;
}
else
{
LEVEL--;
}
}
if (LEVEL != LEVEL_CHANGE)
{
LEVEL_CHANGE = LEVEL;
switch (LEVEL)
{
case 1:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Choose a level:");
lcd.setCursor(0,1);
lcd.print("NOOB [3]");
SCORE_LIMIT = 3;
delay(300);
break;
case 2:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Choose a level:");
lcd.setCursor(0,1);
lcd.print("Engineer [5]");
SCORE_LIMIT = 5;
delay(300);
break;
case 3:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Choose a level:");
lcd.setCursor(0,1);
lcd.print("MLG Pr0 [7]");
SCORE_LIMIT = 7;
delay(300);
break;
}
}
}
lcd.clear();
lcd.setCursor(0,0);
GAME_CALL(SCORE, SCORE_LIMIT);
while(1)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" GAME OVER ");
lcd.setCursor(0,1);
sprintf(CHAR_HOLDER, "%d", SCORE);
lcd.print("SCORE: ");
lcd.print(CHAR_HOLDER);
delay(10000);
}
}