Introduction: Arduino LCD Game

Picture of Arduino LCD Game

Making a great many things is very easy with Arduino microcontrollers. This Instructable tells you how to create a simple 1-button video game made from a handful of parts in the Arduino Basic Kit from 123D Circuits. It is a side-scrolling jumping game. This serves as a good starting point for creating your own games from simple maker electronics.

Parts list (all can be found in the Arduino Basic Kit):

  • 1 x Arduino UNO
  • 1 x LCD screen (16 x 2 character)
  • 1 x Electronics breadboard
  • 1 x 220 Ω resistor
  • 1 x Pushbutton switch
  • Solid-core hookup wire
  • 1 x USB cable

Step 1: Assembling the Parts

Picture of Assembling the Parts

The parts needed are shown in the picture above.
Start off with the Arduino unpowered. Do NOT plug in the USB cable. That will happen in a later step when it is time to program it and try the game out.

Use a long hookup wire to connect the 5V signal on the Arduino to the far left of the red row at the top of the breadboard.

Use a long hookup wire to connect the GND signal to the far left of the black (or blue on some breadboards) row at the top of the breadboard.

The LCD (Liquid Crystal Display) module has a 16-pin male header on the underside. Plug this into the breadboard as shown in the picture. All of the electronic signals that power and control the LCD go through this header.

These pins are (from left to right):

  1. GND - power ground signal
  2. VCC - positive power signal
  3. V0 - contrast adjust
  4. RS - register select
  5. R/W - read/write select
  6. E - operation enable signal
  7. DB0 - data bit 0 (not used here)
  8. DB1 - data bit 1 (not used here)
  9. DB2 - data bit 2 (not used here)
  10. DB3 - data bit 3 (not used here)
  11. DB4 - data bit 4
  12. DB5 - data bit 5
  13. DB6 - data bit 6
  14. DB7 - data bit 7
  15. LED+ - backlight LED positive
  16. LED- - backlight LED negative

Using short hookup wires, connect GND and LED- (pins 1 and 16) to the black row at the top.

Similarly, connect VCC (pin 2) to the red row at the top with a short hookup wire.

Bend the wire leads of the 220 Ω resistor (red-red-brown colored bands) and connect it between LED+ and the red row at the top of the breadboard.

Use longer hookup wires to make the remainder of the connections:

  • Connect DB7 to Arduino pin 3
  • Connect DB6 to Arduino pin 4
  • Connect DB5 to Arduino pin 5
  • Connect DB4 to Arduino pin 6
  • Connect E to Arduino pin 9
  • Connect R/W to Arduino pin 10 (or to black row at top of breadboard)
  • Connect RS to Arduino pin 11
  • Connect V0 to Arduino pin 12 (or to black row at top of breadboard)

Plug the pushbutton somewhere to the left of the LCD screen, straddling the channel running along the center of the breadboard (see picture above). Connect one of the top two pins of the button to the black row at the top of the breadboard using a short hookup wire. Connect the other pin at the top of the button to pin 2 of the Arduino.

Step 2: Programming the Arduino

Picture of Programming the Arduino

At this point, you should be ready to program the Arduino and test it out.

Start by making sure that you have the Arduino software installed on your computer. Download the LCD_Game.ino file on this page to your computer and open it in the Arduino software. Make sure the board is set properly for programming (Tools → Board →Arduino Uno).

Connect the Arduino to your computer using the USB cable. This will provide power to the Arduino/game and allow you to upload your program to the Arduino.

At this point, the screen of the LCD display should light up.

Program the Arduino by selecting File → Upload (or press the right arrow button at the top of the Arduino software).

If all goes well, the LCD screen should now show the game start screen like in the picture above.

Step 3: Changing Things and Making an Arduino Game Shield

Picture of Changing Things and Making an Arduino Game Shield

At this point you have everything working, so what more is there to do?

If you want to change the way the game works, or make a cool printed circuit board for this project that plugs directly onto the Arduino and replaces of all those messy wires, here's how to get started.

I developed this game entirely using the very cool (FREE!) online electronics simulator 123D Circuits. I actually had the game fully working and tested before ever taking the Arduino out of the kit. Here's the virtual circuit for the Arduino LCD game.

You can actually play the game right in your browser without ever having to put together any actual electronics ("Oh, now you tell me"). If you want to make any changes to the game, or explore what's going on, you can copy the virtual circuit using the "Duplicate Project" button. You can then edit the source code and try out changes right there. There's also a full-featured debugger where you can step through the program line-by-line and see what's going on!

If you are so inclined, you can also make a circuit board to nicely connect your electronics to the Arduino. The project has a "Download Gerber" button that will get you the files necessary to give to a printed circuit board (PCB) manufacturer to have a custom printed circuit board made. You can see what this PCB look like by clicking the "PCB View" button toward the upper right of the circuit. Here's some useful info on getting that PCB made.

Enjoy!

Comments

cliptwings made it! (author)2016-05-24

Thanks so much for developing this project. I used it and modified it for a geocache I just placed. Once the finder gets at least 50 points, the LCD displays the coordinates for the final stage of the cache.

RichardO62 (author)cliptwings2017-08-18

I was thinking the same idea just before I read your comment! Could I be so blunt as to ask you for the modified code?

cliptwings (author)RichardO622017-08-18

Here ya go:

/* This program is a one button collision avoidance game. You
* are a geocacher running around obstacles to get to the next
* cache. If you score 50 or better, you will be presented
* with the coordinates to the next stage. If you are too
* slow, you get to try again. Thank you to Mr Joshua Brooks
* for developing all the code except for the coordinate display.
*/

#include

#define PIN_BUTTON 2
#define PIN_AUTOPLAY 1
#define PIN_READWRITE 10
#define PIN_CONTRAST 12

#define SPRITE_RUN1 1
#define SPRITE_RUN2 2
#define SPRITE_JUMP 3
#define SPRITE_JUMP_UPPER '.' // Use the '.' character for the head
#define SPRITE_JUMP_LOWER 4
#define SPRITE_TERRAIN_EMPTY ' ' // User the ' ' character
#define SPRITE_TERRAIN_SOLID 5
#define SPRITE_TERRAIN_SOLID_RIGHT 6
#define SPRITE_TERRAIN_SOLID_LEFT 7

#define HERO_HORIZONTAL_POSITION 1 // Horizontal position of hero on screen

#define TERRAIN_WIDTH 16
#define TERRAIN_EMPTY 0
#define TERRAIN_LOWER_BLOCK 1
#define TERRAIN_UPPER_BLOCK 2

#define HERO_POSITION_OFF 0 // Hero is invisible
#define HERO_POSITION_RUN_LOWER_1 1 // Hero is running on lower row (pose 1)
#define HERO_POSITION_RUN_LOWER_2 2 // (pose 2)

#define HERO_POSITION_JUMP_1 3 // Starting a jump
#define HERO_POSITION_JUMP_2 4 // Half-way up
#define HERO_POSITION_JUMP_3 5 // Jump is on upper row
#define HERO_POSITION_JUMP_4 6 // Jump is on upper row
#define HERO_POSITION_JUMP_5 7 // Jump is on upper row
#define HERO_POSITION_JUMP_6 8 // Jump is on upper row
#define HERO_POSITION_JUMP_7 9 // Half-way down
#define HERO_POSITION_JUMP_8 10 // About to land

#define HERO_POSITION_RUN_UPPER_1 11 // Hero is running on upper row (pose 1)
#define HERO_POSITION_RUN_UPPER_2 12 // (pose 2)

LiquidCrystal lcd(11, 9, 6, 5, 4, 3);
static char terrainUpper[TERRAIN_WIDTH + 1];
static char terrainLower[TERRAIN_WIDTH + 1];
static bool buttonPushed = false;

int myscore = 0;

void initializeGraphics(){
static byte graphics[] = {
// Run position 1
B01100,
B01100,
B00000,
B01110,
B11100,
B01100,
B11010,
B10011,
// Run position 2
B01100,
B01100,
B00000,
B01100,
B01100,
B01100,
B01100,
B01110,
// Jump
B01100,
B01100,
B00000,
B11110,
B01101,
B11111,
B10000,
B00000,
// Jump lower
B11110,
B01101,
B11111,
B10000,
B00000,
B00000,
B00000,
B00000,
// Ground
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
// Ground right
B00011,
B00011,
B00011,
B00011,
B00011,
B00011,
B00011,
B00011,
// Ground left
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
};
int i;
// Skip using character 0, this allows lcd.print() to be used to
// quickly draw multiple characters
for (i = 0; i < 7; ++i) {
lcd.createChar(i + 1, &graphics[i * 8]);
}
for (i = 0; i < TERRAIN_WIDTH; ++i) {
terrainUpper[i] = SPRITE_TERRAIN_EMPTY;
terrainLower[i] = SPRITE_TERRAIN_EMPTY;
}
}

// Slide the terrain to the left in half-character increments
//
void advanceTerrain(char* terrain, byte newTerrain){
for (int i = 0; i < TERRAIN_WIDTH; ++i) {
char current = terrain[i];
char next = (i == TERRAIN_WIDTH-1) ? newTerrain : terrain[i+1];
switch (current){
case SPRITE_TERRAIN_EMPTY:
terrain[i] = (next == SPRITE_TERRAIN_SOLID) ? SPRITE_TERRAIN_SOLID_RIGHT : SPRITE_TERRAIN_EMPTY;
break;
case SPRITE_TERRAIN_SOLID:
terrain[i] = (next == SPRITE_TERRAIN_EMPTY) ? SPRITE_TERRAIN_SOLID_LEFT : SPRITE_TERRAIN_SOLID;
break;
case SPRITE_TERRAIN_SOLID_RIGHT:
terrain[i] = SPRITE_TERRAIN_SOLID;
break;
case SPRITE_TERRAIN_SOLID_LEFT:
terrain[i] = SPRITE_TERRAIN_EMPTY;
break;
}
}
}

bool drawHero(byte position, char* terrainUpper, char* terrainLower, unsigned int score) {
bool collide = false;
char upperSave = terrainUpper[HERO_HORIZONTAL_POSITION];
char lowerSave = terrainLower[HERO_HORIZONTAL_POSITION];
byte upper, lower;
switch (position) {
case HERO_POSITION_OFF:
upper = lower = SPRITE_TERRAIN_EMPTY;
break;
case HERO_POSITION_RUN_LOWER_1:
upper = SPRITE_TERRAIN_EMPTY;
lower = SPRITE_RUN1;
break;
case HERO_POSITION_RUN_LOWER_2:
upper = SPRITE_TERRAIN_EMPTY;
lower = SPRITE_RUN2;
break;
case HERO_POSITION_JUMP_1:
case HERO_POSITION_JUMP_8:
upper = SPRITE_TERRAIN_EMPTY;
lower = SPRITE_JUMP;
break;
case HERO_POSITION_JUMP_2:
case HERO_POSITION_JUMP_7:
upper = SPRITE_JUMP_UPPER;
lower = SPRITE_JUMP_LOWER;
break;
case HERO_POSITION_JUMP_3:
case HERO_POSITION_JUMP_4:
case HERO_POSITION_JUMP_5:
case HERO_POSITION_JUMP_6:
upper = SPRITE_JUMP;
lower = SPRITE_TERRAIN_EMPTY;
break;
case HERO_POSITION_RUN_UPPER_1:
upper = SPRITE_RUN1;
lower = SPRITE_TERRAIN_EMPTY;
break;
case HERO_POSITION_RUN_UPPER_2:
upper = SPRITE_RUN2;
lower = SPRITE_TERRAIN_EMPTY;
break;
}
if (upper != ' ') {
terrainUpper[HERO_HORIZONTAL_POSITION] = upper;
collide = (upperSave == SPRITE_TERRAIN_EMPTY) ? false : true;
}
if (lower != ' ') {
terrainLower[HERO_HORIZONTAL_POSITION] = lower;
collide |= (lowerSave == SPRITE_TERRAIN_EMPTY) ? false : true;
}

byte digits = (score > 9999) ? 5 : (score > 999) ? 4 : (score > 99) ? 3 : (score > 9) ? 2 : 1;

// Draw the scene
terrainUpper[TERRAIN_WIDTH] = '\0';
terrainLower[TERRAIN_WIDTH] = '\0';
char temp = terrainUpper[16-digits];
terrainUpper[16-digits] = '\0';
lcd.setCursor(0,0);
lcd.print(terrainUpper);
terrainUpper[16-digits] = temp;
lcd.setCursor(0,1);
lcd.print(terrainLower);

lcd.setCursor(16 - digits,0);
lcd.print(score);

myscore = score;

terrainUpper[HERO_HORIZONTAL_POSITION] = upperSave;
terrainLower[HERO_HORIZONTAL_POSITION] = lowerSave;
return collide;
}

// Handle the button push as an interrupt
void buttonPush() {
buttonPushed = true;
}

void setup(){
pinMode(PIN_READWRITE, OUTPUT);
digitalWrite(PIN_READWRITE, LOW);
pinMode(PIN_CONTRAST, OUTPUT);
digitalWrite(PIN_CONTRAST, LOW);
pinMode(PIN_BUTTON, INPUT);
digitalWrite(PIN_BUTTON, HIGH);
pinMode(PIN_AUTOPLAY, OUTPUT);
digitalWrite(PIN_AUTOPLAY, HIGH);

// Digital pin 2 maps to interrupt 0
attachInterrupt(0/*PIN_BUTTON*/, buttonPush, FALLING);

initializeGraphics();

lcd.begin(16, 2);
}

void loop(){
static byte heroPos = HERO_POSITION_RUN_LOWER_1;
static byte newTerrainType = TERRAIN_EMPTY;
static byte newTerrainDuration = 1;
static bool playing = false;
static bool blink = false;
static unsigned int distance = 0;

if (!playing) {
drawHero((blink) ? HERO_POSITION_OFF : heroPos, terrainUpper, terrainLower, distance >> 3);
if (blink) {
lcd.setCursor(0,0);
lcd.print("Press to Start");
}
delay(250);
blink = !blink;
if (buttonPushed) {
initializeGraphics();
heroPos = HERO_POSITION_RUN_LOWER_1;
playing = true;
buttonPushed = false;
distance = 0;
}
return;
}

// Shift the terrain to the left
advanceTerrain(terrainLower, newTerrainType == TERRAIN_LOWER_BLOCK ? SPRITE_TERRAIN_SOLID : SPRITE_TERRAIN_EMPTY);
advanceTerrain(terrainUpper, newTerrainType == TERRAIN_UPPER_BLOCK ? SPRITE_TERRAIN_SOLID : SPRITE_TERRAIN_EMPTY);

// Make new terrain to enter on the right
if (--newTerrainDuration == 0) {
if (newTerrainType == TERRAIN_EMPTY) {
newTerrainType = (random(3) == 0) ? TERRAIN_UPPER_BLOCK : TERRAIN_LOWER_BLOCK;
newTerrainDuration = 2 + random(10);
} else {
newTerrainType = TERRAIN_EMPTY;
newTerrainDuration = 10 + random(10);
}
}

if (buttonPushed) {
if (heroPos <= HERO_POSITION_RUN_LOWER_2) heroPos = HERO_POSITION_JUMP_1;
buttonPushed = false;
}

if (drawHero(heroPos, terrainUpper, terrainLower, distance >> 3)) {
playing = false; // The hero collided with something. Too bad.
if (myscore >= 50) {
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" You did it! ");
lcd.setCursor(0,1);
lcd.print("Your Score: ");
lcd.print(myscore);
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Here are the");
lcd.setCursor(0,1);
lcd.print("next coords...");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("N 32 15.165");
lcd.setCursor(0,1);
lcd.print("W 109 50.135");
delay(10000);
}
else {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("<<< Too Slow >>>");
lcd.setCursor(0,1);
lcd.print(" Try Again! ");
delay(2000);
}

} else {
if (heroPos == HERO_POSITION_RUN_LOWER_2 || heroPos == HERO_POSITION_JUMP_8) {
heroPos = HERO_POSITION_RUN_LOWER_1;
} else if ((heroPos >= HERO_POSITION_JUMP_3 && heroPos <= HERO_POSITION_JUMP_5) && terrainLower[HERO_HORIZONTAL_POSITION] != SPRITE_TERRAIN_EMPTY) {
heroPos = HERO_POSITION_RUN_UPPER_1;
} else if (heroPos >= HERO_POSITION_RUN_UPPER_1 && terrainLower[HERO_HORIZONTAL_POSITION] == SPRITE_TERRAIN_EMPTY) {
heroPos = HERO_POSITION_JUMP_5;
} else if (heroPos == HERO_POSITION_RUN_UPPER_2) {
heroPos = HERO_POSITION_RUN_UPPER_1;
} else {
++heroPos;
}
++distance;

digitalWrite(PIN_AUTOPLAY, terrainLower[HERO_HORIZONTAL_POSITION + 2] == SPRITE_TERRAIN_EMPTY ? HIGH : LOW);
}
delay(100);
}

RichardO62 (author)cliptwings2017-08-18

Nice! Thanks a lot! Noticed a missing <LiquidCrystal.h> in the start but apart from that it worked excellent!!

deeppws (author)cliptwings2017-02-01

That's brilliant

TimC211 (author)cliptwings2017-01-31

yeah

joshua.brooks (author)cliptwings2016-05-24

That's brilliant!!!!

zhollett made it! (author)2017-09-18

Autodesk has moved circuits to Tinkercad, but your pin-to-pin instructions made it so that I could make it. Thanks!

Flameytail (author)2017-08-18

I made your game a long while ago(its amazing by the way) and i remembered it a while ago and decided to improve it. I had a piezo and i wanted to add music to it. long story short i added music to it and i uploaded it. the music worked great, but the game.... not so much. the game works all right but the frame rates are about 50 frames per hour. i think i might have accedentally edited the speed of the game but have no idea how to fix it. one of you probably knows how to edit the speed of the game.

joshua.brooks (author)Flameytail2017-08-20

How are you generating the music? Perhaps playing your notes is blocking the game from progressing at normal speed?

FABIOB14 made it! (author)2017-07-24

I made it with my son for his school's science fair. We changed the code to work with the I2C library. We also added a button to double speed, another button to turn it on and off, and an internal cel phone battery whith a module to recharge it. The case was made from the cover of an old notebook.

https://youtu.be/YtMiJrbCzOs

https://youtu.be/YtMiJrbCzOs

BhaskarP6 (author)2017-06-08

really cool one, thanks for the tutorial

BitterweedDK made it! (author)2017-04-19

Finally made it work on the IC2 :) It is such a simple setup with that display (Once you code it the right way). Thankyou for a simple, but "hard to figure out" project :)

hi , can you send me the code ?? please :D

MarcC105 made it! (author)2017-05-11

Hi my name's Marc and I've just copyed this game for a little school free arduino project. While I was doing it i got an idea. How can I change the characters (little guy, and squares) to animals or other things? (thanks for your help).

aaronlionheart (author)MarcC1052017-05-23

hi marc , do you have the arduino code with lcd i2c? can you send me pliz?

joshua.brooks (author)MarcC1052017-05-11

The display allows you to customize eight 5 pixel x 8 pixel characters. Look in the source code around line 43 for something like:
// Run position 1

B01100,

B01100,

B00000,

B01110,

B11100,

B01100,

B11010,

B10011,
...

This is where the program defines the custom characters using binary values for each of the horizontal pixel lines of the characters. Each line that begins with 'B' defines a binary value. The following 5 characters are either '0' if the pixel shold be off or '1' if the pixel should be on. I hope that this helps.

DaveC216 made it! (author)2016-10-04

What a fun project! I converted the LCD to use the I2C library, which was very simple and much simpler hookup. Very creative and an excellent use for a spare Arduino and LCD. I'm thinking I'll write another version somewhat like Centipede where the blocks come in from different directions. Thank you for the inspiration. This is going to be a LOT of fun!

Diogo Nery (author)DaveC2162017-03-22

Can you send the game code?
SaltanatM (author)DaveC2162016-11-22

where did you changed your code in order to make it work

SaltanatM (author)DaveC2162016-11-22

Hi)) I saw form your picture that you connected the lcd to analog input , that's fimiliar to my situation, but I can not get the image of the game on lcd. Please give me some advice , i want to try it too...

DaveC216 (author)DaveC2162016-10-04

p.s. I love the autoplay option. Very entertaining to just let the thing run by itself.

TimC211 (author)2017-03-17

somehow I managed to get over 395

EvripidisM made it! (author)2017-02-20

very good!!

gogoguy (author)2016-03-30

I got 91

zubeyr (author)gogoguy2017-02-15

İ am 10 years and I got 147 my dad got 256

lukecorcoran (author)gogoguy2016-05-01

i got 104

Melih_16 (author)2016-11-13

Acil yardim edin arduino atinca programi boyle hata veriyor acil yardim edin

zubeyr (author)Melih_162017-02-15

abi hatanı copy edib at böyle göremedim.

joshua.brooks (author)Melih_162016-11-14

Maalesef sorunu tamamen anlamıyorum. Ayrıca, Türkçe bilmiyorum. BareMinimum örnek programında olduğu gibi çok basit bir programı derleyebiliyor ve yükleyebiliyor musunuz?

Wiz3x (author)2016-12-26

Doesn't work for me. I checked the wiring 3 times and it didn't work anyway. The LCD turned on but it shown just a white line at the top. what can I do? Please help me.

dcontractor1 (author)Wiz3x2017-02-03

I am getting the same line on the top

I've not encountered this particular problem. In the picture from the first person, it looks like the backlight resistor is not 220 ohms. It might be possible that the circuit is drawing too much current, so the LCD panel isn't able to properly initialize. Try removing the backlight resistor or that wire to ground, and see what happens after resetting the Arduino.

orkunza made it! (author)2017-02-01

Great project? Works nicely!

TimC211 (author)2017-01-31

I CAN'T PUT AN IMAGE INTO THIS

TimC211 (author)TimC2112017-01-31

SO I CAN'T SAY I MADE IT!!!!

TimC211 (author)2017-01-27

I think you need to add some more images

sunlitho (author)2017-01-24

The Arduino IDE will not open the sketch. Can you send a text file?

joshua.brooks (author)sunlitho2017-01-25

The .ino file is actually just a text file. Try changing the .ino to .txt or just open it with a text editor and copy and paste the text into a new Arduino project.

Fiaz IslamB (author)2017-01-20

My LCD backlights arent glowing. how do i fix it ? i did everything exactly as mentioned.

Some LCD panels don't have a backlight installed. It is the (often) trapezoidal shaped part immediately to the right of the panel. If yours does have the backlight installed, it could just be faulty. It's like any other LED, so if you at any point you connected it without the resistor, it could have broken because of too much current through it.

RyanS374 (author)2016-12-26

This was super fun and easy. This was my first project on my new arduino and I made it with almost no problems

SaltanatM made it! (author)2016-11-22

Your project is really great! It inspired me to try it too! But in my lcd i have 4 pins: vcc, gnd, sda,scl and i have been connecting them to arduino board 's analog input in order vcc-5v,gnd-gnd,sda-A4,scl-A5. And i have changed in code LiquidCrystal_I2C
lcd(12, 11, 5, 4, 3, 2); to LiquidCrystal_I2C
lcd(0x3f,16,2); and there is no picture(( Please, help me .

joshua.brooks (author)SaltanatM2016-11-29

I've never used an I2C module, but there are a couple of possibilities that I see here. It appears that you may have the row/column parameters swapped. According to this page (http://playground.arduino.cc/Main/LCDI2C), the # of rows should be the second parameter and the number of columns the third. Also, are you absolutely sure that the I2C address (the first parameter) is correct?

ProZockermt2 made it! (author)2016-11-02

really great and easy, i build it myself and well... one tip for new ones solder your wires into the lcd properly and you wont get any flicks it will work perfectly.

Also i will code some other Games for this Layout maybe a multiplayer for this game ;)

Al

'DrackuinM (author)2016-10-22

very good. but now I also want to control everything from a mobile application made in app inventor. you can help me?

joshua.brooks (author)'DrackuinM2016-10-24

I've no pactical experience with app inventor, so I can't help directly. How do you plan to send the button pushes to the Arduino?

RobodiaR (author)2016-10-20

Thanks for sharing this amazing project!
While checking the code, i did not understand this line.
Can you plz explain , what this line do?
digitalWrite(PIN_AUTOPLAY, terrainLower[HERO_HORIZONTAL_POSITION + 2] == SPRITE_TERRAIN_EMPTY ? HIGH : LOW);

Thank you!

RobodiaR (author)RobodiaR2016-10-20

And can you plz tell me where Arduino pin 1 (TX pin) connected to?
From the schmaticDiagram, it seems like it is connected to Ground(GND) pin.

joshua.brooks (author)RobodiaR2016-10-20

That pin is connected to a second, secret "cheat" button.

About This Instructable

64,715views

344favorites

License:

More by joshua.brooks:Pogo pin programming connectorHand-held zoetrope sculptureNeopixel Night Light
Add instructable to: